From cb9097e0199cf6afca3f144edb7d7addaec1cb59 Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Thu, 22 Jul 2021 21:04:02 +0200
Subject: Add pagination for search results

Add pagination for search results in the admin and default theme.
---
 admin/page/search.php | 37 +++++++++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)

(limited to 'admin/page')

diff --git a/admin/page/search.php b/admin/page/search.php
index 8135b91..85448df 100644
--- a/admin/page/search.php
+++ b/admin/page/search.php
@@ -10,25 +10,54 @@ const AUTHENTICATION = TRUE;
 #===============================================================================
 require '../../core/application.php';
 
+#===============================================================================
+# Get repositories
+#===============================================================================
+$PageRepository = Application::getRepository('Page');
+$UserRepository = Application::getRepository('User');
+
+#===============================================================================
+# Pagination
+#===============================================================================
+$site_size = Application::get('ADMIN.PAGE.LIST_SIZE');
+$site_sort = Application::get('ADMIN.PAGE.LIST_SORT');
+
+$currentSite = HTTP::GET('site') ?? 1;
+$currentSite = intval($currentSite);
+$offset = ($currentSite-1) * $site_size;
+
 #===============================================================================
 # Check for search request
 #===============================================================================
 if($search = HTTP::GET('q')) {
-	$PageRepository = Application::getRepository('Page');
-	$UserRepository = Application::getRepository('User');
-
-	foreach($PageRepository->search($search) as $Page) {
+	foreach($PageRepository->search($search, [], $site_size, $offset) as $Page) {
 		$User = $UserRepository->find($Page->get('user'));
 		$templates[] = generatePageItemTemplate($Page, $User);
 	}
 }
 
+#===============================================================================
+# Create pagination only if there are results
+#===============================================================================
+if($count = $PageRepository->getLastSearchOverallCount()) {
+	$last = ceil($count / $site_size);
+
+	$pagination_data = [
+		'THIS' => $currentSite,
+		'LAST' => $last,
+		'HTML' => createPaginationTemplate(
+			$currentSite, $last, Application::getAdminURL('page/search.php')
+		)
+	];
+}
+
 #===============================================================================
 # Build document
 #===============================================================================
 $SearchTemplate = Template\Factory::build('page/search');
 $SearchTemplate->set('QUERY', $search);
 $SearchTemplate->set('PAGES', $templates ?? []);
+$SearchTemplate->set('PAGINATION', $pagination_data ?? []);
 
 $MainTemplate = Template\Factory::build('main');
 $MainTemplate->set('NAME', $Language->text('title_page_search'));
-- 
cgit v1.2.3