/** * TODO optimize that one ! * @param Berthe_AbstractVO $vo * @param Fetcher $paginator * @param int $nbBefore * @param int $nbAfter * @param bool $loop * @return array array[voBefore[], voAfter[]] BEFORE / AFTER */ public function getNextAndPreviousByPaginator(Berthe_AbstractVO $vo, Fetcher $paginator, $nbBefore = 1, $nbAfter = 1, $loop = false) { $page = $paginator->getPage(); $nbByPage = $paginator->getNbByPage(); $paginator->setPage(-1); $paginator->setNbByPage(-1); $ids = $this->_reader->selectByPaginator($paginator); $paginator->setPage($page); $paginator->setNbByPage($nbByPage); $_keys = array_keys($ids, $vo->id); $position = reset($_keys); $beforeIds = $this->_fetchPrevious($position, $ids, $nbBefore, $loop); $afterIds = $this->_fetchNext($position, $ids, $nbAfter, $loop); return $this->_fetchNextAndPrevious($beforeIds, $afterIds); }