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
|
||||
(1, 'Member', 1, 1073741824, NULL, NOW())
|
||||
");
|
||||
|
||||
$mainRoleId = 1;
|
||||
}
|
||||
|
||||
$notInMainRole = $db->query('
|
||||
SELECT `user_id`
|
||||
FROM `msz_users` as u
|
||||
// Ensures all users are in the main role.
|
||||
$db->query('
|
||||
INSERT INTO `msz_user_roles`
|
||||
(`user_id`, `role_id`)
|
||||
SELECT `user_id`, 1 FROM `msz_users` as u
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM `msz_user_roles` as ur
|
||||
WHERE `role_id` = 1
|
||||
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) {
|
||||
$addToMainRole->execute($user);
|
||||
}
|
||||
// Ensures all display_role values are correct with `msz_user_roles`
|
||||
$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`
|
||||
(
|
||||
`change_log`, `change_text`, `action_id`,
|
||||
`user_id`, `change_created`, `change_time_filter`
|
||||
`user_id`, `change_created`
|
||||
)
|
||||
VALUES
|
||||
(:log, :text, :action, :user, :created)
|
||||
|
|
|
@ -123,16 +123,19 @@ switch ($_GET['v'] ?? null) {
|
|||
|
||||
if (!empty($_POST['user']) && is_array($_POST['user'])
|
||||
&& 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('
|
||||
UPDATE `msz_users`
|
||||
SET `username` = :username,
|
||||
`email` = LOWER(:email),
|
||||
`user_title` = :title
|
||||
`user_title` = :title,
|
||||
`user_country` = :country
|
||||
WHERE `user_id` = :user_id
|
||||
');
|
||||
$updateUserDetails->bindValue('username', $_POST['user']['username']);
|
||||
$updateUserDetails->bindValue('email', $_POST['user']['email']);
|
||||
$updateUserDetails->bindValue('country', $_POST['user']['country']);
|
||||
$updateUserDetails->bindValue(
|
||||
'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);
|
||||
$orderBy = strtolower($_GET['ss'] ?? '');
|
||||
$orderDir = strtoupper($_GET['sd'] ?? '');
|
||||
$orderDir = strtolower($_GET['sd'] ?? '');
|
||||
|
||||
$orderDirs = [
|
||||
'ASC' => 'Ascending',
|
||||
'DESC' => 'Descending',
|
||||
'asc' => 'Ascending',
|
||||
'desc' => 'Descending',
|
||||
];
|
||||
|
||||
$defaultOrder = 'last-online';
|
||||
$orderFields = [
|
||||
'id' => [
|
||||
'column' => 'user_id',
|
||||
'default-dir' => 'ASC',
|
||||
'default-dir' => 'asc',
|
||||
'title' => 'User ID',
|
||||
],
|
||||
'name' => [
|
||||
'column' => 'username',
|
||||
'default-dir' => 'ASC',
|
||||
'default-dir' => 'asc',
|
||||
'title' => 'Username',
|
||||
],
|
||||
'country' => [
|
||||
'column' => 'user_country',
|
||||
'default-dir' => 'ASC',
|
||||
'default-dir' => 'asc',
|
||||
'title' => 'Country',
|
||||
],
|
||||
'registered' => [
|
||||
'column' => 'created_at',
|
||||
'default-dir' => 'DESC',
|
||||
'default-dir' => 'desc',
|
||||
'title' => 'Registration Date',
|
||||
],
|
||||
'last-online' => [
|
||||
'column' => 'last_seen',
|
||||
'default-dir' => 'DESC',
|
||||
'default-dir' => 'desc',
|
||||
'title' => 'Last Online',
|
||||
],
|
||||
];
|
||||
|
||||
if (empty($orderBy)) {
|
||||
$orderBy = 'last-online';
|
||||
$orderBy = $defaultOrder;
|
||||
} elseif (!array_key_exists($orderBy, $orderFields)) {
|
||||
echo render_error(400);
|
||||
return;
|
||||
|
@ -127,6 +128,7 @@ echo $tpl->render('user.listing', [
|
|||
'order_directions' => $orderDirs,
|
||||
'order_field' => $orderBy,
|
||||
'order_direction' => $orderDir,
|
||||
'order_default' => $defaultOrder,
|
||||
'users_offset' => $usersOffset,
|
||||
'users_take' => $usersTake,
|
||||
]);
|
||||
|
|
|
@ -30,7 +30,7 @@ function user_create(
|
|||
)
|
||||
VALUES
|
||||
(
|
||||
:username, :password, :email, INET6_ATON(:register_ip),
|
||||
:username, :password, LOWER(:email), INET6_ATON(:register_ip),
|
||||
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)) {
|
||||
$menu['Forums']['Listing'] = '/manage/forums.php?v=listing';
|
||||
}
|
||||
|
||||
if (perms_check($perms['forum'], 0)) {
|
||||
$menu['Forums']['Permissions'] = '/manage/forums.php?v=permissions';
|
||||
}
|
||||
|
||||
/*$menu['Forum'] = [
|
||||
'Listing' => '/manage/forums.php?v=listing',
|
||||
'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
|
||||
| MSZ_CHANGELOG_PERM_MANAGE_ACTIONS;
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<label class="form__label">
|
||||
<div class="form__label__text">Country</div>
|
||||
<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>
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
@ -1,8 +1,18 @@
|
|||
{% extends '@mio/user/master.twig' %}
|
||||
{% from '@mio/macros.twig' import navigation, pagination %}
|
||||
|
||||
{% set canonical_url = '/members.php' ~ (role.role_id != 1 ? '?r=' ~ role.role_id : '') %}
|
||||
{% set full_url = '/members.php?r=' ~ role.role_id ~ '&ss=' ~ order_field ~ '&sd=' ~ order_direction %}
|
||||
{% set canonical_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,
|
||||
'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 manage_link = '/manage/users.php?v=listing' %}
|
||||
|
||||
|
@ -32,8 +42,7 @@
|
|||
|
||||
<select class="input__select" name="sd">
|
||||
{% for name, title in order_directions %}
|
||||
<option
|
||||
value="{{ name|lower }}"
|
||||
<option value="{{ name }}"
|
||||
{% if name == order_direction %} selected{% endif %}>
|
||||
{{ title }}
|
||||
</option>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue