/** * Returns an array of "local" pages given a page number and range. * * @param Paginator $paginator * @param integer $pageRange (Optional) Page range * @return array */ public function getPages(Paginator $paginator, $pageRange = null) { if ($pageRange === null) { $pageRange = $paginator->getPageRange(); } $pageNumber = $paginator->getCurrentPageNumber(); $pageCount = count($paginator); if ($pageRange > $pageCount) { $pageRange = $pageCount; } $delta = ceil($pageRange / 2); if ($pageNumber - $delta > $pageCount - $pageRange) { $lowerBound = $pageCount - $pageRange + 1; $upperBound = $pageCount; } else { if ($pageNumber - $delta < 0) { $delta = $pageNumber; } $offset = $pageNumber - $delta; $lowerBound = $offset + 1; $upperBound = $offset + $pageRange; } return $paginator->getPagesInRange($lowerBound, $upperBound); }
/** * @param Cond $cond * * @throws \Model\Exception\ErrorException * @return array|mixed|string */ public function fetchAll(Cond $cond = null) { $entity = $cond->getEntityName(); $entity = $entity ? $entity : $this->getRawName(); $prepareCallbackFunction = 'prepareCollection'; $pager = null; try { $select = $this->prepareSelect($cond, $entity); if ($cond->checkCond(Cond::SHOW_QUERY) || $cond->checkCond(Cond::SHOW_QUERY_EXTENDED)) { echo '<!--' . $select . "-->\n"; } if ($cond->getCond('return_query')) { return (string) $select; } else { $items = $select->query()->fetchAll(); } if ($cond->checkCond(Cond::PAGE)) { $pager = new Paginator(new ArraySet($items)); $pager->setCurrentPageNumber($cond->getCond('page')); $pager->setItemCountPerPage($cond->getCond('items_per_page')); $pager->setTotalItemCount($this->fetchCount($cond)); } } catch (\Exception $e) { $items = array(); } if ($cond->checkCond(Cond::WITHOUT_PREPARE)) { return $items; } else { return call_user_func(array($this, $prepareCallbackFunction), $items, $cond, $pager); } }