diff --git a/assets/less/manage/classes/pagination.less b/assets/less/manage/classes/pagination.less index b9a6647a..5f98f7aa 100644 --- a/assets/less/manage/classes/pagination.less +++ b/assets/less/manage/classes/pagination.less @@ -11,7 +11,7 @@ &__option { transition: box-shadow .2s, background-color .2s; - &:hover { + &:not(&--disabled):hover { background-color: #444; box-shadow: 0 1px 5px 0 fade(#555, 80%); } @@ -20,6 +20,10 @@ &:active { background-color: #444; } + + &--disabled { + opacity: .5; + } } &__separator { @@ -37,6 +41,8 @@ min-width: 40px; min-height: 40px; + &--first, + &--last, &--prev, &--next { font-size: 2em; diff --git a/public/manage/users.php b/public/manage/users.php index ffbab4ae..6a010c68 100644 --- a/public/manage/users.php +++ b/public/manage/users.php @@ -7,22 +7,38 @@ $db = Database::connection(); $templating = $app->getTemplating(); $is_post_request = $_SERVER['REQUEST_METHOD'] === 'POST'; +$queryQffset = (int)($_GET['o'] ?? 0); $page_id = (int)($_GET['p'] ?? 1); switch ($_GET['v'] ?? null) { case 'listing': - $manage_users = $db->query(' + $usersTake = 32; + + $manageUsersCount = $db->query(' + SELECT COUNT(`user_id`) + FROM `msz_users` + ')->fetchColumn(); + + $getManageUsers = $db->prepare(' SELECT u.`user_id`, u.`username`, COALESCE(r.`role_colour`, CAST(0x40000000 AS UNSIGNED)) as `colour` FROM `msz_users` as u LEFT JOIN `msz_roles` as r ON u.`display_role` = r.`role_id` - LIMIT 0, 32 - ')->fetchAll(); + LIMIT :offset, :take + '); + $getManageUsers->bindValue('offset', $queryQffset); + $getManageUsers->bindValue('take', $usersTake); + $manageUsers = $getManageUsers->execute() ? $getManageUsers->fetchAll() : []; //$manage_users = UserV1::paginate(32, ['*'], 'p', $page_id); - $templating->vars(compact('manage_users')); + $templating->vars([ + 'manage_users' => $manageUsers, + 'manage_users_count' => $manageUsersCount, + 'manage_users_range' => $usersTake, + 'manage_users_offset' => $queryQffset, + ]); echo $templating->render('@manage.users.listing'); break; @@ -59,7 +75,14 @@ switch ($_GET['v'] ?? null) { break; case 'roles': - $manage_roles = $db->query(' + $rolesTake = 10; + + $manageRolesCount = $db->query(' + SELECT COUNT(`role_id`) + FROM `msz_roles` + ')->fetchColumn(); + + $getManageRoles = $db->prepare(' SELECT `role_id`, `role_colour`, `role_name`, ( @@ -68,11 +91,19 @@ switch ($_GET['v'] ?? null) { WHERE ur.`role_id` = r.`role_id` ) as `users` FROM `msz_roles` as r - LIMIT 0, 10 - ')->fetchAll(); + LIMIT :offset, :take + '); + $getManageRoles->bindValue('offset', $queryQffset); + $getManageRoles->bindValue('take', $rolesTake); + $manageRoles = $getManageRoles->execute() ? $getManageRoles->fetchAll() : []; //$manage_roles = Role::paginate(10, ['*'], 'p', $page_id); - $templating->vars(compact('manage_roles')); + $templating->vars([ + 'manage_roles' => $manageRoles, + 'manage_roles_count' => $manageRolesCount, + 'manage_roles_range' => $rolesTake, + 'manage_roles_offset' => $queryQffset, + ]); echo $templating->render('@manage.users.roles'); break; diff --git a/views/manage/macros.twig b/views/manage/macros.twig index 0f2f567e..d437a281 100644 --- a/views/manage/macros.twig +++ b/views/manage/macros.twig @@ -14,60 +14,85 @@ {% endfor %} {% endmacro %} -{% macro paginate(paginator, base_url, className, alwaysRender) %} +{% macro paginate(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, useRanges, offsetParam, pageRange) %} {% set alwaysRender = alwaysRender|default(false) %} - {% if alwaysRender or paginator.lastPage > 1 %} - {% set separator = '%3F' in base_url|default('')|url_encode ? '&' : '?' %} - {% set base_url = base_url ~ separator %} + {% if alwaysRender or itemCount > itemRange %} + {% set classPrefix = classPrefix|default('') %} + {% set separator = '%3F' in baseUrl|default('')|url_encode ? '&' : '?' %} + {% set baseUrl = baseUrl ~ separator %} + {% set pageCount = (itemCount / itemRange)|round(0, 'ceil') %} + {% set currentPage = currentOffset // itemRange %} + {% set useRanges = useRanges|default(true) %} + {% set offsetParam = offsetParam|default(useRanges ? 'o' : 'p') %} + {% set pageRange = pageRange|default(3) %} - {% endmacro %} -{% macro paginate(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, useRanges, offsetParam) %} +{% macro paginate(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, useRanges, offsetParam, pageRange) %} {% set alwaysRender = alwaysRender|default(false) %} {% if alwaysRender or itemCount > itemRange %} @@ -27,6 +27,7 @@ {% set currentPage = currentOffset // itemRange %} {% set useRanges = useRanges|default(true) %} {% set offsetParam = offsetParam|default(useRanges ? 'o' : 'p') %} + {% set pageRange = pageRange|default(3) %}