Fork of FusionPBX but with LDAP kinda working
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
6.5 KiB

2 years ago
  1. <?php
  2. /*
  3. FusionPBX
  4. Version: MPL 1.1
  5. The contents of this file are subject to the Mozilla Public License Version
  6. 1.1 (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.mozilla.org/MPL/
  9. Software distributed under the License is distributed on an "AS IS" basis,
  10. WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. for the specific language governing rights and limitations under the
  12. License.
  13. The Original Code is FusionPBX
  14. The Initial Developer of the Original Code is
  15. Mark J Crane <markjcrane@fusionpbx.com>
  16. Portions created by the Initial Developer are Copyright (C) 2008-2019
  17. the Initial Developer. All Rights Reserved.
  18. Contributor(s):
  19. Mark J Crane <markjcrane@fusionpbx.com>
  20. */
  21. function paging($num_rows, $param, $rows_per_page, $mini = false, $result_count = 0) {
  22. //validate the data
  23. if (!is_numeric($num_rows)) { $num_rows = 0; }
  24. if (!is_numeric($rows_per_page)) { $rows_per_page = 100; }
  25. if (!is_numeric($result_count)) { $result_count = 0; }
  26. // if $_get['page'] defined, use it as page number
  27. if (isset($_GET['page']) && is_numeric($_GET['page'])) {
  28. $page_number = $_GET['page'];
  29. }
  30. else {
  31. $page_number = 0;
  32. }
  33. //sanitize the parameters
  34. $sanitized_parameters = '';
  35. if (isset($param) && strlen($param) > 0) {
  36. $param_array = explode("&", $param);
  37. if (is_array($param_array)) {
  38. foreach($param_array as $row) {
  39. $param_sub_array = explode("=", $row);
  40. $key = preg_replace('#[^a-zA-Z0-9_\-]#', '', $param_sub_array['0']);
  41. $value = urldecode($param_sub_array['1']);
  42. if ($key == 'order_by' && strlen($value) > 0) {
  43. //validate order by
  44. $sanitized_parameters .= "&order_by=". preg_replace('#[^a-zA-Z0-9_\-]#', '', $value);
  45. }
  46. else if ($key == 'order' && strlen($value) > 0) {
  47. //validate order
  48. switch ($value) {
  49. case 'asc':
  50. $sanitized_parameters .= "&order=asc";
  51. break;
  52. case 'desc':
  53. $sanitized_parameters .= "&order=desc";
  54. break;
  55. }
  56. }
  57. else if (strlen($value) > 0 && is_numeric($value)) {
  58. $sanitized_parameters .= "&".$key."=".$value;
  59. }
  60. else {
  61. $sanitized_parameters .= "&".$key."=".urlencode($value);
  62. }
  63. }
  64. }
  65. }
  66. //how many pages we have when using paging
  67. if ($num_rows > 0) {
  68. $max_page = ceil($num_rows/$rows_per_page);
  69. }
  70. else {
  71. $max_page = 1;
  72. }
  73. //add multi-lingual support
  74. $language = new text;
  75. $text = $language->get();
  76. //print the link to access each page
  77. $self = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8');
  78. $nav = '';
  79. for ($page = 1; $page <= $max_page; $page++){
  80. if ($page == $page_number) {
  81. $nav .= " $page "; // no need to create a link to current page
  82. }
  83. else {
  84. $nav .= " <a href='".$self."?page=".$page."'>".$page."</a> \n";
  85. }
  86. }
  87. if ($page_number > 0) {
  88. $page = $page_number - 1;
  89. $prev = button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>'chevron-left','link'=>$self."?page=".$page.$sanitized_parameters,'title'=>$text['label-page'].' '.($page+1)]);
  90. $first = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-left','link'=>$self."?page=1".$sanitized_parameters]);
  91. }
  92. else {
  93. $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;']);
  94. }
  95. if (($page_number + 1) < $max_page) {
  96. $page = $page_number + 1;
  97. $next = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-right','link'=>$self."?page=".$page.$sanitized_parameters,'title'=>$text['label-page'].' '.($page+1)]);
  98. $last = button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>'chevron-right','link'=>$self."?page=".$max_page.$sanitized_parameters]);
  99. }
  100. else {
  101. $last = button::create(['type'=>'button','label'=>$text['button-next'],'icon'=>'chevron-right','link'=>$self."?page=".$max_page.$sanitized_parameters]);
  102. $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;']);
  103. }
  104. //if the result count is less than the rows per page then this is the last page of results
  105. if ($result_count > 0 and $result_count < $rows_per_page) {
  106. $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;']);
  107. }
  108. $array = array();
  109. $code = '';
  110. if ($max_page > 1) {
  111. //define javascript to include
  112. $script = "<script>\n".
  113. "function go(e) {\n".
  114. "var page_num;\n".
  115. "page_num = document.getElementById('paging_page_num').value;\n".
  116. "do_action = false;\n".
  117. "if (e != null) {\n".
  118. "// called from a form field keypress event\n".
  119. "var keyevent;\n".
  120. "var keychar;\n".
  121. "if (window.event) { keyevent = e.keyCode; }\n".
  122. "else if (e.which) { keyevent = e.which; }\n".
  123. "keychar = keyevent;\n".
  124. "if (keychar == 13) {\n".
  125. "do_action = true;\n".
  126. "}\n".
  127. "else {\n".
  128. "keychar;\n".
  129. "return true;\n".
  130. "}\n".
  131. "}\n".
  132. "else {\n".
  133. "// called from something else (non-keypress)\n".
  134. "do_action = true;\n".
  135. "}\n".
  136. "if (do_action) {\n".
  137. "// action to peform when enter is hit\n".
  138. "if (page_num < 1) { page_num = 1; }\n".
  139. "if (page_num > ".$max_page.") { page_num = ".$max_page."; }\n".
  140. "document.location.href = '".$self."?page='+(--page_num)+'".$sanitized_parameters."';\n".
  141. "return false;\n".
  142. "}\n".
  143. "}\n".
  144. "</script>\n";
  145. //determine size
  146. if ($mini) {
  147. $code = "<span style='white-space: nowrap;'>".$prev.$next."</span>\n".$script;
  148. }
  149. else {
  150. $code .= "<center style='white-space: nowrap;'>";
  151. $code .= " ".$prev;
  152. $code .= " &nbsp;&nbsp;&nbsp;";
  153. $code .= " <input id='paging_page_num' class='formfld' style='max-width: 50px; min-width: 50px; text-align: center;' type='text' value='".($page_number+1)."' onfocus='this.select();' onkeypress='return go(event);'>";
  154. if ($result_count == 0) {
  155. $code .= " &nbsp;&nbsp;<strong>".$max_page."</strong>";
  156. }
  157. $code .= " &nbsp;&nbsp;&nbsp;";
  158. $code .= " ".$next;
  159. $code .= "</center>\n".$script;
  160. }
  161. //add to array
  162. $array[] = $code;
  163. }
  164. else {
  165. $array[] = "";
  166. }
  167. $array[] = $rows_per_page;
  168. return $array;
  169. }
  170. ?>