sql_query = preg_replace("/\n\r|\r\n|\n|\r/", " ", $query); if ($countQuery != "") $countQuery = preg_replace("/\n\r|\r\n|\n|\r/", " ", $countQuery); $this->countQuery = ($countQuery != "") ? $countQuery : $this->sql_query; $this->page_name = $page_holder; if ($debug) { echo '

'; echo 'original_query=' . $query . '

'; echo 'original_count_query=' . $countQuery . '

'; echo 'sql_query=' . $this->sql_query . '

'; echo 'count_query=' . $this->countQuery . '

'; } if (isset($_GET[$page_holder])) { $page = $_GET[$page_holder]; } elseif (isset($_POST[$page_holder])) { $page = $_POST[$page_holder]; } else { $page = ''; } if (empty($page) || !is_numeric($page)) $page = 1; $this->current_page_number = $page; $this->number_of_rows_per_page = $max_rows; $pos_to = strlen($this->countQuery); $query_lower = strtolower($this->countQuery); $pos_from = strpos($query_lower, ' from', 0); $pos_group_by = strpos($query_lower, ' group by', $pos_from); if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by; $pos_having = strpos($query_lower, ' having', $pos_from); if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having; $pos_order_by = strrpos($query_lower, ' order by', $pos_from); if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by; if (strpos($query_lower, 'distinct') || strpos($query_lower, 'group by')) { $count_string = 'distinct ' . zen_db_input($count_key); } else { $count_string = zen_db_input($count_key); } $count_query = "select count(" . $count_string . ") as total " . substr($this->countQuery, $pos_from, ($pos_to - $pos_from)); if ($debug) { echo 'count_query=' . $count_query . '

'; } $count = $db->Execute($count_query); $this->number_of_rows = $count->fields['total']; $this->number_of_pages = ceil($this->number_of_rows / $this->number_of_rows_per_page); if ($this->current_page_number > $this->number_of_pages) { $this->current_page_number = $this->number_of_pages; } $offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1)); // fix offset error on some versions if ($offset <= 0) { $offset = 0; } $this->sql_query .= " limit " . ($offset > 0 ? $offset . ", " : '') . $this->number_of_rows_per_page; } /* class functions */ // display split-page-number-links function display_links($max_page_links, $parameters = '', $outputAsUnorderedList = false, $navElementLabel = '') { global $request_type; if ($max_page_links == '') $max_page_links = 1; if ($this->number_of_pages <= 1) return; $display_links_string = $ul_elements = ''; $counter_actual_page_links = 0; $class = ''; if (zen_not_null($parameters) && (substr($parameters, -1) != '&') && ($this->current_page_number > 1)) $parameters .= '&'; // previous button - not displayed on first page $link = '' . PREVNEXT_BUTTON_PREV . ''; if ($this->current_page_number > 1) { $display_links_string .= $link . '  '; $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } else { // $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } // check if number_of_pages > $max_page_links $cur_window_num = intval($this->current_page_number / $max_page_links); if ($this->current_page_number % $max_page_links) $cur_window_num++; $max_window_num = intval($this->number_of_pages / $max_page_links); if ($this->number_of_pages % $max_page_links) $max_window_num++; // previous group of pages $link = '...'; if ($cur_window_num > 1) { $display_links_string .= $link; $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } else { // $ul_elements .= ' ' . "\n"; } // page nn button for ($jump_to_page = 1 + (($cur_window_num - 1) * $max_page_links); ($jump_to_page <= ($cur_window_num * $max_page_links)) && ($jump_to_page <= $this->number_of_pages); $jump_to_page++) { if ($jump_to_page == $this->current_page_number) { $display_links_string .= ' ' . $jump_to_page . ' '; $ul_elements .= '
  • ' . $jump_to_page . '
  • ' . "\n"; $counter_actual_page_links++; } else { $link = '' . $jump_to_page . ''; $display_links_string .= ' ' . $link . ' '; $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; $counter_actual_page_links++; } } // next group of pages if ($cur_window_num < $max_window_num) { $link = '...'; $display_links_string .= $link . ' '; $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } else { // $ul_elements .= ' ' . "\n"; } // next button if (($this->current_page_number < $this->number_of_pages) && ($this->number_of_pages != 1)) { $link = '' . PREVNEXT_BUTTON_NEXT . ''; $display_links_string .= ' ' . $link . ' '; $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } else { // $ul_elements .= '
  • ' . $link . '
  • ' . "\n"; } // if no pagination needed, return blank if ($counter_actual_page_links == 0) return; // return