diff --git a/public/manage/users.php b/public/manage/users.php index 017e03bc..ff0a959d 100644 --- a/public/manage/users.php +++ b/public/manage/users.php @@ -111,6 +111,10 @@ switch ($_GET['v'] ?? null) { tpl_var('permissions', $permissions = manage_perms_list(perms_get_user_raw($userId))); } + if ($canManageWarnings) { + tpl_var('warning_types', $warnTypes = user_warning_get_types()); + } + if ($isPostRequest) { if (!csrf_verify('users_edit', $_POST['csrf'] ?? '')) { echo 'csrf err'; @@ -234,6 +238,18 @@ switch ($_GET['v'] ?? null) { } } + if (!empty($warnTypes) && !empty($_POST['warning']) && is_array($_POST['warning'])) { + user_warning_add( + $userId, + user_get_last_ip($userId), + user_session_current('user_id'), + ip_remote_address(), + $_POST['warning']['type'], + $_POST['warning']['note'], + $_POST['warning']['private'] + ); + } + header("Location: ?v=view&u={$manageUser['user_id']}"); break; } diff --git a/src/Users/user.php b/src/Users/user.php index 843e99a3..7c943df2 100644 --- a/src/Users/user.php +++ b/src/Users/user.php @@ -151,6 +151,17 @@ function user_bump_last_active(int $userId, string $ipAddress = null): void $bumpUserLast->execute(); } +function user_get_last_ip(int $userId): string +{ + $getAddress = db_prepare(' + SELECT INET6_NTOA(`last_ip`) + FROM `msz_users` + WHERE `user_id` = :user_id + '); + $getAddress->bindValue('user_id', $userId); + return $getAddress->execute() ? $getAddress->fetchColumn() : ''; +} + define('MSZ_USER_ABOUT_MAX_LENGTH', 0xFFFF); define('MSZ_USER_ABOUT_OK', 0); diff --git a/src/Users/warning.php b/src/Users/warning.php index 8bf749d5..2745b317 100644 --- a/src/Users/warning.php +++ b/src/Users/warning.php @@ -8,6 +8,39 @@ define('MSZ_WARN_TYPES', [ MSZ_WARN_NOTE, MSZ_WARN_WARNING, MSZ_WARN_SILENCE, MSZ_WARN_BAN, ]); +define('MSZ_WARN_TYPES_PUBLIC', [ + MSZ_WARN_WARNING, + MSZ_WARN_SILENCE, + MSZ_WARN_BAN, +]); + +define('MSZ_WARN_TYPE_NAMES', [ + MSZ_WARN_NOTE => 'Note', + MSZ_WARN_WARNING => 'Warning', + MSZ_WARN_SILENCE => 'Silence', + MSZ_WARN_BAN => 'Ban', +]); + +function user_warning_type_is_valid(int $type): bool +{ + return in_array($type, MSZ_WARN_TYPES, true); +} + +function user_warning_type_get_name(int $type): string +{ + return user_warning_type_is_valid($type) ? MSZ_WARN_TYPE_NAMES[$type] : ''; +} + +function user_warning_get_types(): array +{ + return MSZ_WARN_TYPE_NAMES; +} + +function user_warning_is_public(int $type): bool +{ + return in_array($type, MSZ_WARN_TYPES_PUBLIC, true); +} + function user_warning_add( int $userId, string $userIp, diff --git a/templates/manage/users/user.twig b/templates/manage/users/user.twig index 97f8300e..c98e13c0 100644 --- a/templates/manage/users/user.twig +++ b/templates/manage/users/user.twig @@ -139,6 +139,20 @@ {% endif %} + {% if can_manage_warns %} +
+ {{ container_title('Add Warning') }} + {{ input_csrf('users_edit') }} + + {{ input_select('warning[type]', warning_types) }} + {{ input_text('warning[note]', '', '', 'text', 'Public note') }} + {{ input_text('warning[until]', '', ''|date('c'), 'datetime-local') }} (empty to set null) +
+ + +
+ {% endif %} + {% if can_manage_users %} {% if has_roles|length > 0 %}