summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/AdminSiteController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Controllers/AdminSiteController.php')
-rw-r--r--app/Http/Controllers/AdminSiteController.php1127
1 files changed, 574 insertions, 553 deletions
diff --git a/app/Http/Controllers/AdminSiteController.php b/app/Http/Controllers/AdminSiteController.php
index b06fee38e0..36fff984c2 100644
--- a/app/Http/Controllers/AdminSiteController.php
+++ b/app/Http/Controllers/AdminSiteController.php
@@ -35,636 +35,657 @@ use Symfony\Component\HttpFoundation\Response;
/**
* Controller for site administration.
*/
-class AdminSiteController extends AbstractBaseController {
- protected $layout = 'layouts/administration';
+class AdminSiteController extends AbstractBaseController
+{
+ protected $layout = 'layouts/administration';
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function analyticsForm(Request $request): Response {
- $title = /* I18N: e.g. http://www.google.com/analytics */
- I18N::translate('Tracking and analytics');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function analyticsForm(Request $request): Response
+ {
+ $title = /* I18N: e.g. http://www.google.com/analytics */
+ I18N::translate('Tracking and analytics');
- return $this->viewResponse('admin/site-analytics', [
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('admin/site-analytics', [
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function analyticsSave(Request $request): RedirectResponse {
- Site::setPreference('BING_WEBMASTER_ID', $request->get('BING_WEBMASTER_ID'));
- Site::setPreference('GOOGLE_WEBMASTER_ID', $request->get('GOOGLE_WEBMASTER_ID'));
- Site::setPreference('GOOGLE_ANALYTICS_ID', $request->get('GOOGLE_ANALYTICS_ID'));
- Site::setPreference('PIWIK_URL', $request->get('PIWIK_URL'));
- Site::setPreference('PIWIK_SITE_ID', $request->get('PIWIK_SITE_ID'));
- Site::setPreference('STATCOUNTER_PROJECT_ID', $request->get('STATCOUNTER_PROJECT_ID'));
- Site::setPreference('STATCOUNTER_SECURITY_ID', $request->get('STATCOUNTER_SECURITY_ID'));
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function analyticsSave(Request $request): RedirectResponse
+ {
+ Site::setPreference('BING_WEBMASTER_ID', $request->get('BING_WEBMASTER_ID'));
+ Site::setPreference('GOOGLE_WEBMASTER_ID', $request->get('GOOGLE_WEBMASTER_ID'));
+ Site::setPreference('GOOGLE_ANALYTICS_ID', $request->get('GOOGLE_ANALYTICS_ID'));
+ Site::setPreference('PIWIK_URL', $request->get('PIWIK_URL'));
+ Site::setPreference('PIWIK_SITE_ID', $request->get('PIWIK_SITE_ID'));
+ Site::setPreference('STATCOUNTER_PROJECT_ID', $request->get('STATCOUNTER_PROJECT_ID'));
+ Site::setPreference('STATCOUNTER_SECURITY_ID', $request->get('STATCOUNTER_SECURITY_ID'));
- FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
- $url = route('admin-control-panel');
+ FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
+ $url = route('admin-control-panel');
- return new RedirectResponse($url);
- }
+ return new RedirectResponse($url);
+ }
- /**
- * Show old user files in the data folder.
- *
- * @return Response
- */
- public function cleanData(): Response {
- $protected = [
- '.htaccess',
- '.gitignore',
- 'index.php',
- 'config.ini.php',
- ];
+ /**
+ * Show old user files in the data folder.
+ *
+ * @return Response
+ */
+ public function cleanData(): Response
+ {
+ $protected = [
+ '.htaccess',
+ '.gitignore',
+ 'index.php',
+ 'config.ini.php',
+ ];
- // If we are storing the media in the data folder (this is the default), then don’t delete it.
- foreach (Tree::getAll() as $tree) {
- $MEDIA_DIRECTORY = $tree->getPreference('MEDIA_DIRECTORY');
- list($folder) = explode('/', $MEDIA_DIRECTORY);
+ // If we are storing the media in the data folder (this is the default), then don’t delete it.
+ foreach (Tree::getAll() as $tree) {
+ $MEDIA_DIRECTORY = $tree->getPreference('MEDIA_DIRECTORY');
+ list($folder) = explode('/', $MEDIA_DIRECTORY);
- if ($folder !== '..') {
- $protected[] = $folder;
- }
- }
+ if ($folder !== '..') {
+ $protected[] = $folder;
+ }
+ }
- $entries = [];
+ $entries = [];
- foreach (new DirectoryIterator(WT_DATA_DIR) as $file) {
- $entries[] = $file->getFilename();
- }
- $entries = array_diff($entries, [
- '.',
- '..',
- ]);
+ foreach (new DirectoryIterator(WT_DATA_DIR) as $file) {
+ $entries[] = $file->getFilename();
+ }
+ $entries = array_diff($entries, [
+ '.',
+ '..',
+ ]);
- return $this->viewResponse('admin/clean-data', [
- 'title' => I18N::translate('Clean up data folder'),
- 'entries' => $entries,
- 'protected' => $protected,
- ]);
- }
+ return $this->viewResponse('admin/clean-data', [
+ 'title' => I18N::translate('Clean up data folder'),
+ 'entries' => $entries,
+ 'protected' => $protected,
+ ]);
+ }
- /**
- * Delete old user files in the data folder.
- *
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function cleanDataAction(Request $request): RedirectResponse {
- $to_delete = (array) $request->get('to_delete');
- $to_delete = array_filter($to_delete);
+ /**
+ * Delete old user files in the data folder.
+ *
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function cleanDataAction(Request $request): RedirectResponse
+ {
+ $to_delete = (array)$request->get('to_delete');
+ $to_delete = array_filter($to_delete);
- foreach ($to_delete as $path) {
- // Show different feedback message for files and folders.
- $is_dir = is_dir(WT_DATA_DIR . $path);
+ foreach ($to_delete as $path) {
+ // Show different feedback message for files and folders.
+ $is_dir = is_dir(WT_DATA_DIR . $path);
- if (File::delete(WT_DATA_DIR . $path)) {
- if ($is_dir) {
- FlashMessages::addMessage(I18N::translate('The folder %s has been deleted.', e($path)), 'success');
- } else {
- FlashMessages::addMessage(I18N::translate('The file %s has been deleted.', e($path)), 'success');
- }
- } else {
- if ($is_dir) {
- FlashMessages::addMessage(I18N::translate('The folder %s could not be deleted.', e($path)), 'danger');
- } else {
- FlashMessages::addMessage(I18N::translate('The file %s could not be deleted.', e($path)), 'danger');
- }
- }
- }
+ if (File::delete(WT_DATA_DIR . $path)) {
+ if ($is_dir) {
+ FlashMessages::addMessage(I18N::translate('The folder %s has been deleted.', e($path)), 'success');
+ } else {
+ FlashMessages::addMessage(I18N::translate('The file %s has been deleted.', e($path)), 'success');
+ }
+ } else {
+ if ($is_dir) {
+ FlashMessages::addMessage(I18N::translate('The folder %s could not be deleted.', e($path)), 'danger');
+ } else {
+ FlashMessages::addMessage(I18N::translate('The file %s could not be deleted.', e($path)), 'danger');
+ }
+ }
+ }
- return new RedirectResponse(route('admin-control-panel'));
- }
+ return new RedirectResponse(route('admin-control-panel'));
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function languagesForm(Request $request): Response {
- $language_tags = [];
- foreach (I18N::activeLocales() as $active_locale) {
- $language_tags[] = $active_locale->languageTag();
- }
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function languagesForm(Request $request): Response
+ {
+ $language_tags = [];
+ foreach (I18N::activeLocales() as $active_locale) {
+ $language_tags[] = $active_locale->languageTag();
+ }
- $title = I18N::translate('Languages');
+ $title = I18N::translate('Languages');
- return $this->viewResponse('admin/site-languages', [
- 'language_tags' => $language_tags,
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('admin/site-languages', [
+ 'language_tags' => $language_tags,
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function languagesSave(Request $request): RedirectResponse {
- Site::setPreference('LANGUAGES', implode(',', $request->get('LANGUAGES', [])));
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function languagesSave(Request $request): RedirectResponse
+ {
+ Site::setPreference('LANGUAGES', implode(',', $request->get('LANGUAGES', [])));
- FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
- $url = route('admin-control-panel');
+ FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
+ $url = route('admin-control-panel');
- return new RedirectResponse($url);
- }
+ return new RedirectResponse($url);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function logs(Request $request): Response {
- $earliest = Database::prepare("SELECT IFNULL(DATE(MIN(log_time)), CURDATE()) FROM `##log`")->execute([])->fetchOne();
- $latest = Database::prepare("SELECT IFNULL(DATE(MAX(log_time)), CURDATE()) FROM `##log`")->execute([])->fetchOne();
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function logs(Request $request): Response
+ {
+ $earliest = Database::prepare("SELECT IFNULL(DATE(MIN(log_time)), CURDATE()) FROM `##log`")->execute([])->fetchOne();
+ $latest = Database::prepare("SELECT IFNULL(DATE(MAX(log_time)), CURDATE()) FROM `##log`")->execute([])->fetchOne();
- $action = $request->get('action', '');
- $from = $request->get('from', $earliest);
- $to = $request->get('to', $latest);
- $type = $request->get('type', '');
- $text = $request->get('text', '');
- $ip = $request->get('ip', '');
- $username = $request->get('username', '');
- $gedc = $request->get('gedc');
+ $action = $request->get('action', '');
+ $from = $request->get('from', $earliest);
+ $to = $request->get('to', $latest);
+ $type = $request->get('type', '');
+ $text = $request->get('text', '');
+ $ip = $request->get('ip', '');
+ $username = $request->get('username', '');
+ $gedc = $request->get('gedc');
- $from = max($from, $earliest);
- $to = min(max($from, $to), $latest);
+ $from = max($from, $earliest);
+ $to = min(max($from, $to), $latest);
- $user_options = ['' => ''];
- foreach (User::all() as $tmp_user) {
- $user_options[$tmp_user->getUserName()] = $tmp_user->getUserName();
- }
+ $user_options = ['' => ''];
+ foreach (User::all() as $tmp_user) {
+ $user_options[$tmp_user->getUserName()] = $tmp_user->getUserName();
+ }
- $tree_options = ['' => ''] + Tree::getNameList();
+ $tree_options = ['' => ''] + Tree::getNameList();
- $title = I18N::translate('Website logs');
+ $title = I18N::translate('Website logs');
- return $this->viewResponse('admin/site-logs', [
- 'action' => $action,
- 'earliest' => $earliest,
- 'from' => $from,
- 'gedc' => $gedc,
- 'ip' => $ip,
- 'latest' => $latest,
- 'tree_options' => $tree_options,
- 'title' => $title,
- 'to' => $to,
- 'text' => $text,
- 'type' => $type,
- 'username' => $username,
- 'user_options' => $user_options,
- ]);
- }
+ return $this->viewResponse('admin/site-logs', [
+ 'action' => $action,
+ 'earliest' => $earliest,
+ 'from' => $from,
+ 'gedc' => $gedc,
+ 'ip' => $ip,
+ 'latest' => $latest,
+ 'tree_options' => $tree_options,
+ 'title' => $title,
+ 'to' => $to,
+ 'text' => $text,
+ 'type' => $type,
+ 'username' => $username,
+ 'user_options' => $user_options,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return JsonResponse
- */
- public function logsData(Request $request): JsonResponse {
- $from = $request->get('from');
- $to = $request->get('to');
- $type = $request->get('type', '');
- $text = $request->get('text', '');
- $ip = $request->get('ip', '');
- $username = $request->get('username', '');
- $gedc = $request->get('gedc');
- $search = $request->get('search', []);
- $search = isset($search['value']) ? $search['value'] : '';
+ /**
+ * @param Request $request
+ *
+ * @return JsonResponse
+ */
+ public function logsData(Request $request): JsonResponse
+ {
+ $from = $request->get('from');
+ $to = $request->get('to');
+ $type = $request->get('type', '');
+ $text = $request->get('text', '');
+ $ip = $request->get('ip', '');
+ $username = $request->get('username', '');
+ $gedc = $request->get('gedc');
+ $search = $request->get('search', []);
+ $search = isset($search['value']) ? $search['value'] : '';
- $start = (int) $request->get('start');
- $length = (int) $request->get('length');
- $order = $request->get('order', []);
- $draw = (int) $request->get('draw');
+ $start = (int)$request->get('start');
+ $length = (int)$request->get('length');
+ $order = $request->get('order', []);
+ $draw = (int)$request->get('draw');
- $sql =
- "SELECT SQL_CALC_FOUND_ROWS log_id, log_time, log_type, log_message, ip_address, IFNULL(user_name, '<none>') AS user_name, IFNULL(gedcom_name, '<none>') AS gedcom_name" .
- " FROM `##log`" .
- " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
- " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
- " WHERE 1";
+ $sql =
+ "SELECT SQL_CALC_FOUND_ROWS log_id, log_time, log_type, log_message, ip_address, IFNULL(user_name, '<none>') AS user_name, IFNULL(gedcom_name, '<none>') AS gedcom_name" .
+ " FROM `##log`" .
+ " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
+ " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
+ " WHERE 1";
- $args = [];
- if ($search) {
- $sql .= " AND log_message LIKE CONCAT('%', :search, '%')";
- $args['search'] = $search;
- }
- if ($from) {
- $sql .= " AND log_time >= :from";
- $args['from'] = $from;
- }
- if ($to) {
- $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
- $args['to'] = $to;
- }
- if ($type) {
- $sql .= " AND log_type = :type";
- $args['type'] = $type;
- }
- if ($text) {
- $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
- $args['text'] = $text;
- }
- if ($ip) {
- $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
- $args['ip'] = $ip;
- }
- if ($username) {
- $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
- $args['user'] = $username;
- }
- if ($gedc) {
- $sql .= " AND gedcom_name = :gedc";
- $args['gedc'] = $gedc;
- }
+ $args = [];
+ if ($search) {
+ $sql .= " AND log_message LIKE CONCAT('%', :search, '%')";
+ $args['search'] = $search;
+ }
+ if ($from) {
+ $sql .= " AND log_time >= :from";
+ $args['from'] = $from;
+ }
+ if ($to) {
+ $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
+ $args['to'] = $to;
+ }
+ if ($type) {
+ $sql .= " AND log_type = :type";
+ $args['type'] = $type;
+ }
+ if ($text) {
+ $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
+ $args['text'] = $text;
+ }
+ if ($ip) {
+ $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
+ $args['ip'] = $ip;
+ }
+ if ($username) {
+ $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
+ $args['user'] = $username;
+ }
+ if ($gedc) {
+ $sql .= " AND gedcom_name = :gedc";
+ $args['gedc'] = $gedc;
+ }
- if ($order) {
- $sql .= " ORDER BY ";
- foreach ($order as $key => $value) {
- if ($key > 0) {
- $sql .= ',';
- }
- // Columns in datatables are numbered from zero.
- // Columns in MySQL are numbered starting with one.
- switch ($value['dir']) {
- case 'asc':
- $sql .= (1 + $value['column']) . " ASC ";
- break;
- case 'desc':
- $sql .= (1 + $value['column']) . " DESC ";
- break;
- }
- }
- } else {
- $sql .= " ORDER BY 1 ASC";
- }
+ if ($order) {
+ $sql .= " ORDER BY ";
+ foreach ($order as $key => $value) {
+ if ($key > 0) {
+ $sql .= ',';
+ }
+ // Columns in datatables are numbered from zero.
+ // Columns in MySQL are numbered starting with one.
+ switch ($value['dir']) {
+ case 'asc':
+ $sql .= (1 + $value['column']) . " ASC ";
+ break;
+ case 'desc':
+ $sql .= (1 + $value['column']) . " DESC ";
+ break;
+ }
+ }
+ } else {
+ $sql .= " ORDER BY 1 ASC";
+ }
- if ($length) {
- $sql .= " LIMIT :limit OFFSET :offset";
- $args['limit'] = $length;
- $args['offset'] = $start;
- }
+ if ($length) {
+ $sql .= " LIMIT :limit OFFSET :offset";
+ $args['limit'] = $length;
+ $args['offset'] = $start;
+ }
- // This becomes a JSON list, not array, so need to fetch with numeric keys.
- $data = Database::prepare($sql)->execute($args)->fetchAll(PDO::FETCH_NUM);
+ // This becomes a JSON list, not array, so need to fetch with numeric keys.
+ $data = Database::prepare($sql)->execute($args)->fetchAll(PDO::FETCH_NUM);
- foreach ($data as &$datum) {
- $datum[2] = e($datum[2]);
- $datum[3] = '<span dir="auto">' . e($datum[3]) . '</span>';
- $datum[4] = '<span dir="auto">' . e($datum[4]) . '</span>';
- $datum[5] = '<span dir="auto">' . e($datum[5]) . '</span>';
- $datum[6] = '<span dir="auto">' . e($datum[6]) . '</span>';
- }
+ foreach ($data as &$datum) {
+ $datum[2] = e($datum[2]);
+ $datum[3] = '<span dir="auto">' . e($datum[3]) . '</span>';
+ $datum[4] = '<span dir="auto">' . e($datum[4]) . '</span>';
+ $datum[5] = '<span dir="auto">' . e($datum[5]) . '</span>';
+ $datum[6] = '<span dir="auto">' . e($datum[6]) . '</span>';
+ }
- // Total filtered/unfiltered rows
- $recordsFiltered = (int) Database::prepare("SELECT FOUND_ROWS()")->fetchOne();
- $recordsTotal = (int) Database::prepare("SELECT COUNT(*) FROM `##log`")->fetchOne();
+ // Total filtered/unfiltered rows
+ $recordsFiltered = (int)Database::prepare("SELECT FOUND_ROWS()")->fetchOne();
+ $recordsTotal = (int)Database::prepare("SELECT COUNT(*) FROM `##log`")->fetchOne();
- return new JsonResponse([
- 'draw' => $draw,
- 'recordsTotal' => $recordsTotal,
- 'recordsFiltered' => $recordsFiltered,
- 'data' => $data,
- ]);
- }
+ return new JsonResponse([
+ 'draw' => $draw,
+ 'recordsTotal' => $recordsTotal,
+ 'recordsFiltered' => $recordsFiltered,
+ 'data' => $data,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function logsDelete(Request $request): Response {
- $from = $request->get('from');
- $to = $request->get('to');
- $type = $request->get('type', '');
- $text = $request->get('text', '');
- $ip = $request->get('ip', '');
- $username = $request->get('username', '');
- $gedc = $request->get('gedc');
- $search = $request->get('search', []);
- $search = isset($search['value']) ? $search['value'] : '';
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function logsDelete(Request $request): Response
+ {
+ $from = $request->get('from');
+ $to = $request->get('to');
+ $type = $request->get('type', '');
+ $text = $request->get('text', '');
+ $ip = $request->get('ip', '');
+ $username = $request->get('username', '');
+ $gedc = $request->get('gedc');
+ $search = $request->get('search', []);
+ $search = isset($search['value']) ? $search['value'] : '';
- $sql =
- "DELETE `##log` FROM `##log`" .
- " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
- " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
- " WHERE 1";
+ $sql =
+ "DELETE `##log` FROM `##log`" .
+ " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
+ " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
+ " WHERE 1";
- $args = [];
- if ($search) {
- $sql .= " AND log_message LIKE CONCAT('%', :search, '%')";
- $args['search'] = $search;
- }
- if ($from) {
- $sql .= " AND log_time >= :from";
- $args['from'] = $from;
- }
- if ($to) {
- $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
- $args['to'] = $to;
- }
- if ($type) {
- $sql .= " AND log_type = :type";
- $args['type'] = $type;
- }
- if ($text) {
- $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
- $args['text'] = $text;
- }
- if ($ip) {
- $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
- $args['ip'] = $ip;
- }
- if ($username) {
- $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
- $args['user'] = $username;
- }
- if ($gedc) {
- $sql .= " AND gedcom_name = :gedc";
- $args['gedc'] = $gedc;
- }
+ $args = [];
+ if ($search) {
+ $sql .= " AND log_message LIKE CONCAT('%', :search, '%')";
+ $args['search'] = $search;
+ }
+ if ($from) {
+ $sql .= " AND log_time >= :from";
+ $args['from'] = $from;
+ }
+ if ($to) {
+ $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
+ $args['to'] = $to;
+ }
+ if ($type) {
+ $sql .= " AND log_type = :type";
+ $args['type'] = $type;
+ }
+ if ($text) {
+ $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
+ $args['text'] = $text;
+ }
+ if ($ip) {
+ $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
+ $args['ip'] = $ip;
+ }
+ if ($username) {
+ $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
+ $args['user'] = $username;
+ }
+ if ($gedc) {
+ $sql .= " AND gedcom_name = :gedc";
+ $args['gedc'] = $gedc;
+ }
- Database::prepare($sql)->execute($args);
+ Database::prepare($sql)->execute($args);
- return new Response('');
- }
+ return new Response('');
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function logsExport(Request $request): Response {
- $from = $request->get('from');
- $to = $request->get('to');
- $type = $request->get('type', '');
- $text = $request->get('text', '');
- $ip = $request->get('ip', '');
- $username = $request->get('username', '');
- $gedc = $request->get('gedc');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function logsExport(Request $request): Response
+ {
+ $from = $request->get('from');
+ $to = $request->get('to');
+ $type = $request->get('type', '');
+ $text = $request->get('text', '');
+ $ip = $request->get('ip', '');
+ $username = $request->get('username', '');
+ $gedc = $request->get('gedc');
- $sql =
- "SELECT SQL_CALC_FOUND_ROWS log_id, log_time, log_type, log_message, ip_address, IFNULL(user_name, '<none>') AS user_name, IFNULL(gedcom_name, '<none>') AS gedcom_name" .
- " FROM `##log`" .
- " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
- " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
- " WHERE 1";
+ $sql =
+ "SELECT SQL_CALC_FOUND_ROWS log_id, log_time, log_type, log_message, ip_address, IFNULL(user_name, '<none>') AS user_name, IFNULL(gedcom_name, '<none>') AS gedcom_name" .
+ " FROM `##log`" .
+ " LEFT JOIN `##user` USING (user_id)" . // user may be deleted
+ " LEFT JOIN `##gedcom` USING (gedcom_id)" . // gedcom may be deleted
+ " WHERE 1";
- $args = [];
- if ($from) {
- $sql .= " AND log_time >= :from";
- $args['from'] = $from;
- }
- if ($to) {
- $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
- $args['to'] = $to;
- }
- if ($type) {
- $sql .= " AND log_type = :type";
- $args['type'] = $type;
- }
- if ($text) {
- $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
- $args['text'] = $text;
- }
- if ($ip) {
- $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
- $args['ip'] = $ip;
- }
- if ($username) {
- $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
- $args['user'] = $username;
- }
- if ($gedc) {
- $sql .= " AND gedcom_name = :gedc";
- $args['gedc'] = $gedc;
- }
+ $args = [];
+ if ($from) {
+ $sql .= " AND log_time >= :from";
+ $args['from'] = $from;
+ }
+ if ($to) {
+ $sql .= " AND log_time < TIMESTAMPADD(DAY, 1 , :to)"; // before end of the day
+ $args['to'] = $to;
+ }
+ if ($type) {
+ $sql .= " AND log_type = :type";
+ $args['type'] = $type;
+ }
+ if ($text) {
+ $sql .= " AND log_message LIKE CONCAT('%', :text, '%')";
+ $args['text'] = $text;
+ }
+ if ($ip) {
+ $sql .= " AND ip_address LIKE CONCAT('%', :ip, '%')";
+ $args['ip'] = $ip;
+ }
+ if ($username) {
+ $sql .= " AND user_name LIKE CONCAT('%', :user, '%')";
+ $args['user'] = $username;
+ }
+ if ($gedc) {
+ $sql .= " AND gedcom_name = :gedc";
+ $args['gedc'] = $gedc;
+ }
- $sql .= " ORDER BY log_id";
+ $sql .= " ORDER BY log_id";
- $rows = Database::prepare($sql )->execute($args)->fetchAll();
+ $rows = Database::prepare($sql)->execute($args)->fetchAll();
- $data = '';
+ $data = '';
- foreach ($rows as $row) {
- $data .=
- '"' . $row->log_time . '",' .
- '"' . $row->log_type . '",' .
- '"' . str_replace('"', '""', $row->log_message) . '",' .
- '"' . $row->ip_address . '",' .
- '"' . str_replace('"', '""', $row->user_name) . '",' .
- '"' . str_replace('"', '""', $row->gedcom_name) . '"' .
- "\n";
- }
+ foreach ($rows as $row) {
+ $data .=
+ '"' . $row->log_time . '",' .
+ '"' . $row->log_type . '",' .
+ '"' . str_replace('"', '""', $row->log_message) . '",' .
+ '"' . $row->ip_address . '",' .
+ '"' . str_replace('"', '""', $row->user_name) . '",' .
+ '"' . str_replace('"', '""', $row->gedcom_name) . '"' .
+ "\n";
+ }
- $response = new Response($data);
- $response->headers->set('Content-Type', 'text/plain');
- $response->headers->set('Content-Disposition', 'attachment; filename="webtrees-logs.csv');
+ $response = new Response($data);
+ $response->headers->set('Content-Type', 'text/plain');
+ $response->headers->set('Content-Disposition', 'attachment; filename="webtrees-logs.csv');
- return $response;
- }
+ return $response;
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function mailForm(Request $request): Response {
- $mail_ssl_options = $this->mailSslOptions();
- $mail_transport_options = $this->mailTransportOptions();
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function mailForm(Request $request): Response
+ {
+ $mail_ssl_options = $this->mailSslOptions();
+ $mail_transport_options = $this->mailTransportOptions();
- $title = I18N::translate('Sending email');
+ $title = I18N::translate('Sending email');
- return $this->viewResponse('admin/site-mail', [
- 'mail_ssl_options' => $mail_ssl_options,
- 'mail_transport_options' => $mail_transport_options,
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('admin/site-mail', [
+ 'mail_ssl_options' => $mail_ssl_options,
+ 'mail_transport_options' => $mail_transport_options,
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function mailSave(Request $request): RedirectResponse {
- Site::setPreference('SMTP_ACTIVE', $request->get('SMTP_ACTIVE'));
- Site::setPreference('SMTP_FROM_NAME', $request->get('SMTP_FROM_NAME'));
- Site::setPreference('SMTP_HOST', $request->get('SMTP_HOST'));
- Site::setPreference('SMTP_PORT', $request->get('SMTP_PORT'));
- Site::setPreference('SMTP_AUTH', $request->get('SMTP_AUTH'));
- Site::setPreference('SMTP_AUTH_USER', $request->get('SMTP_AUTH_USER'));
- Site::setPreference('SMTP_SSL', $request->get('SMTP_SSL'));
- Site::setPreference('SMTP_HELO', $request->get('SMTP_HELO'));
- if ($request->get('SMTP_AUTH_PASS', '') !== '') {
- Site::setPreference('SMTP_AUTH_PASS', $request->get('SMTP_AUTH_PASS'));
- }
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function mailSave(Request $request): RedirectResponse
+ {
+ Site::setPreference('SMTP_ACTIVE', $request->get('SMTP_ACTIVE'));
+ Site::setPreference('SMTP_FROM_NAME', $request->get('SMTP_FROM_NAME'));
+ Site::setPreference('SMTP_HOST', $request->get('SMTP_HOST'));
+ Site::setPreference('SMTP_PORT', $request->get('SMTP_PORT'));
+ Site::setPreference('SMTP_AUTH', $request->get('SMTP_AUTH'));
+ Site::setPreference('SMTP_AUTH_USER', $request->get('SMTP_AUTH_USER'));
+ Site::setPreference('SMTP_SSL', $request->get('SMTP_SSL'));
+ Site::setPreference('SMTP_HELO', $request->get('SMTP_HELO'));
+ if ($request->get('SMTP_AUTH_PASS', '') !== '') {
+ Site::setPreference('SMTP_AUTH_PASS', $request->get('SMTP_AUTH_PASS'));
+ }
- FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
- $url = route('admin-control-panel');
+ FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
+ $url = route('admin-control-panel');
- return new RedirectResponse($url);
- }
+ return new RedirectResponse($url);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function preferencesForm(Request $request): Response {
- $all_themes = Theme::themeNames();
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function preferencesForm(Request $request): Response
+ {
+ $all_themes = Theme::themeNames();
- $title = I18N::translate('Website preferences');
+ $title = I18N::translate('Website preferences');
- return $this->viewResponse('admin/site-preferences', [
- 'all_themes' => $all_themes,
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('admin/site-preferences', [
+ 'all_themes' => $all_themes,
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function preferencesSave(Request $request): RedirectResponse {
- $INDEX_DIRECTORY = $request->get('INDEX_DIRECTORY');
- if (substr($INDEX_DIRECTORY, -1) !== '/') {
- $INDEX_DIRECTORY .= '/';
- }
- if (File::mkdir($INDEX_DIRECTORY)) {
- Site::setPreference('INDEX_DIRECTORY', $INDEX_DIRECTORY);
- } else {
- FlashMessages::addMessage(I18N::translate('The folder %s does not exist, and it could not be created.', e($INDEX_DIRECTORY)), 'danger');
- }
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function preferencesSave(Request $request): RedirectResponse
+ {
+ $INDEX_DIRECTORY = $request->get('INDEX_DIRECTORY');
+ if (substr($INDEX_DIRECTORY, -1) !== '/') {
+ $INDEX_DIRECTORY .= '/';
+ }
+ if (File::mkdir($INDEX_DIRECTORY)) {
+ Site::setPreference('INDEX_DIRECTORY', $INDEX_DIRECTORY);
+ } else {
+ FlashMessages::addMessage(I18N::translate('The folder %s does not exist, and it could not be created.', e($INDEX_DIRECTORY)), 'danger');
+ }
- Site::setPreference('MEMORY_LIMIT', $request->get('MEMORY_LIMIT'));
- Site::setPreference('MAX_EXECUTION_TIME', (string) (int) $request->get('MAX_EXECUTION_TIME'));
- Site::setPreference('ALLOW_USER_THEMES', (string) (bool) $request->get('ALLOW_USER_THEMES'));
- Site::setPreference('THEME_DIR', $request->get('THEME_DIR'));
- Site::setPreference('ALLOW_CHANGE_GEDCOM', (string) (bool) $request->get('ALLOW_CHANGE_GEDCOM'));
- Site::setPreference('SESSION_TIME', (string) (int) $request->get('SESSION_TIME'));
- Site::setPreference('TIMEZONE', $request->get('TIMEZONE'));
+ Site::setPreference('MEMORY_LIMIT', $request->get('MEMORY_LIMIT'));
+ Site::setPreference('MAX_EXECUTION_TIME', (string)(int)$request->get('MAX_EXECUTION_TIME'));
+ Site::setPreference('ALLOW_USER_THEMES', (string)(bool)$request->get('ALLOW_USER_THEMES'));
+ Site::setPreference('THEME_DIR', $request->get('THEME_DIR'));
+ Site::setPreference('ALLOW_CHANGE_GEDCOM', (string)(bool)$request->get('ALLOW_CHANGE_GEDCOM'));
+ Site::setPreference('SESSION_TIME', (string)(int)$request->get('SESSION_TIME'));
+ Site::setPreference('TIMEZONE', $request->get('TIMEZONE'));
- FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
- $url = route('admin-control-panel');
+ FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
+ $url = route('admin-control-panel');
- return new RedirectResponse($url);
- }
+ return new RedirectResponse($url);
+ }
- /**
- * @param Request $request
- *
- * @return Response
- */
- public function registrationForm(Request $request): Response {
- $title = I18N::translate('Sign-in and registration');
+ /**
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function registrationForm(Request $request): Response
+ {
+ $title = I18N::translate('Sign-in and registration');
- $registration_text_options = $this->registrationTextOptions();
+ $registration_text_options = $this->registrationTextOptions();
- return $this->viewResponse('admin/site-registration', [
- 'registration_text_options' => $registration_text_options,
- 'title' => $title,
- ]);
- }
+ return $this->viewResponse('admin/site-registration', [
+ 'registration_text_options' => $registration_text_options,
+ 'title' => $title,
+ ]);
+ }
- /**
- * @param Request $request
- *
- * @return RedirectResponse
- */
- public function registrationSave(Request $request): RedirectResponse {
- Site::setPreference('WELCOME_TEXT_AUTH_MODE', $request->get('WELCOME_TEXT_AUTH_MODE'));
- Site::setPreference('WELCOME_TEXT_AUTH_MODE_' . WT_LOCALE, $request->get('WELCOME_TEXT_AUTH_MODE_4'));
- Site::setPreference('USE_REGISTRATION_MODULE', (string) (bool) $request->get('USE_REGISTRATION_MODULE'));
- Site::setPreference('SHOW_REGISTER_CAUTION', (string) (bool) $request->get('SHOW_REGISTER_CAUTION'));
+ /**
+ * @param Request $request
+ *
+ * @return RedirectResponse
+ */
+ public function registrationSave(Request $request): RedirectResponse
+ {
+ Site::setPreference('WELCOME_TEXT_AUTH_MODE', $request->get('WELCOME_TEXT_AUTH_MODE'));
+ Site::setPreference('WELCOME_TEXT_AUTH_MODE_' . WT_LOCALE, $request->get('WELCOME_TEXT_AUTH_MODE_4'));
+ Site::setPreference('USE_REGISTRATION_MODULE', (string)(bool)$request->get('USE_REGISTRATION_MODULE'));
+ Site::setPreference('SHOW_REGISTER_CAUTION', (string)(bool)$request->get('SHOW_REGISTER_CAUTION'));
- FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
- $url = route('admin-control-panel');
+ FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success');
+ $url = route('admin-control-panel');
- return new RedirectResponse($url);
- }
+ return new RedirectResponse($url);
+ }
- /**
- * Show the server information page.
- *
- * @return Response
- */
- public function serverInformation(): Response {
- $mysql_variables = Database::prepare("SHOW VARIABLES")->fetchAssoc();
- $mysql_variables = array_map(function ($text) {
- return str_replace(',', ', ', $text);
- }, $mysql_variables);
+ /**
+ * Show the server information page.
+ *
+ * @return Response
+ */
+ public function serverInformation(): Response
+ {
+ $mysql_variables = Database::prepare("SHOW VARIABLES")->fetchAssoc();
+ $mysql_variables = array_map(function ($text) {
+ return str_replace(',', ', ', $text);
+ }, $mysql_variables);
- ob_start();
- phpinfo(INFO_ALL & ~INFO_CREDITS & ~INFO_LICENSE);
- $phpinfo = ob_get_clean();
- preg_match('%<body>(.*)</body>%s', $phpinfo, $matches);
- $phpinfo = $matches[1];
+ ob_start();
+ phpinfo(INFO_ALL & ~INFO_CREDITS & ~INFO_LICENSE);
+ $phpinfo = ob_get_clean();
+ preg_match('%<body>(.*)</body>%s', $phpinfo, $matches);
+ $phpinfo = $matches[1];
- return $this->viewResponse('admin/server-information', [
- 'title' => I18N::translate('Server information'),
- 'phpinfo' => $phpinfo,
- 'mysql_variables' => $mysql_variables,
- ]);
- }
+ return $this->viewResponse('admin/server-information', [
+ 'title' => I18N::translate('Server information'),
+ 'phpinfo' => $phpinfo,
+ 'mysql_variables' => $mysql_variables,
+ ]);
+ }
- /**
- * A list SSL modes (e.g. for an edit control).
- *
- * @return string[]
- */
- private function mailSslOptions() {
- return [
- 'none' => I18N::translate('none'),
- /* I18N: Secure Sockets Layer - a secure communications protocol*/
- 'ssl' => I18N::translate('ssl'),
- /* I18N: Transport Layer Security - a secure communications protocol */
- 'tls' => I18N::translate('tls'),
- ];
- }
+ /**
+ * A list SSL modes (e.g. for an edit control).
+ *
+ * @return string[]
+ */
+ private function mailSslOptions()
+ {
+ return [
+ 'none' => I18N::translate('none'),
+ /* I18N: Secure Sockets Layer - a secure communications protocol*/
+ 'ssl' => I18N::translate('ssl'),
+ /* I18N: Transport Layer Security - a secure communications protocol */
+ 'tls' => I18N::translate('tls'),
+ ];
+ }
- /**
- * A list SSL modes (e.g. for an edit control).
- *
- * @return string[]
- */
- private function mailTransportOptions() {
- $options = [
- 'internal' => I18N::translate('Use PHP mail to send messages'),
- 'sendmail' => /* I18N: "sendmail" is the name of some mail software */
- I18N::translate('Use sendmail to send messages'),
- 'external' => I18N::translate('Use SMTP to send messages'),
- ];
+ /**
+ * A list SSL modes (e.g. for an edit control).
+ *
+ * @return string[]
+ */
+ private function mailTransportOptions()
+ {
+ $options = [
+ 'internal' => I18N::translate('Use PHP mail to send messages'),
+ 'sendmail' => /* I18N: "sendmail" is the name of some mail software */
+ I18N::translate('Use sendmail to send messages'),
+ 'external' => I18N::translate('Use SMTP to send messages'),
+ ];
- if (!function_exists('proc_open')) {
- unset($options['sendmail']);
- }
+ if (!function_exists('proc_open')) {
+ unset($options['sendmail']);
+ }
- return $options;
- }
+ return $options;
+ }
- /**
- * A list of registration rules (e.g. for an edit control).
- *
- * @return string[]
- */
- private function registrationTextOptions() {
- return [
- 0 => I18N::translate('No predefined text'),
- 1 => I18N::translate('Predefined text that states all users can request a user account'),
- 2 => I18N::translate('Predefined text that states admin will decide on each request for a user account'),
- 3 => I18N::translate('Predefined text that states only family members can request a user account'),
- 4 => I18N::translate('Choose user defined welcome text typed below'),
- ];
- }
+ /**
+ * A list of registration rules (e.g. for an edit control).
+ *
+ * @return string[]
+ */
+ private function registrationTextOptions()
+ {
+ return [
+ 0 => I18N::translate('No predefined text'),
+ 1 => I18N::translate('Predefined text that states all users can request a user account'),
+ 2 => I18N::translate('Predefined text that states admin will decide on each request for a user account'),
+ 3 => I18N::translate('Predefined text that states only family members can request a user account'),
+ 4 => I18N::translate('Choose user defined welcome text typed below'),
+ ];
+ }
}