. */ /** * Doctrine_Pager_Range * * @author Guilherme Blanco * @package Doctrine * @subpackage Pager * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @version $Revision$ * @link www.phpdoctrine.org * @since 0.9 */ abstract class Doctrine_Pager_Range { /** * @var array $_options Custom Doctrine_Pager_Range implementation options */ protected $_options; /** * @var Doctrine_Pager $pager Doctrine_Pager object related to the pager range */ private $pager; /** * __construct * * @param array $options Custom subclass implementation options. * Default is a blank array * @param Doctrine_Pager $pager Optional Doctrine_Pager object to be associated * @return void */ final public function __construct($options = array(), $pager = null) { $this->_setOptions($options); if ($pager !== null) { $this->setPager($pager); } } /** * getPager * * Returns the Doctrine_Pager object related to the pager range * * @return Doctrine_Pager Doctrine_Pager object related to the pager range */ public function getPager() { return $this->pager; } /** * setPager * * Defines the Doctrine_Pager object related to the pager range and * automatically (re-)initialize Doctrine_Pager_Range * * @param $pager Doctrine_Pager object related to the pager range * @return void */ public function setPager($pager) { $this->pager = $pager; // Lazy-load initialization. It only should be called when all // needed information data is ready (this can only happens when we have // options stored and a Doctrine_Pager assocated) $this->_initialize(); } /** * getOptions * * Returns the custom Doctrine_Pager_Range implementation options * * @return array Custom Doctrine_Pager_Range implementation options */ public function getOptions() { return $this->_options; } /** * getOption * * Returns the custom Doctrine_Pager_Range implementation offset option * * @return array Custom Doctrine_Pager_Range implementation options */ public function getOption($option) { if (isset($this->_options[$option])) { return $this->_options[$option]; } throw new Doctrine_Pager_Exception( 'Cannot access unexistent option \'' . $option . '\' in Doctrine_Pager_Range class' ); } /** * _setOptions * * Defines the subclass implementation options * * @param $options Custom Doctrine_Pager_Range implementation options * @return void */ protected function _setOptions($options) { $this->_options = $options; } /** * isInRange * * Check if a given page is in the range * * @param $page Page to be checked * @return boolean */ public function isInRange($page) { return (array_search($page, $this->rangeAroundPage()) !== false); } /** * _initialize * * Initialize Doctrine_Page_Range subclass which does custom class definitions * * @return void */ abstract protected function _initialize(); /** * rangeAroundPage * * Calculate and returns an array representing the range around the current page * * @return array */ abstract public function rangeAroundPage(); }