diff --git a/resources/paging.php b/resources/paging.php index f9e095f4e4..55d7124f98 100644 --- a/resources/paging.php +++ b/resources/paging.php @@ -24,18 +24,34 @@ Mark J Crane */ +/** + * Generate pagination links and controls. + * + * @param int $num_rows Total number of rows. + * @param string $param URL parameters to sanitize. + * @param int $rows_per_page Number of rows per page. + * @param bool $mini Whether to display mini pagination (default: false). + * @param int $result_count Result count for last page handling. + * + * @return array Array containing pagination links and controls. + */ function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count = 0) { //validate the data - if (!is_numeric($num_rows)) { $num_rows = 0; } - if (!is_numeric($rows_per_page)) { $rows_per_page = 100; } - if (!is_numeric($result_count)) { $result_count = 0; } + if (!is_numeric($num_rows)) { + $num_rows = 0; + } + if (!is_numeric($rows_per_page)) { + $rows_per_page = 100; + } + if (!is_numeric($result_count)) { + $result_count = 0; + } // if $_get['page'] defined, use it as page number if (isset($_GET['page']) && is_numeric($_GET['page'])) { $page_number = $_GET['page']; - } - else { + } else { $page_number = 0; } @@ -44,15 +60,14 @@ function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count if (isset($param) && !empty($param)) { $param_array = explode("&", $param); if (is_array($param_array)) { - foreach($param_array as $row) { + foreach ($param_array as $row) { $param_sub_array = explode("=", $row); $key = preg_replace('#[^a-zA-Z0-9_\-]#', '', $param_sub_array['0']); $value = urldecode($param_sub_array['1'] ?? ''); if ($key === 'order_by' && !empty($value)) { //validate order by - $sanitized_parameters .= "&order_by=". preg_replace('#[^a-zA-Z0-9_\-]#', '', $value); - } - else if ($key == 'order' && !empty($value)) { + $sanitized_parameters .= "&order_by=" . preg_replace('#[^a-zA-Z0-9_\-]#', '', $value); + } elseif ($key == 'order' && !empty($value)) { //validate order switch ($value) { case 'asc': @@ -62,12 +77,10 @@ function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count $sanitized_parameters .= "&order=desc"; break; } - } - else if (!empty($value) && is_numeric($value)) { - $sanitized_parameters .= "&".$key."=".$value; - } - else { - $sanitized_parameters .= "&".$key."=".urlencode($value ?? ''); + } elseif (!empty($value) && is_numeric($value)) { + $sanitized_parameters .= "&" . $key . "=" . $value; + } else { + $sanitized_parameters .= "&" . $key . "=" . urlencode($value ?? ''); } } } @@ -75,114 +88,108 @@ function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count //how many pages we have when using paging if ($num_rows > 0) { - $max_page = ceil($num_rows/$rows_per_page); - } - else { + $max_page = ceil($num_rows / $rows_per_page); + } else { $max_page = 1; } - + //add multi-lingual support $language = new text; $text = $language->get(); //print the link to access each page - $self = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); + $self = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); $nav = ''; - for ($page = 1; $page <= $max_page; $page++){ + for ($page = 1; $page <= $max_page; $page++) { if ($page == $page_number) { $nav .= " $page "; // no need to create a link to current page - } - else { - $nav .= " ".$page." \n"; + } else { + $nav .= " " . $page . " \n"; } } if ($page_number > 0) { $page = $page_number - 1; - $prev = button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>'chevron-left','link'=>$self."?page=".$page.$sanitized_parameters,'title'=>$text['label-page'].' '.($page+1)]); - $first = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-left','link'=>$self."?page=1".$sanitized_parameters]); - } - else { - $prev = button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>'chevron-left','onclick'=>"return false;",'title'=>'','style'=>'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); + $prev = button::create(['type' => 'button', 'label' => $text['button-back'], 'icon' => 'chevron-left', 'link' => $self . "?page=" . $page . $sanitized_parameters, 'title' => $text['label-page'] . ' ' . ($page + 1)]); + $first = button::create(['type' => 'button', 'label' => $text['button-next'], 'icon' => 'chevron-left', 'link' => $self . "?page=1" . $sanitized_parameters]); + } else { + $prev = button::create(['type' => 'button', 'label' => $text['button-back'], 'icon' => 'chevron-left', 'onclick' => "return false;", 'title' => '', 'style' => 'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); } if (($page_number + 1) < $max_page) { $page = $page_number + 1; - $next = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-right','link'=>$self."?page=".$page.$sanitized_parameters,'title'=>$text['label-page'].' '.($page+1)]); - $last = button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>'chevron-right','link'=>$self."?page=".$max_page.$sanitized_parameters]); - } - else { - $last = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-right','link'=>$self."?page=".$max_page.$sanitized_parameters]); - $next = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-right','onclick'=>"return false;",'title'=>'','style'=>'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); + $next = button::create(['type' => 'button', 'label' => $text['button-next'], 'icon' => 'chevron-right', 'link' => $self . "?page=" . $page . $sanitized_parameters, 'title' => $text['label-page'] . ' ' . ($page + 1)]); + $last = button::create(['type' => 'button', 'label' => $text['button-back'], 'icon' => 'chevron-right', 'link' => $self . "?page=" . $max_page . $sanitized_parameters]); + } else { + $last = button::create(['type' => 'button', 'label' => $text['button-next'], 'icon' => 'chevron-right', 'link' => $self . "?page=" . $max_page . $sanitized_parameters]); + $next = button::create(['type' => 'button', 'label' => $text['button-next'], 'icon' => 'chevron-right', 'onclick' => "return false;", 'title' => '', 'style' => 'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); } //if the result count is less than the rows per page then this is the last page of results if ($result_count > 0 and $result_count < $rows_per_page) { - $next = button::create(['type'=>'button','label'=>(!$mini ? $text['button-next'] : null),'icon'=>'chevron-right','onclick'=>"return false;",'title'=>'','style'=>'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); + $next = button::create(['type' => 'button', 'label' => (!$mini ? $text['button-next'] : null), 'icon' => 'chevron-right', 'onclick' => "return false;", 'title' => '', 'style' => 'opacity: 0.4; -moz-opacity: 0.4; cursor: default;']); } - $array = array(); + $array = []; $code = ''; if ($max_page > 1) { //define javascript to include - $script = "\n"; + " if (do_action) {\n" . + " // action to perform when enter is hit\n" . + " if (page_num < 1) { page_num = 1; }\n" . + " if (page_num > " . $max_page . ") { page_num = " . $max_page . "; }\n" . + " document.location.href = '" . $self . "?page='+(--page_num)+'" . $sanitized_parameters . "';\n" . + " return false;\n" . + " }\n" . + " }\n" . + "\n"; //determine size - if ($mini) { - $code = "".$prev.$next."\n".$script; - } - else { - $code .= "
"; - $code .= " ".$prev; - $code .= "    "; - $code .= " "; - if ($result_count == 0) { - $code .= "   ".$max_page.""; - } - $code .= "    "; - $code .= " ".$next; - $code .= "
\n".$script; + if ($mini) { + $code = "" . $prev . $next . "\n" . $script; + } else { + $code .= "
"; + $code .= " " . $prev; + $code .= "    "; + $code .= " "; + if ($result_count == 0) { + $code .= "   " . $max_page . ""; } + $code .= "    "; + $code .= " " . $next; + $code .= "
\n" . $script; + } //add to array - $array[] = $code; - } - else { + $array[] = $code; + } else { $array[] = ""; } $array[] = $rows_per_page; @@ -190,5 +197,3 @@ function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count return $array; } - -?>