Some memberlist things.

This commit is contained in:
flash 2018-07-11 22:03:43 +02:00
parent 845061e679
commit e5da1cce35
9 changed files with 92 additions and 43 deletions

View file

@ -0,0 +1,28 @@
<?php
namespace Misuzu\DatabaseMigrations\UsersTableUpdates;
// gets rid of `updated_at`, ironically
use PDO;
function migrate_up(PDO $conn): void
{
$conn->exec("
ALTER TABLE `msz_users`
DROP COLUMN `updated_at`,
ADD INDEX `users_user_country_index` (`user_country`),
ADD INDEX `users_created_at_index` (`created_at`),
ADD INDEX `users_last_seen_index` (`last_seen`);
");
}
function migrate_down(PDO $conn): void
{
$conn->exec('
ALTER TABLE `msz_users`
ADD COLUMN `updated_at` TIMESTAMP NULL DEFAULT NULL,
DROP INDEX `users_user_country_index`,
DROP INDEX `users_created_at_index`,
DROP INDEX `users_last_seen_index`;
');
}

View file

@ -29,32 +29,37 @@ if ($mainRoleId !== 1) {
VALUES VALUES
(1, 'Member', 1, 1073741824, NULL, NOW()) (1, 'Member', 1, 1073741824, NULL, NOW())
"); ");
$mainRoleId = 1;
} }
$notInMainRole = $db->query(' // Ensures all users are in the main role.
SELECT `user_id` $db->query('
FROM `msz_users` as u INSERT INTO `msz_user_roles`
(`user_id`, `role_id`)
SELECT `user_id`, 1 FROM `msz_users` as u
WHERE NOT EXISTS ( WHERE NOT EXISTS (
SELECT 1 SELECT 1
FROM `msz_user_roles` as ur FROM `msz_user_roles` as ur
WHERE `role_id` = 1 WHERE `role_id` = 1
AND u.`user_id` = ur.`user_id` AND u.`user_id` = ur.`user_id`
) )
')->fetchAll();
if (count($notInMainRole) < 1) {
exit;
}
$addToMainRole = $db->prepare('
INSERT INTO `msz_user_roles`
(`user_id`, `role_id`)
VALUES
(:user_id, 1)
'); ');
foreach ($notInMainRole as $user) { // Ensures all display_role values are correct with `msz_user_roles`
$addToMainRole->execute($user); $db->query('
} UPDATE `msz_users` as u
SET `display_role` = (
SELECT ur.`role_id`
FROM `msz_user_roles` as ur
LEFT JOIN `msz_roles` as r
ON r.`role_id` = ur.`role_id`
WHERE ur.`user_id` = u.`user_id`
ORDER BY `role_hierarchy` DESC
LIMIT 1
)
WHERE NOT EXISTS (
SELECT 1
FROM `msz_user_roles` as ur
WHERE ur.`role_id` = u.`display_role`
AND `ur`.`user_id` = u.`user_id`
)
');

View file

@ -93,7 +93,7 @@ switch ($_GET['v'] ?? null) {
INSERT INTO `msz_changelog_changes` INSERT INTO `msz_changelog_changes`
( (
`change_log`, `change_text`, `action_id`, `change_log`, `change_text`, `action_id`,
`user_id`, `change_created`, `change_time_filter` `user_id`, `change_created`
) )
VALUES VALUES
(:log, :text, :action, :user, :created) (:log, :text, :action, :user, :created)

View file

@ -123,16 +123,19 @@ switch ($_GET['v'] ?? null) {
if (!empty($_POST['user']) && is_array($_POST['user']) if (!empty($_POST['user']) && is_array($_POST['user'])
&& user_validate_username($_POST['user']['username']) === '' && user_validate_username($_POST['user']['username']) === ''
&& user_validate_email($_POST['user']['email']) === '') { && user_validate_email($_POST['user']['email']) === ''
&& strlen($_POST['user']['country']) === 2) {
$updateUserDetails = $db->prepare(' $updateUserDetails = $db->prepare('
UPDATE `msz_users` UPDATE `msz_users`
SET `username` = :username, SET `username` = :username,
`email` = LOWER(:email), `email` = LOWER(:email),
`user_title` = :title `user_title` = :title,
`user_country` = :country
WHERE `user_id` = :user_id WHERE `user_id` = :user_id
'); ');
$updateUserDetails->bindValue('username', $_POST['user']['username']); $updateUserDetails->bindValue('username', $_POST['user']['username']);
$updateUserDetails->bindValue('email', $_POST['user']['email']); $updateUserDetails->bindValue('email', $_POST['user']['email']);
$updateUserDetails->bindValue('country', $_POST['user']['country']);
$updateUserDetails->bindValue( $updateUserDetails->bindValue(
'title', 'title',
strlen($_POST['user']['title']) strlen($_POST['user']['title'])

View file

@ -8,43 +8,44 @@ $usersTake = max(min((int)($_GET['t'] ?? 15), 30), 6);
$roleId = (int)($_GET['r'] ?? MSZ_ROLE_MAIN); $roleId = (int)($_GET['r'] ?? MSZ_ROLE_MAIN);
$orderBy = strtolower($_GET['ss'] ?? ''); $orderBy = strtolower($_GET['ss'] ?? '');
$orderDir = strtoupper($_GET['sd'] ?? ''); $orderDir = strtolower($_GET['sd'] ?? '');
$orderDirs = [ $orderDirs = [
'ASC' => 'Ascending', 'asc' => 'Ascending',
'DESC' => 'Descending', 'desc' => 'Descending',
]; ];
$defaultOrder = 'last-online';
$orderFields = [ $orderFields = [
'id' => [ 'id' => [
'column' => 'user_id', 'column' => 'user_id',
'default-dir' => 'ASC', 'default-dir' => 'asc',
'title' => 'User ID', 'title' => 'User ID',
], ],
'name' => [ 'name' => [
'column' => 'username', 'column' => 'username',
'default-dir' => 'ASC', 'default-dir' => 'asc',
'title' => 'Username', 'title' => 'Username',
], ],
'country' => [ 'country' => [
'column' => 'user_country', 'column' => 'user_country',
'default-dir' => 'ASC', 'default-dir' => 'asc',
'title' => 'Country', 'title' => 'Country',
], ],
'registered' => [ 'registered' => [
'column' => 'created_at', 'column' => 'created_at',
'default-dir' => 'DESC', 'default-dir' => 'desc',
'title' => 'Registration Date', 'title' => 'Registration Date',
], ],
'last-online' => [ 'last-online' => [
'column' => 'last_seen', 'column' => 'last_seen',
'default-dir' => 'DESC', 'default-dir' => 'desc',
'title' => 'Last Online', 'title' => 'Last Online',
], ],
]; ];
if (empty($orderBy)) { if (empty($orderBy)) {
$orderBy = 'last-online'; $orderBy = $defaultOrder;
} elseif (!array_key_exists($orderBy, $orderFields)) { } elseif (!array_key_exists($orderBy, $orderFields)) {
echo render_error(400); echo render_error(400);
return; return;
@ -127,6 +128,7 @@ echo $tpl->render('user.listing', [
'order_directions' => $orderDirs, 'order_directions' => $orderDirs,
'order_field' => $orderBy, 'order_field' => $orderBy,
'order_direction' => $orderDir, 'order_direction' => $orderDir,
'order_default' => $defaultOrder,
'users_offset' => $usersOffset, 'users_offset' => $usersOffset,
'users_take' => $usersTake, 'users_take' => $usersTake,
]); ]);

View file

@ -30,7 +30,7 @@ function user_create(
) )
VALUES VALUES
( (
:username, :password, :email, INET6_ATON(:register_ip), :username, :password, LOWER(:email), INET6_ATON(:register_ip),
INET6_ATON(:last_ip), :user_country, NOW(), 1 INET6_ATON(:last_ip), :user_country, NOW(), 1
) )
'); ');

View file

@ -93,13 +93,15 @@ function manage_get_menu(int $userId): array
if (perms_check($perms['forum'], MSZ_FORUM_PERM_MANAGE_FORUMS)) { if (perms_check($perms['forum'], MSZ_FORUM_PERM_MANAGE_FORUMS)) {
$menu['Forums']['Listing'] = '/manage/forums.php?v=listing'; $menu['Forums']['Listing'] = '/manage/forums.php?v=listing';
} }
}
/*$menu['Forum'] = [ if (perms_check($perms['forum'], 0)) {
'Listing' => '/manage/forums.php?v=listing', $menu['Forums']['Permissions'] = '/manage/forums.php?v=permissions';
'Permisisons' => '/manage/forums.php?v=permissions', }
'Settings' => '/manage/forums.php?v=settings',
];*/ if (perms_check($perms['forum'], 0)) {
$menu['Forums']['Settings'] = '/manage/forums.php?v=settings';
}
}
$canChangelogManage = MSZ_CHANGELOG_PERM_MANAGE_CHANGES | MSZ_CHANGELOG_PERM_MANAGE_TAGS $canChangelogManage = MSZ_CHANGELOG_PERM_MANAGE_CHANGES | MSZ_CHANGELOG_PERM_MANAGE_TAGS
| MSZ_CHANGELOG_PERM_MANAGE_ACTIONS; | MSZ_CHANGELOG_PERM_MANAGE_ACTIONS;

View file

@ -61,7 +61,7 @@
<label class="form__label"> <label class="form__label">
<div class="form__label__text">Country</div> <div class="form__label__text">Country</div>
<div class="form__label__input"> <div class="form__label__input">
<input class="input input--text" readonly type="text" value="{{ view_user.user_country }}"> <input class="input input--text" type="text" value="{{ view_user.user_country }}" name="user[country]" maxlength="2">
</div> </div>
</label> </label>
</div> </div>

View file

@ -1,8 +1,18 @@
{% extends '@mio/user/master.twig' %} {% extends '@mio/user/master.twig' %}
{% from '@mio/macros.twig' import navigation, pagination %} {% from '@mio/macros.twig' import navigation, pagination %}
{% set canonical_url = '/members.php' ~ (role.role_id != 1 ? '?r=' ~ role.role_id : '') %} {% set canonical_url = '/members.php'|url_construct({
{% set full_url = '/members.php?r=' ~ role.role_id ~ '&ss=' ~ order_field ~ '&sd=' ~ order_direction %} 'r': role.role_id != 1 ? role.role_id : 0,
'ss': order_field == order_default ? '' : order_field,
'sd': order_fields[order_field]['default-dir'] == order_direction ? '' : order_direction,
'o': users_offset,
't': users_take == 15 ? 0 : users_take,
}) %}
{% set full_url = '/members.php'|url_construct({
'r': role.role_id != 1 ? role.role_id : 0,
'ss': order_field == order_default ? '' : order_field,
'sd': order_fields[order_field]['default-dir'] == order_direction ? '' : order_direction,
}) %}
{% set title = role.role_id == 1 ? 'Members' : 'Role » ' ~ role.role_name %} {% set title = role.role_id == 1 ? 'Members' : 'Role » ' ~ role.role_name %}
{% set manage_link = '/manage/users.php?v=listing' %} {% set manage_link = '/manage/users.php?v=listing' %}
@ -32,8 +42,7 @@
<select class="input__select" name="sd"> <select class="input__select" name="sd">
{% for name, title in order_directions %} {% for name, title in order_directions %}
<option <option value="{{ name }}"
value="{{ name|lower }}"
{% if name == order_direction %} selected{% endif %}> {% if name == order_direction %} selected{% endif %}>
{{ title }} {{ title }}
</option> </option>