Use User class in manage.

This commit is contained in:
flash 2020-06-10 17:50:15 +00:00
parent 90ab9a280b
commit 5da66e7cf3
3 changed files with 43 additions and 40 deletions

View file

@ -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,
]);

View file

@ -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);
}
}

View file

@ -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>