Merged the log pages into one.

This commit is contained in:
flash 2018-08-12 15:31:38 +02:00
parent e5335e5274
commit 3cd7a0699e
5 changed files with 86 additions and 78 deletions

View file

@ -23,8 +23,7 @@ if (!$app->hasActiveSession()) {
$settingsModes = [ $settingsModes = [
'account' => 'Account', 'account' => 'Account',
'sessions' => 'Sessions', 'sessions' => 'Sessions',
'login-history' => 'Login History', 'logs' => 'Logs',
'log' => 'Account Log',
]; ];
$settingsMode = $_GET['m'] ?? key($settingsModes); $settingsMode = $_GET['m'] ?? key($settingsModes);
@ -338,7 +337,10 @@ switch ($settingsMode) {
]); ]);
break; break;
case 'login-history': case 'logs':
$loginAttemptsOffset = max(0, $_GET['lo'] ?? 0);
$auditLogOffset = max(0, $_GET['ao'] ?? 0);
$getLoginAttemptsCount = Database::prepare(' $getLoginAttemptsCount = Database::prepare('
SELECT COUNT(`attempt_id`) SELECT COUNT(`attempt_id`)
FROM `msz_login_attempts` FROM `msz_login_attempts`
@ -356,24 +358,15 @@ switch ($settingsMode) {
ORDER BY `attempt_id` DESC ORDER BY `attempt_id` DESC
LIMIT :offset, :take LIMIT :offset, :take
'); ');
$getLoginAttempts->bindValue('offset', $queryOffset); $getLoginAttempts->bindValue('offset', $loginAttemptsOffset);
$getLoginAttempts->bindValue('take', $queryTake); $getLoginAttempts->bindValue('take', min(20, max(5, $queryTake)));
$getLoginAttempts->bindValue('user_id', $app->getUserId()); $getLoginAttempts->bindValue('user_id', $app->getUserId());
$loginAttempts = $getLoginAttempts->execute() ? $getLoginAttempts->fetchAll() : []; $loginAttempts = $getLoginAttempts->execute() ? $getLoginAttempts->fetchAll() : [];
$tpl->vars([
'user_login_attempts' => $loginAttempts,
'login_attempts_offset' => $queryOffset,
'login_attempts_take' => $queryTake,
'login_attempts_count' => $loginAttemptsCount,
]);
break;
case 'log':
$auditLogCount = audit_log_count($app->getUserId()); $auditLogCount = audit_log_count($app->getUserId());
$auditLog = audit_log_list( $auditLog = audit_log_list(
$queryOffset, $auditLogOffset,
max(20, $queryTake), min(20, max(5, $queryTake)),
$app->getUserId() $app->getUserId()
); );
@ -381,7 +374,7 @@ switch ($settingsMode) {
'audit_logs' => $auditLog, 'audit_logs' => $auditLog,
'audit_log_count' => $auditLogCount, 'audit_log_count' => $auditLogCount,
'audit_log_take' => $queryTake, 'audit_log_take' => $queryTake,
'audit_log_offset' => $queryOffset, 'audit_log_offset' => $auditLogOffset,
'log_strings' => [ 'log_strings' => [
'PERSONAL_EMAIL_CHANGE' => 'Changed e-mail address to %s.', 'PERSONAL_EMAIL_CHANGE' => 'Changed e-mail address to %s.',
'PERSONAL_PASSWORD_CHANGE' => 'Changed account password.', 'PERSONAL_PASSWORD_CHANGE' => 'Changed account password.',
@ -396,6 +389,10 @@ switch ($settingsMode) {
'CHANGELOG_ACTION_CREATE' => 'Created new changelog action #%d.', 'CHANGELOG_ACTION_CREATE' => 'Created new changelog action #%d.',
'CHANGELOG_ACTION_EDITl' => 'Edited changelog action #%d.', 'CHANGELOG_ACTION_EDITl' => 'Edited changelog action #%d.',
], ],
'user_login_attempts' => $loginAttempts,
'login_attempts_offset' => $loginAttemptsOffset,
'login_attempts_take' => $queryTake,
'login_attempts_count' => $loginAttemptsCount,
]); ]);
break; break;
} }

View file

@ -364,7 +364,7 @@ function url_construct(string $path, array $query = [], string $host = ''): stri
$url = $host . $path; $url = $host . $path;
if (count($query)) { if (count($query)) {
$url .= '?'; $url .= strpos($path, '?') !== false ? '&' : '?';
foreach ($query as $key => $value) { foreach ($query as $key => $value) {
if ($value) { if ($value) {

View file

@ -13,7 +13,7 @@
{% macro pagination_class(className, classPrefix) %}{{ className }}{% if classPrefix|length > 0 %} {{ classPrefix ~ className }}{% endif %}{% endmacro %} {% macro pagination_class(className, classPrefix) %}{{ className }}{% if classPrefix|length > 0 %} {{ classPrefix ~ className }}{% endif %}{% endmacro %}
{% macro pagination(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, useRanges, offsetParam, pageRange) %} {% macro pagination(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, offsetParam, useRanges, pageRange) %}
{% set alwaysRender = alwaysRender|default(false) %} {% set alwaysRender = alwaysRender|default(false) %}
{% if alwaysRender or itemCount > itemRange %} {% if alwaysRender or itemCount > itemRange %}

View file

@ -1,58 +0,0 @@
{% extends '@mio/settings/master.twig' %}
{% from '@mio/macros.twig' import pagination %}
{% set alpagination = pagination(audit_log_count, audit_log_take, audit_log_offset, '?m=log', 'settings__') %}
{% block settings_content %}
<div class="container">
<div class="container__title">Account Log</div>
<div class="settings__log">
<div class="settings__description">
<p>This is a log of all "important" actions that have been done using your account for your review. If you notice anything strange, please alert the staff.</p>
</div>
{{ alpagination }}
{% for log in audit_logs %}
<div class="settings__log__entry" id="log-{{ log.log_id }}">
<div class="settings__log__column settings__login-history__column--ip">
<div class="settings__log__column__name">
IP
</div>
<div class="settings__log__column__value">
{{ log.log_ip }}
{% if log.log_country|default('XX') != 'XX' %}
<img class="settings__log__country" src="https://static.flash.moe/flags/fff/{{ log.log_country|lower }}.png" alt="{{ log.log_country }}" title="{{ log.log_country|country_name }}">
{% endif %}
</div>
</div>
<div class="settings__log__column settings__log__column--date" title="{{ log.log_created|date('r') }}">
<div class="settings__log__column__name">
Date
</div>
<time class="settings__log__column__value" datetime="{{ log.log_created|date('c') }}">
{{ log.log_created|time_diff }}
</time>
</div>
<div class="settings__log__column settings__log__column--action">
<div class="settings__log__column__name">
Action
</div>
<div class="settings__log__column__value">
{% if log.log_action in log_strings|keys %}
{{ log_strings[log.log_action]|vsprintf(log.log_params|json_decode) }}
{% else %}
{{ log.log_action }}({{ log.log_params }})
{% endif %}
</div>
</div>
</div>
{% endfor %}
{{ alpagination }}
</div>
</div>
{% endblock %}

View file

@ -1,7 +1,24 @@
{% extends '@mio/settings/master.twig' %} {% extends '@mio/settings/master.twig' %}
{% from '@mio/macros.twig' import pagination %} {% from '@mio/macros.twig' import pagination %}
{% set lhpagination = pagination(login_attempts_count, login_attempts_take, login_attempts_offset, '?m=login-history', 'settings__') %} {% set alpagination = pagination(
audit_log_count,
audit_log_take,
audit_log_offset,
'?m=logs'|url_construct({'lo': login_attempts_offset}),
'settings__',
false,
'ao'
) %}
{% set lhpagination = pagination(
login_attempts_count,
login_attempts_take,
login_attempts_offset,
'?m=logs'|url_construct({'ao': audit_log_offset}),
'settings__',
false,
'lo'
) %}
{% block settings_content %} {% block settings_content %}
<div class="container"> <div class="container">
@ -62,4 +79,56 @@
{{ lhpagination }} {{ lhpagination }}
</div> </div>
</div> </div>
<div class="container">
<div class="container__title">Account Log</div>
<div class="settings__log">
<div class="settings__description">
<p>This is a log of all "important" actions that have been done using your account for your review. If you notice anything strange, please alert the staff.</p>
</div>
{{ alpagination }}
{% for log in audit_logs %}
<div class="settings__log__entry" id="log-{{ log.log_id }}">
<div class="settings__log__column settings__login-history__column--ip">
<div class="settings__log__column__name">
IP
</div>
<div class="settings__log__column__value">
{{ log.log_ip }}
{% if log.log_country|default('XX') != 'XX' %}
<img class="settings__log__country" src="https://static.flash.moe/flags/fff/{{ log.log_country|lower }}.png" alt="{{ log.log_country }}" title="{{ log.log_country|country_name }}">
{% endif %}
</div>
</div>
<div class="settings__log__column settings__log__column--date" title="{{ log.log_created|date('r') }}">
<div class="settings__log__column__name">
Date
</div>
<time class="settings__log__column__value" datetime="{{ log.log_created|date('c') }}">
{{ log.log_created|time_diff }}
</time>
</div>
<div class="settings__log__column settings__log__column--action">
<div class="settings__log__column__name">
Action
</div>
<div class="settings__log__column__value">
{% if log.log_action in log_strings|keys %}
{{ log_strings[log.log_action]|vsprintf(log.log_params|json_decode) }}
{% else %}
{{ log.log_action }}({{ log.log_params }})
{% endif %}
</div>
</div>
</div>
{% endfor %}
{{ alpagination }}
</div>
</div>
{% endblock %} {% endblock %}