misuzu/public/members.php

175 lines
5.2 KiB
PHP
Raw Normal View History

2018-05-27 23:24:16 +00:00
<?php
require_once '../misuzu.php';
2018-05-27 23:24:16 +00:00
2019-03-18 22:02:30 +00:00
$roleId = !empty($_GET['r']) && is_string($_GET['r']) ? (int)$_GET['r'] : MSZ_ROLE_MAIN;
$orderBy = !empty($_GET['ss']) && is_string($_GET['ss']) ? mb_strtolower($_GET['ss']) : '';
$orderDir = !empty($_GET['sd']) && is_string($_GET['sd']) ? mb_strtolower($_GET['sd']) : '';
2018-05-27 23:24:16 +00:00
$orderDirs = [
2018-07-11 20:03:43 +00:00
'asc' => 'Ascending',
'desc' => 'Descending',
2018-05-27 23:24:16 +00:00
];
2018-07-11 20:03:43 +00:00
$defaultOrder = 'last-online';
2018-05-27 23:24:16 +00:00
$orderFields = [
'id' => [
2019-02-28 21:06:30 +00:00
'column' => 'u.`user_id`',
2018-07-11 20:03:43 +00:00
'default-dir' => 'asc',
2018-05-27 23:24:16 +00:00
'title' => 'User ID',
],
'name' => [
2019-02-28 21:06:30 +00:00
'column' => 'u.`username`',
2018-07-11 20:03:43 +00:00
'default-dir' => 'asc',
2018-05-27 23:24:16 +00:00
'title' => 'Username',
],
'country' => [
2019-02-28 21:06:30 +00:00
'column' => 'u.`user_country`',
2018-07-11 20:03:43 +00:00
'default-dir' => 'asc',
2018-05-27 23:24:16 +00:00
'title' => 'Country',
],
'registered' => [
2019-02-28 21:06:30 +00:00
'column' => 'u.`user_created`',
2018-07-11 20:03:43 +00:00
'default-dir' => 'desc',
2018-05-27 23:24:16 +00:00
'title' => 'Registration Date',
],
'last-online' => [
2019-02-28 21:06:30 +00:00
'column' => 'u.`user_active`',
2018-07-11 20:03:43 +00:00
'default-dir' => 'desc',
2018-05-27 23:24:16 +00:00
'title' => 'Last Online',
],
2019-02-28 21:06:30 +00:00
'forum-topics' => [
'column' => '`user_count_topics`',
'default-dir' => 'desc',
'title' => 'Forum Topics',
],
'forum-posts' => [
'column' => '`user_count_posts`',
'default-dir' => 'desc',
'title' => 'Forum Posts',
],
'following' => [
'column' => '`user_count_following`',
'default-dir' => 'desc',
'title' => 'Following',
],
'followers' => [
'column' => '`user_count_followers`',
'default-dir' => 'desc',
'title' => 'Followers',
],
2018-05-27 23:24:16 +00:00
];
if (empty($orderBy)) {
2018-07-11 20:03:43 +00:00
$orderBy = $defaultOrder;
2018-05-27 23:24:16 +00:00
} elseif (!array_key_exists($orderBy, $orderFields)) {
echo render_error(400);
return;
}
if (empty($orderDir)) {
$orderDir = $orderFields[$orderBy]['default-dir'];
} elseif (!array_key_exists($orderDir, $orderDirs)) {
echo render_error(400);
return;
}
$canManageUsers = perms_check(
perms_get_user(MSZ_PERMS_USER, user_session_current('user_id', 0)),
MSZ_PERM_USER_MANAGE_USERS
);
$role = user_role_get($roleId);
2018-05-27 23:24:16 +00:00
if (empty($role)) {
2018-05-27 23:24:16 +00:00
echo render_error(404);
return;
}
2019-02-28 21:06:30 +00:00
$usersPagination = pagination_create($role['role_user_count'], 15);
2019-01-03 00:33:02 +00:00
$usersOffset = pagination_offset($usersPagination, pagination_param());
if (!pagination_is_valid_offset($usersOffset)) {
echo render_error(404);
return;
}
$roles = user_role_all();
2018-05-27 23:24:16 +00:00
$getUsers = db_prepare(sprintf(
'
SELECT
2019-02-28 21:06:30 +00:00
:current_user_id AS `current_user_id`,
u.`user_id`, u.`username`, u.`user_country`,
u.`user_created`, u.`user_active`, r.`role_id`,
COALESCE(u.`user_title`, r.`role_title`) as `user_title`,
2019-02-28 21:06:30 +00:00
COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour`,
(
SELECT COUNT(`topic_id`)
FROM `msz_forum_topics`
WHERE `user_id` = u.`user_id`
AND `topic_deleted` IS NULL
) AS `user_count_topics`,
(
SELECT COUNT(`post_Id`)
FROM `msz_forum_posts`
WHERE `user_id` = u.`user_id`
AND `post_deleted` IS NULL
) AS `user_count_posts`,
(
SELECT COUNT(`subject_id`)
FROM `msz_user_relations`
WHERE `user_id` = u.`user_id`
AND `relation_type` = %4$d
) AS `user_count_following`,
(
SELECT COUNT(`user_id`)
FROM `msz_user_relations`
WHERE `subject_id` = u.`user_id`
AND `relation_type` = %4$d
) AS `user_count_followers`,
(
SELECT `relation_type` = %4$d
FROM `msz_user_relations`
2019-02-28 21:09:51 +00:00
WHERE `user_id` = `current_user_id`
AND `subject_id` = u.`user_id`
2019-02-28 21:06:30 +00:00
) AS `user_is_following`,
(
SELECT `relation_type` = %4$d
FROM `msz_user_relations`
2019-02-28 21:09:51 +00:00
WHERE `user_id` = u.`user_id`
AND `subject_id` = `current_user_id`
2019-02-28 21:06:30 +00:00
) AS `user_is_follower`
FROM `msz_users` as u
LEFT JOIN `msz_roles` as r
ON r.`role_id` = u.`display_role`
LEFT JOIN `msz_user_roles` as ur
ON ur.`user_id` = u.`user_id`
WHERE ur.`role_id` = :role_id
%1$s
2019-02-28 21:06:30 +00:00
ORDER BY %2$s %3$s
LIMIT :offset, :take
',
$canManageUsers ? '' : 'AND u.`user_deleted` IS NULL',
$orderFields[$orderBy]['column'],
2019-02-28 21:06:30 +00:00
$orderDir,
MSZ_USER_RELATION_FOLLOW
));
2018-05-27 23:24:16 +00:00
$getUsers->bindValue('role_id', $role['role_id']);
$getUsers->bindValue('offset', $usersOffset);
2019-01-03 00:33:02 +00:00
$getUsers->bindValue('take', $usersPagination['range']);
2019-02-28 21:06:30 +00:00
$getUsers->bindValue('current_user_id', user_session_current('user_id', 0));
$users = db_fetch_all($getUsers);
2018-05-27 23:24:16 +00:00
2018-08-15 01:12:58 +00:00
echo tpl_render('user.listing', [
2018-05-27 23:24:16 +00:00
'roles' => $roles,
'role' => $role,
'users' => $users,
'order_fields' => $orderFields,
'order_directions' => $orderDirs,
'order_field' => $orderBy,
'order_direction' => $orderDir,
2018-07-11 20:03:43 +00:00
'order_default' => $defaultOrder,
'can_manage_users' => $canManageUsers,
2019-01-03 00:33:02 +00:00
'users_pagination' => $usersPagination,
2018-05-27 23:24:16 +00:00
]);