registry =& $registry; } // ################################################################### /** * (PHP 4) Constructor */ function Pagination(&$registry) { $this->__construct($registry); } // ################################################################### /** * Callback function for the processing of an indivdual page. Needs * the signature: * public string callback(string $baseLink, boolean $noLink, integer $pageNumber, Pagination $this) * * @access public * * @param string Callback function */ function setBitProcessor($callback) { $this->bitprocessor = $callback; } // ################################################################### /** * Callback function for the processing the entire page navigator. Needs * the signature: * public string callback(string $baseLink, integer $nextPage, integer $prevPage array $show['first'=>first page, 'last'=>last page, 'prev'=>previous page, 'next'=>next page], string $bits, Pagination $this) * * @access public * * @param string Callback function */ function setNavigatorProcessor($callback) { $this->pagenavprocessor = $callback; } // ################################################################### /** * Returns the current page number * * @access public * * @return integer Current page */ function getPage() { return $this->page; } // ################################################################### /** * Returns the current perpage value * * @access public * * @return integer Current perpage */ function getPerPage() { return $this->perpage; } // ################################################################### /** * Sets total * * @access public * * @param integer Total number */ function setTotal($total) { $this->total = $total; } // ################################################################### /** * Returns the number of pages to be in the navigator * * @access public * * @param integer Number of pages */ function getPageCount() { return $this->pagecount; } // ################################################################### /** * Sets pagelinks * * @access public * * @param integer Number of page links */ function setPageLinks($pagelinks) { $this->pagelinks = $pagelinks; } // ################################################################### /** * Sets pagevar * * @access public * * @param string Page variable */ function setPageVar($pagevar) { $this->pagevar = $pagevar; } // ################################################################### /** * Sets perpagevar * * @access public * * @param string Per-page variable */ function setPerPageVar($perpagevar) { $this->perpagevar = $perpagevar; } // ################################################################### /** * Sets maxperpage * * @access public * * @param integer Maximum number per page */ function setMaxPerPage($maxperpage) { $this->maxperpage = $maxperpage; } // ################################################################### /** * Sets defaultperpage * * @access public * * @param integer Total number */ function setDefaultPerPage($defaultperpage) { $this->defaultperpage = $defaultperpage; } // ################################################################### /** * Takes all of the information from the set() functions and then * prepares all of the data through verification * * @access public */ function processIncomingData() { $this->page = $this->registry->input_clean($this->pagevar, TYPE_INT); $this->perpage = $this->registry->input_clean($this->perpagevar, TYPE_INT); $this->pagelinks = $this->registry->clean($this->pagelinks, TYPE_INT); if ($this->page <= 0) { $this->page = 1; } if ($this->perpage <= 0) { $this->perpage = $this->defaultperpage; } if ($this->perpage > $this->maxperpage) { $this->perpage = $this->maxperpage; } $this->perpage = $this->registry->clean($this->perpage, TYPE_INT); } // ################################################################### /** * Takes the variables and splits up the pages * * @access public */ function splitPages() { $this->pagecount = ceil($this->total / $this->perpage); if ($this->pagelinks == 0) { $this->pagelinks = $this->pagecount; } } // ################################################################### /** * Returns the lower limit of the pages * * @access public * * @param integer Page number * * @return integer Lower result limit */ function fetchLimit($page = null) { if ($page === null) { $page = $this->page; } $limit = $page * $this->perpage; if ($page < 1) { $page = 1; $limit = 0; } else if ($page > $this->pagecount) { $page = $this->pagecount - 1; $limit = $this->total; } if ($limit < 0) { return 0; } else if ($limit > $this->total) { return $this->total; } else { return $limit; } } // ################################################################### /** * Constructs the page navigator * * @access public * * @param string Base link path * * @return string Generated HTML page navigator */ function constructPageNav($baselink) { global $bugsys; // handle base link if (strpos($baselink, '?') === false) { $baselink .= '?'; } else if (!preg_match('#\?$#', $baselink) AND !preg_match('#(&|&)$#', $baselink)) { $baselink .= '&'; } // first page number in page nav $startpage = $this->page - $this->pagelinks; if ($startpage < 1) { $startpage = 1; } // last page number in page nav $endpage = $this->page + $this->pagelinks; if ($endpage > $this->pagecount) { $endpage = $this->pagecount; } // prev page in page nav $prevpage = $this->page - 1; if ($prevpage < 1) { $prevpage = 1; } // next page in page nav $nextpage = $this->page + 1; if ($nextpage > $this->pagecount) { $nextpage = $this->pagecount; } // show the prev page $show['prev'] = true; if ($this->page == $startpage) { $show['prev'] = false; } // show the next page $show['next'] = true; if ($this->page == $endpage) { $show['next'] = false; } // show the first page $show['first'] = false; if ($startpage > 1) { $show['first'] = true; } // show the last page $show['last'] = false; if ($endpage < $this->pagecount) { $show['last'] = true; } // construct the page bits $bits = ''; $call = $this->bitprocessor; for ($i = $startpage; $i <= $endpage; $i++) { if ($i == $this->page) { $nolink = true; } else { $nolink = false; } $bits .= $call($baselink, $nolink, $i, $this); } $call = $this->pagenavprocessor; return $call($baselink, $nextpage, $prevpage, $show, $bits, $this); } } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>