From ea2a2a59b32ac2e3203d82551d99fe4ba92ef6d3 Mon Sep 17 00:00:00 2001 From: labmecanicatec Date: Mon, 24 Aug 2026 08:30:52 -0500 Subject: [PATCH 1/3] refactor: implement pagination - Replace null parameters with actual page number and size - Use page->GetPageNumber() and page->GetPageSize() for pagination - Improves performance by limiting results per request --- Presenters/Admin/ManageBlackoutsPresenter.php | 2 +- Presenters/Admin/ManageGroupsPresenter.php | 2 +- Presenters/Admin/ManageReservationsPresenter.php | 8 +++++--- Presenters/Admin/ManageResourcesPresenter.php | 2 +- Presenters/Admin/ManageSchedulesPresenter.php | 2 +- Presenters/Admin/ManageUsersPresenter.php | 8 +++++--- Presenters/ViewSchedulesPresenter.php | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Presenters/Admin/ManageBlackoutsPresenter.php b/Presenters/Admin/ManageBlackoutsPresenter.php index 3c3adc07fd..412a391e3e 100644 --- a/Presenters/Admin/ManageBlackoutsPresenter.php +++ b/Presenters/Admin/ManageBlackoutsPresenter.php @@ -80,7 +80,7 @@ public function PageLoad($userTimezone) $blackouts = $this->manageBlackoutsService->LoadFiltered( $this->page->GetPageNumber(), - null, + $this->page->GetPageSize(), $this->page->GetSortField(), $this->page->GetSortDirection(), $filter, diff --git a/Presenters/Admin/ManageGroupsPresenter.php b/Presenters/Admin/ManageGroupsPresenter.php index 82f2300fa0..a525b609e0 100644 --- a/Presenters/Admin/ManageGroupsPresenter.php +++ b/Presenters/Admin/ManageGroupsPresenter.php @@ -109,7 +109,7 @@ public function PageLoad() } else { $groupList = $this->groupRepository->GetList( $this->page->GetPageNumber(), - null, + $this->page->GetPageSize(), $this->page->GetSortField(), $this->page->GetSortDirection() ); diff --git a/Presenters/Admin/ManageReservationsPresenter.php b/Presenters/Admin/ManageReservationsPresenter.php index 199a6d851d..1effca9053 100644 --- a/Presenters/Admin/ManageReservationsPresenter.php +++ b/Presenters/Admin/ManageReservationsPresenter.php @@ -210,7 +210,7 @@ public function PageLoad($userTimezone) $reservations = $this->manageReservationsService->LoadFiltered( $this->page->GetPageNumber(), - null, + $this->page->GetPageSize(), $this->page->GetSortField(), $this->page->GetSortDirection(), $filter, @@ -350,7 +350,8 @@ public function ProcessDataRequest($dataRequest) 'text' => $terms->Text(), 'url' => $terms->Url(), 'filename' => $terms->FileName(), - 'applicability' => $terms->Applicability()] + 'applicability' => $terms->Applicability() + ] ); } else { $this->page->BindTerms(null); @@ -746,7 +747,8 @@ public function SetFilterCustomAttributes($filters) $this->FilterCustomAttributes = serialize($filters); } - public static $filterKeys = ['FilterStartDateDelta' => -7, + public static $filterKeys = [ + 'FilterStartDateDelta' => -7, 'FilterEndDateDelta' => +7, 'FilterUserId' => '', 'FilterUserName' => '', diff --git a/Presenters/Admin/ManageResourcesPresenter.php b/Presenters/Admin/ManageResourcesPresenter.php index 6755c67e51..ec017a5564 100644 --- a/Presenters/Admin/ManageResourcesPresenter.php +++ b/Presenters/Admin/ManageResourcesPresenter.php @@ -151,7 +151,7 @@ public function PageLoad() $results = $this->resourceRepository->GetList( $this->page->GetPageNumber(), - null, + $this->page->GetPageSize(), null, null, $filterValues->AsFilter($resourceAttributes) diff --git a/Presenters/Admin/ManageSchedulesPresenter.php b/Presenters/Admin/ManageSchedulesPresenter.php index 509c22a70f..c765625658 100644 --- a/Presenters/Admin/ManageSchedulesPresenter.php +++ b/Presenters/Admin/ManageSchedulesPresenter.php @@ -446,7 +446,7 @@ public function __construct( public function PageLoad() { - $results = $this->manageSchedulesService->GetList($this->page->GetPageNumber(), null); + $results = $this->manageSchedulesService->GetList($this->page->GetPageNumber(), $this->page->GetPageSize()); $schedules = $results->Results(); $sourceSchedules = $this->manageSchedulesService->GetSourceSchedules(); diff --git a/Presenters/Admin/ManageUsersPresenter.php b/Presenters/Admin/ManageUsersPresenter.php index 683d1f245b..f197a8596e 100644 --- a/Presenters/Admin/ManageUsersPresenter.php +++ b/Presenters/Admin/ManageUsersPresenter.php @@ -191,7 +191,7 @@ public function PageLoad() } else { $userList = $this->userRepository->GetList( $this->page->GetPageNumber(), - null, + $this->page->GetPageSize(), $this->page->GetSortField(), $this->page->GetSortDirection(), null, @@ -256,7 +256,8 @@ public function AddUser() $extraAttributes = [ UserAttribute::Organization => $this->page->GetOrganization(), UserAttribute::Phone => $this->page->GetPhone(), - UserAttribute::Position => $this->page->GetPosition()]; + UserAttribute::Position => $this->page->GetPosition() + ]; $user = $this->manageUsersService->AddUser( $this->page->GetUserName(), @@ -300,7 +301,8 @@ public function UpdateUser() $extraAttributes = [ UserAttribute::Organization => $this->page->GetOrganization(), UserAttribute::Phone => $this->page->GetPhone(), - UserAttribute::Position => $this->page->GetPosition()]; + UserAttribute::Position => $this->page->GetPosition() + ]; $this->manageUsersService->UpdateUser( $this->page->GetUserId(), diff --git a/Presenters/ViewSchedulesPresenter.php b/Presenters/ViewSchedulesPresenter.php index f4861adde3..69a1997265 100644 --- a/Presenters/ViewSchedulesPresenter.php +++ b/Presenters/ViewSchedulesPresenter.php @@ -35,7 +35,7 @@ public function __construct( public function PageLoad() { - $results = $this->manageSchedulesService->GetList(null, null); + $results = $this->manageSchedulesService->GetList($this->page->GetPageNumber(), $this->page->GetPageSize()); $schedules = $results->Results(); $sourceSchedules = $this->manageSchedulesService->GetSourceSchedules(); From b25e853d70b64ae201ace070fcb17f47335f928b Mon Sep 17 00:00:00 2001 From: labmecanicatec Date: Mon, 24 Aug 2026 08:37:02 -0500 Subject: [PATCH 2/3] refactor: add pagination UI components - Restore CreatePagination and CreatePageLink methods - Enable page navigation with prev/next buttons - Display results range and total count - Add data attributes for pagination handling - Replace view all behavior with paginated browsing Assisted-by: Claude:claude-haiku-4.5 --- Web/scripts/ajax-helpers.js | 2 +- lib/Common/SmartyPage.php | 102 +++++++++++++++--- tpl/Admin/Blackouts/manage_blackouts.tpl | 1 + tpl/Admin/Groups/manage_groups.tpl | 1 + tpl/Admin/Payments/transaction_log.tpl | 3 +- .../Reservations/manage_reservations.tpl | 2 +- tpl/Admin/Resources/manage_resources.tpl | 1 + tpl/Admin/Schedules/manage_schedules.tpl | 3 +- tpl/Admin/Users/credit_log.tpl | 4 +- tpl/Admin/Users/manage_users.tpl | 1 + tpl/Credits/credit_log.tpl | 3 +- tpl/Credits/transaction_log.tpl | 3 +- 12 files changed, 106 insertions(+), 20 deletions(-) diff --git a/Web/scripts/ajax-helpers.js b/Web/scripts/ajax-helpers.js index 716278cb1d..ff2e3c20ab 100644 --- a/Web/scripts/ajax-helpers.js +++ b/Web/scripts/ajax-helpers.js @@ -270,7 +270,7 @@ function HtmlDecode(encoded) { } function ajaxPagination(element, callback) { - element.find('a.page').on('click', function (e) { + element.find('a[data-page][data-page-size]').on('click', function (e) { e.preventDefault(); var a = $(e.target); callback(a.data('page'), a.data('page-size')); diff --git a/lib/Common/SmartyPage.php b/lib/Common/SmartyPage.php index 58e6b31f84..beecdac2f8 100644 --- a/lib/Common/SmartyPage.php +++ b/lib/Common/SmartyPage.php @@ -241,6 +241,7 @@ protected function RegisterFunctions() $this->registerPlugin('modifier', 'strtolower', $this->Strtolower(...)); $this->registerPlugin('function', 'datatable', $this->CreateDataTable(...)); $this->registerPlugin('function', 'datatablefilter', $this->CreateDataTableFilter(...)); + $this->registerPlugin('function', 'pagination', $this->CreatePagination(...)); $this->registerPlugin('modifier', 'microtime', $this->Microtime(...)); $this->registerPlugin('modifier', 'array_key_exists', $this->ArrayKeyExists(...)); $this->registerPlugin('modifier', 'count', $this->Count(...)); @@ -657,7 +658,6 @@ public function CreateDataTable($params) { $tableId = $params['tableId']; $searchText = $this->Resources->GetString('Filter'); - $AllText = $this->Resources->GetString('All'); $NoResultsFoundText = $this->Resources->GetString('NoResultsFound'); $copyText = $this->Resources->GetString('Copy'); $exportText = $this->Resources->GetString('Export'); @@ -665,8 +665,6 @@ public function CreateDataTable($params) $showHideText = $this->Resources->GetString('ShowHide'); $infoText = $this->Resources->GetString('Info'); $lengthMenuText = $this->Resources->GetString('LengthMenu'); - $defaultPageSize = $this->GetDefaultDataTablePageSize(); - $lengthMenu = $this->BuildDataTableLengthMenu($AllText); if ($tableId == 'report-results') { $pagination = '"paging": false, @@ -675,12 +673,12 @@ public function CreateDataTable($params) "info": false, "ordering": false,'; } else { - $pagination = '"pageLength": ' . $defaultPageSize . ', "lengthMenu": ' . $lengthMenu . ','; + $pagination = '"paging": false, "info": false,'; } return sprintf( '