>From 541c18f86d970051d837e9dd75e1122292d1fd4f Mon Sep 17 00:00:00 2001
From: PyroPeter <abi1789@googlemail.com>
Date: Mon, 14 Feb 2011 20:58:42 +0100
Subject: [PATCH] pkg_search_results: rewrite of pagination

* Most of the PHP-code was moved to pkgfuncs.php to keep the template simple.

Signed-off-by: PyroPeter <abi1789@googlemail.com>
---
 web/html/css/arch.css               |   17 +++++---
 web/lib/pkgfuncs.inc                |   28 +++++++++++++
 web/template/pkg_search_results.php |   77 ++++++----------------------------
 3 files changed, 53 insertions(+), 69 deletions(-)

diff --git a/web/html/css/arch.css b/web/html/css/arch.css
index c3ed3aa..203d9da 100644
--- a/web/html/css/arch.css
+++ b/web/html/css/arch.css
@@ -328,19 +328,24 @@ blockquote.code {
 	text-decoration: none;
 }
 
-#pages { margin: 5px; }
-#pages .page_num {
+.pageNav {
+  margin:5px 0;
+}
+.pageNav .page_num {
 	border: 1px solid #ddd;
 	padding: 2px;
 	color: #0771a6;
 }
-
-#pages .page_num:hover {
+.pageNav * {
+  display:inline-block;
+  text-align:center;
+  min-width:3ex;
+}
+.pageNav .page_num:hover {
 	border: 1px solid #8faecd;
 	color: #333;
 }
-
-#pages #page_sel {
+.pageNav .page_sel {
 	border: 1px solid #8faecd;
 	padding: 2px;
 	color: #333;
diff --git a/web/lib/pkgfuncs.inc b/web/lib/pkgfuncs.inc
index 2f69321..0420054 100644
--- a/web/lib/pkgfuncs.inc
+++ b/web/lib/pkgfuncs.inc
@@ -559,6 +559,34 @@ function pkg_search_page($SID="") {
 
 
 	if ($total > 1 || $total == 0) {
+		# calculation of pagination links
+		$per_page = ($_GET['PP'] > 0) ? $_GET['PP'] : 25;
+		$current = ceil($first / $per_page);
+		$pages = ceil($total / $per_page);
+		$templ_pages = array();
+
+		if ($current - 1 > 1)
+			$templ_pages[__('First')] = 0;
+
+		if ($current > 1)
+			$templ_pages[__('Previous')] = ($current - 2) * $per_page;
+
+		if ($current - 5 > 1)
+			$templ_pages[] = "ellipsis";
+
+		for ($i = max($current - 5, 1) ; $i <= min($pages, $current + 5) ; $i++) {
+			$templ_pages[$i] = ($i - 1) * $per_page;
+		}
+
+		if ($current + 5 < $pages)
+			$templ_pages[] = "ellipsis";
+
+		if ($current < $pages)
+			$templ_pages[__('Next')] = $current * $per_page;
+
+		if ($current + 1 < $pages)
+			$templ_pages[__('Last')] = ($pages - 1) * $per_page;
+
 		include('pkg_search_form.php');
 		include('pkg_search_results.php');
 	}
diff --git a/web/template/pkg_search_results.php b/web/template/pkg_search_results.php
index 4830ca8..57d574c 100644
--- a/web/template/pkg_search_results.php
+++ b/web/template/pkg_search_results.php
@@ -113,73 +113,24 @@ for ($i = 0; $row = mysql_fetch_assoc($result); $i++) {
 		</td>
 
 		<td align='right'>
-		<span class='f4'><span class='blue'>
-		<?php print __("Showing results %s - %s of %s", $first, $last, $total) ?>
-		</span></span>
-		<br />
-
-		<div id="pages">
-		<?php
-			if ($_GET['O'] > 0):
-				$O = $_GET['O'] - $_GET['PP'];
-
-				if ($_GET['O'] < $_GET['PP']) {
-					$O = 0;
-				}
-		?>
-			<a class="page_num" href="packages.php?<?php print mkurl("O=0") ?>"><?php echo __('First') ?></a>
-			<a class="page_num" href="packages.php?<?php print mkurl("O=$O") ?>"><?php echo __('Previous') ?></a>
-		<?php   endif; ?>
-
-			<?php
-			if ($_GET['PP'] > 0) {
-				$pages = ceil($total / $_GET['PP']);
-			}
-
-			if ($pages > 1) {
-				if ($_GET['O'] > 0) {
-					$currentpage = ceil(($_GET['O'] + 1) / $_GET['PP']);
-				}
-				else {
-					$currentpage = 1;
-				}
-
-				$morepages = $currentpage + 5;
-
-				print (($currentpage-5) > 1) ? '...' : '';
-
-				# Display links for more search results.
-				for ($i = ($currentpage - 5); $i <= $morepages && $i <= $pages; $i++) {
-					if ($i < 1) {
-						$i = 1;
-					}
-
-					$pagestart = ($i - 1) * $_GET['PP'];
-
-					if ($i <> $currentpage) :
-					?>
-				<a class="page_num" href="packages.php?<?php print mkurl('O=' . ($pagestart)) ?>"><?php echo $i ?></a>
-					<?php else : echo "<span id=\"page_sel\">$i</span>";
-					endif;
-				}
-
-				print ($pages > $morepages) ? '...' : '';
-				?>
-
-			<?php if ($total - $_GET['PP'] - $_GET['O'] > 0): ?>
-				<a class="page_num" href='packages.php?<?php print mkurl('O=' . ($_GET['O'] + $_GET['PP'])) ?>'><?php echo __('Next') ?></a>
-				<a class="page_num" href='packages.php?<?php print mkurl('O=' . ($total - $_GET['PP'])) ?>'><?php echo __('Last') ?></a>
-			<?php endif; ?>
-
+			<div class="pageStats f4 blue">
+				<?php print __("Showing results %s - %s of %s", $first, $last, $total) ?>
+			</div>
+			<div class="pageNav">
+				<?php foreach($templ_pages as $pagenr => $pagestart) { ?>
+					<?php if ($pagestart === "ellipsis") { ?>
+						...
+					<?php } else if ($pagestart + 1 == $first) { ?>
+						<span class="page_sel"><?php echo $pagenr ?></span>
+					<?php } else { ?>
+						<a class="page_num" href="packages.php?<?php print mkurl('O=' . (	$pagestart)) ?>"><?php echo $pagenr ?></a>
+					<?php } ?>
+				<?php } ?>
 			</div>
-
 		</td>
 	</tr>
 
-<?php
-			}
-}
-?>
+<?php } ?>
 	</table>
 </div>
 </form>
-- 
1.7.4.1

