diff --git a/public/manage/users/index.php b/public/manage/users/index.php index c8387a1b..158b9a99 100644 --- a/public/manage/users/index.php +++ b/public/manage/users/index.php @@ -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, ]); diff --git a/src/Users/User.php b/src/Users/User.php index 9f157578..90ac1222 100644 --- a/src/Users/User.php +++ b/src/Users/User.php @@ -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); + } } diff --git a/templates/manage/users/users.twig b/templates/manage/users/users.twig index ebb13ef3..99f0d7ef 100644 --- a/templates/manage/users/users.twig +++ b/templates/manage/users/users.twig @@ -15,11 +15,11 @@