. */ Doctrine::autoload('Doctrine_Pager_Range'); /** * Doctrine_Pager_Range_Sliding * * @author Guilherme Blanco * @package Doctrine * @subpackage Pager * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @version $Revision$ * @link www.phpdoctrine.com * @since 1.0 */ class Doctrine_Pager_Range_Sliding extends Doctrine_Pager_Range { /** * @var int $_chunkLength Chunk length to be returned */ private $_chunkLength; /** * _initialize * * Initialize Doctrine_Pager_Range_Sliding and does custom assignments * * @return void */ protected function _initialize() { if (isset($this->options['chunk'])) { $this->_setChunkLength($this->options['chunk']); } else { throw new Doctrine_Pager_Exception('Missing parameter \'chunk\' that must be defined in options.'); } } /** * getChunkLength * * Returns the size of the chunk defined * * @return int Chunk length */ public function getChunkLength() { return $this->_chunkLength; } /** * _setChunkLength * * Defines the size of the chunk * * @param $chunkLength Chunk length * @return void */ protected function _setChunkLength($chunkLength) { $this->_chunkLength = $chunkLength; } /** * rangeAroundPage * * Calculate and returns an array representing the range around the current page * * @return array */ public function rangeAroundPage() { $pager = $this->getPager(); $page = $pager->getPage(); // Define initial assignments for StartPage and EndPage $startPage = $page - floor($this->getChunkLength() - 1) / 2; $endPage = ($startPage + $this->getChunkLength()) - 1; // Check for EndPage out-range if ($endPage > $pager->getLastPage()) { $offset = $endPage - $pager->getLastPage(); $endPage = $pager->getLastPage(); $startPage = $startPage - $offset; } // Check for StartPage out-range if ($startPage < $pager->getFirstPage()) { $startPage = $pager->getFirstPage(); } return range($startPage, $endPage); } }