Use User class in manage.
This commit is contained in:
parent
90ab9a280b
commit
5da66e7cf3
3 changed files with 43 additions and 40 deletions
|
@ -10,36 +10,14 @@ if(!User::hasCurrent() || !perms_check_user(MSZ_PERMS_USER, User::getCurrent()->
|
|||
return;
|
||||
}
|
||||
|
||||
$manageUsersCount = (int)DB::query('
|
||||
SELECT COUNT(`user_id`)
|
||||
FROM `msz_users`
|
||||
')->fetchColumn();
|
||||
$pagination = new Pagination(User::countAll(true), 30);
|
||||
|
||||
$usersPagination = new Pagination($manageUsersCount, 30);
|
||||
|
||||
if(!$usersPagination->hasValidOffset()) {
|
||||
if(!$pagination->hasValidOffset()) {
|
||||
echo render_error(404);
|
||||
return;
|
||||
}
|
||||
|
||||
$getManageUsers = DB::prepare('
|
||||
SELECT
|
||||
u.`user_id`, u.`username`, u.`user_country`, r.`role_id`,
|
||||
u.`user_created`, u.`user_active`, u.`user_deleted`,
|
||||
INET6_NTOA(u.`register_ip`) AS `register_ip`, INET6_NTOA(u.`last_ip`) AS `last_ip`,
|
||||
COALESCE(u.`user_title`, r.`role_title`, r.`role_name`) AS `user_title`,
|
||||
COALESCE(u.`user_colour`, r.`role_colour`) AS `user_colour`
|
||||
FROM `msz_users` AS u
|
||||
LEFT JOIN `msz_roles` AS r
|
||||
ON u.`display_role` = r.`role_id`
|
||||
ORDER BY `user_id`
|
||||
LIMIT :offset, :take
|
||||
');
|
||||
$getManageUsers->bind('offset', $usersPagination->getOffset());
|
||||
$getManageUsers->bind('take', $usersPagination->getRange());
|
||||
$manageUsers = $getManageUsers->fetchAll();
|
||||
|
||||
Template::render('manage.users.users', [
|
||||
'manage_users' => $manageUsers,
|
||||
'manage_users_pagination' => $usersPagination,
|
||||
'manage_users' => User::all(true, $pagination),
|
||||
'manage_users_pagination' => $pagination,
|
||||
]);
|
||||
|
|
|
@ -420,10 +420,6 @@ class User implements HasRankInterface, JsonSerializable {
|
|||
}
|
||||
public function setPassword(string $password): self {
|
||||
$this->password = self::hashPassword($password);
|
||||
DB::prepare('UPDATE `msz_users` SET `password` = :password WHERE `user_id` = :user_id')
|
||||
->bind('password', $this->password)
|
||||
->bind('user_id', $this->getId())
|
||||
->execute();
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -841,6 +837,16 @@ class User implements HasRankInterface, JsonSerializable {
|
|||
* FETCHING *
|
||||
************/
|
||||
|
||||
private static function countQueryBase(): string {
|
||||
return sprintf(self::QUERY_SELECT, sprintf('COUNT(*)', self::TABLE));
|
||||
}
|
||||
public static function countAll(bool $showDeleted = false): int {
|
||||
return (int)DB::prepare(
|
||||
self::countQueryBase()
|
||||
. ($showDeleted ? '' : ' WHERE `user_deleted` IS NULL')
|
||||
)->fetchColumn();
|
||||
}
|
||||
|
||||
private static function memoizer() {
|
||||
static $memoizer = null;
|
||||
if($memoizer === null)
|
||||
|
@ -926,4 +932,23 @@ class User implements HasRankInterface, JsonSerializable {
|
|||
->bind('date', $date->format('%-m-d'))
|
||||
->fetchObjects(self::class);
|
||||
}
|
||||
public static function all(bool $showDeleted = false, ?Pagination $pagination = null): array {
|
||||
$query = self::byQueryBase();
|
||||
|
||||
if(!$showDeleted)
|
||||
$query .= ' WHERE `user_deleted` IS NULL';
|
||||
|
||||
$query .= ' ORDER BY `user_id` ASC';
|
||||
|
||||
if($pagination !== null)
|
||||
$query .= ' LIMIT :range OFFSET :offset';
|
||||
|
||||
$getObjects = DB::prepare($query);
|
||||
|
||||
if($pagination !== null)
|
||||
$getObjects->bind('range', $pagination->getRange())
|
||||
->bind('offset', $pagination->getOffset());
|
||||
|
||||
return $getObjects->fetchObjects(self::class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
|
||||
<div class="manage__users__collection">
|
||||
{% for user in manage_users %}
|
||||
<div class="manage__user-item{% if user.user_deleted is not null %} manage__user-item--deleted{% endif %}" style="{{ user.user_colour|html_colour('--accent-colour') }}">
|
||||
<a href="{{ url('manage-user', {'user': user.user_id}) }}" class="manage__user-item__background"></a>
|
||||
<div class="manage__user-item{% if user.isDeleted %} manage__user-item--deleted{% endif %}" style="{{ user.colour }}">
|
||||
<a href="{{ url('manage-user', {'user': user.id}) }}" class="manage__user-item__background"></a>
|
||||
|
||||
<div class="manage__user-item__container">
|
||||
<div class="manage__user-item__avatar">{{ avatar(user.user_id, 40, user.username) }}</div>
|
||||
<div class="manage__user-item__avatar">{{ avatar(user.id, 40, user.username) }}</div>
|
||||
<div class="manage__user-item__info">
|
||||
<div class="manage__user-item__name">
|
||||
{{ user.username }}
|
||||
|
@ -27,24 +27,24 @@
|
|||
<div class="manage__user-item__details">
|
||||
<div class="manage__user-item__detail">
|
||||
<i class="fas fa-user-plus fa-fw"></i>
|
||||
<time datetime="{{ user.user_created|date('c') }}" title="{{ user.user_created|date('r') }}">{{ user.user_created|time_diff }}</time> /
|
||||
<span>{{ user.register_ip }}</span>
|
||||
<time datetime="{{ user.createdTime|date('c') }}" title="{{ user.createdTime|date('r') }}">{{ user.createdTime|time_diff }}</time> /
|
||||
<span>{{ user.registerRemoteAddress }}</span>
|
||||
</div>
|
||||
<div class="manage__user-item__detail">
|
||||
<i class="fas fa-user-clock fa-fw"></i>
|
||||
<time datetime="{{ user.user_active|date('c') }}" title="{{ user.user_active|date('r') }}">{{ user.user_active|time_diff }}</time> /
|
||||
<span>{{ user.last_ip }}</span>
|
||||
<time datetime="{{ user.activeTime|date('c') }}" title="{{ user.activeTime|date('r') }}">{{ user.activeTime|time_diff }}</time> /
|
||||
<span>{{ user.lastRemoteAddress }}</span>
|
||||
</div>
|
||||
{% if user.user_deleted is not null %}
|
||||
{% if user.isDeleted %}
|
||||
<div class="manage__user-item__detail">
|
||||
<i class="fas fa-trash-alt fa-fw"></i>
|
||||
<time datetime="{{ user.user_deleted|date('c') }}" title="{{ user.user_deleted|date('r') }}">{{ user.user_deleted|time_diff }}</time>
|
||||
<time datetime="{{ user.deletedTime|date('c') }}" title="{{ user.deletedTime|date('r') }}">{{ user.deletedTime|time_diff }}</time>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="manage__user-item__actions">
|
||||
<a href="{{ url('user-profile', {'user': user.user_id}) }}" class="manage__user-item__action" title="Profile">
|
||||
<a href="{{ url('user-profile', {'user': user.id}) }}" class="manage__user-item__action" title="Profile">
|
||||
<i class="fas fa-user fa-fw"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue