Activity - everything you did, from the audit log: your * changes, your sign ins (and wrong MFA codes), the passwords you looked at * and what you exported, with when, the client and from where. Searched, * filtered by date, in views, a page at a time, each entry linking to its * record while it still exists. Yours only. */ // Default Column Sortby Filter $sort = "log_id"; $order = "DESC"; require_once "includes/inc_all_user.php"; $page_title = 'Activity'; $sortable_columns = [ 'log_id' => "log_id $order", 'log_created_at' => "log_created_at $order, log_id $order", 'client_name' => "client_name IS NULL, client_name $order, log_id DESC", 'log_type' => "log_type $order, log_action $order, log_id DESC", 'log_action' => "log_action $order, log_id DESC", 'log_ip' => "log_ip IS NULL, log_ip $order, log_id DESC", ]; if (!isset($sortable_columns[$sort])) { $sort = 'log_id'; } $views = auditLogViews(); unset($views['security']); $views['signins']['title'] = 'Signing in and out, and wrong MFA codes'; $views['data']['title'] = 'Passwords you looked at, and what you exported, downloaded and shared'; $view = isset($_GET['view']) && is_string($_GET['view']) && isset($views[$_GET['view']]) ? $_GET['view'] : ''; $scope = "log_user_id = " . intval($session_user_id); $filter_src = array_merge($_GET, ['user' => '', 'dtf' => $dtf, 'dtt' => $dtt, 'view' => $view]); $joins = auditLogJoinsSql(); $sql = mysqli_query($mysqli, "SELECT SQL_CALC_FOUND_ROWS log_id, log_type, log_action, log_description, log_ip, log_user_agent, log_created_at, log_client_id, log_user_id, log_entity_id, user_name, client_name FROM logs $joins WHERE $scope AND " . auditLogFiltersSql($filter_src) . " ORDER BY {$sortable_columns[$sort]} LIMIT $record_from, $record_to"); $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); $rows = []; while ($row = mysqli_fetch_assoc($sql)) { // A client they can't open (now, or ever - a refused attempt) isn't named or linked $row['hidden'] = intval($row['log_client_id']) > 0 && !hasClientAccess($row['log_client_id']); if ($row['hidden']) { $row['client_name'] = null; } $rows[] = $row; } $records = auditLogRecords(array_filter($rows, function ($row) { return !$row['hidden']; })); $new_ips = signInNewIpIds($rows); $kinds = auditLogKinds(); // Each view counted for the search and dates $count_sql = []; foreach ($views as $definition) { $count_sql[] = 'COALESCE(SUM(' . ($definition['where'] === '' ? '1' : $definition['where']) . '), 0)'; } $counts = array_combine(array_keys($views), array_map('intval', mysqli_fetch_row(mysqli_query($mysqli, "SELECT " . implode(', ', $count_sql) . " FROM logs $joins WHERE $scope AND " . auditLogFiltersSql(array_merge($filter_src, ['view' => ''])))))); $any_filter = $q !== '' || $dtf !== '1970-01-01' || $dtt !== '2099-12-31'; $sort_link = function ($column, $label) use ($url_query_strings_sort, $sort, $disp, $order_icon) { return '' . $label . ($sort === $column ? " $order_icon" : '') . ''; }; $view_url = function ($key) { $query = $_GET; unset($query['page']); $query['view'] = $key; return '?' . http_build_query(array_filter($query, function ($value) { return $value !== '' && $value !== null && $value !== []; })); }; $view_empty = [ 'changes' => 'No changes yet', 'deletions' => 'Nothing deleted yet', 'signins' => 'No sign ins yet', 'data' => 'Nothing looked at or taken out yet', ]; ?>

Your activity

"> 0 && isset($kinds[$type]['table']); $device = auditLogDevice($row['log_user_agent']); $from = implode(' ยท ', array_filter([(string) $row['log_ip'], $device])); ?>
Description
No longer here
A client you cannot open -
0) { ?> 'entries', 'icon' => 'fa-history', 'filtered' => $any_filter, 'views' => ['view'], 'view' => $view !== '' ? ['icon' => $views[$view]['icon'], 'title' => $view_empty[$view], 'text' => escapeHtml($views[$view]['title']) . ' show here.'] : null, 'title' => 'Nothing yet', 'text' => 'What you change, your sign ins, the passwords you look at and what you export show here.', ]; require_once "../../includes/filter_footer.php"; ?>