restrictAccess(Auth::isManager()) ->setPageTitle(WT_I18N::translate('Website logs')); require WT_ROOT . 'includes/functions/functions_edit.php'; $earliest = WT_DB::prepare("SELECT DATE(MIN(log_time)) FROM `##log`")->execute(array())->fetchOne(); $latest = WT_DB::prepare("SELECT DATE(MAX(log_time)) FROM `##log`")->execute(array())->fetchOne(); // Filtering $action = WT_Filter::get('action'); $from = WT_Filter::get('from', '\d\d\d\d-\d\d-\d\d', $earliest); $to = WT_Filter::get('to', '\d\d\d\d-\d\d-\d\d', $latest); $type = WT_Filter::get('type', 'auth|change|config|debug|edit|error|media|search'); $text = WT_Filter::get('text'); $ip = WT_Filter::get('ip'); $user = WT_Filter::get('user'); $search = WT_Filter::get('search'); $search = isset($search['value']) ? $search['value'] : null; if (Auth::isAdmin()) { // Administrators can see all logs $gedc = WT_Filter::get('gedc'); } else { // Managers can only see logs relating to this gedcom $gedc = WT_GEDCOM; } $query = array(); $args = array(); if ($search) { $query[] = "log_message LIKE CONCAT('%', ?, '%')"; $args [] = $search; } if ($from) { $query[] = 'log_time>=?'; $args [] = $from; } if ($to) { $query[] = 'log_timeexecute($args); break; case 'export': Zend_Session::writeClose(); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="webtrees-logs.csv"'); $rows = WT_DB::prepare($SELECT1 . $WHERE . ' ORDER BY log_id')->execute($args)->fetchAll(); foreach ($rows as $row) { echo '"', $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"; } return; case 'load_json': Zend_Session::writeClose(); $start = WT_Filter::getInteger('start'); $length = WT_Filter::getInteger('length'); Auth::user()->setPreference('admin_site_log_page_size', $length); if ($length > 0) { $LIMIT = " LIMIT " . $start . ',' . $length; } else { $LIMIT = ""; } $order = WT_Filter::getArray('order'); if ($order) { $ORDER_BY = ' ORDER BY '; foreach ($order as $key => $value) { if ($key > 0) { $ORDER_BY .= ','; } // Datatables numbers columns 0, 1, 2, ... // MySQL numbers columns 1, 2, 3, ... switch ($value['dir']) { case 'asc': $ORDER_BY .= (1 + $value['column']) . ' ASC '; break; case 'desc': $ORDER_BY .= (1 + $value['column']) . ' DESC '; break; } } } else { $ORDER_BY = '1 ASC'; } // This becomes a JSON list, not array, so need to fetch with numeric keys. $data = WT_DB::prepare($SELECT1 . $WHERE . $ORDER_BY . $LIMIT)->execute($args)->fetchAll(PDO::FETCH_NUM); foreach ($data as &$datum) { $datum[2] = WT_Filter::escapeHtml($datum[2]); $datum[4] = WT_Filter::escapeHtml($datum[4]); $datum[5] = WT_Filter::escapeHtml($datum[5]); } // Total filtered/unfiltered rows $recordsFiltered = WT_DB::prepare("SELECT FOUND_ROWS()")->fetchOne(); $recordsTotal = WT_DB::prepare($SELECT2 . $WHERE)->execute($args)->fetchOne(); header('Content-type: application/json'); // See http://www.datatables.net/usage/server-side echo json_encode(array( 'draw' => WT_Filter::getInteger('draw'), 'recordsTotal' => $recordsTotal, 'recordsFiltered' => $recordsFiltered, 'data' => $data )); return; } $controller ->pageHeader() ->addExternalJavascript(WT_JQUERY_DATATABLES_JS_URL) ->addExternalJavascript(WT_DATATABLES_BOOTSTRAP_JS_URL) ->addExternalJavascript(WT_MOMENT_JS_URL) ->addExternalJavascript(WT_BOOTSTRAP_DATETIMEPICKER_JS_URL) ->addInlineJavascript(' jQuery(".table-site-logs").dataTable( { processing: true, serverSide: true, ajax: "'.WT_BASE_URL . WT_SCRIPT_NAME . '?action=load_json&from=' . $from . '&to=' . $to . '&type=' . $type . '&text=' . rawurlencode($text) . '&ip=' . rawurlencode($ip) . '&user=' . rawurlencode($user) . '&gedc=' . rawurlencode($gedc) . '", ' . WT_I18N::datatablesI18N(array(10, 20, 50, 100, 500, 1000, -1)) . ', sorting: [[ 0, "desc" ]], pageLength: ' . Auth::user()->getPreference('admin_site_log_page_size', 20) . ' }); jQuery("#from,#to").parent("div").datetimepicker({ format: "YYYY-MM-DD", minDate: "' . $earliest . '", maxDate: "' . $latest . '", locale: "' . WT_LOCALE . '", icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-arrow-up", down: "fa fa-arrow-down", previous: "fa fa-arrow-left", next: "fa fa-arrow-right", today: "fa fa-trash-o", clear: "fa fa-trash-o" } }); '); $url = WT_SCRIPT_NAME . '?from=' . rawurlencode($from) . '&to=' . rawurlencode($to) . '&type=' . rawurlencode($type) . '&text=' . rawurlencode($text) . '&ip=' . rawurlencode($ip) . '&user=' . rawurlencode($user) . '&gedc=' . rawurlencode($gedc); $users_array = array(); foreach (User::all() as $tmp_user) { $users_array[$tmp_user->getUserName()] = $tmp_user->getUserName(); } ?>

getPageTitle(); ?>

'', 'auth'=>'auth', 'config'=>'config', 'debug'=>'debug', 'edit'=>'edit', 'error'=>'error', 'media'=>'media', 'search'=>'search'), null, $type, 'class="form-control"'); ?>
getPageTitle(); ?>