Some memberlist things.
This commit is contained in:
parent
845061e679
commit
e5da1cce35
9 changed files with 92 additions and 43 deletions
28
database/2018_07_11_175100_users_table_updates.php
Normal file
28
database/2018_07_11_175100_users_table_updates.php
Normal 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`;
|
||||||
|
');
|
||||||
|
}
|
|
@ -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`
|
||||||
|
)
|
||||||
|
');
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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'])
|
||||||
|
|
|
@ -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,
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -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
|
||||||
)
|
)
|
||||||
');
|
');
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue