diff --git a/framework/yii/data/DataProvider.php b/framework/yii/data/DataProvider.php new file mode 100644 index 0000000..2674bea --- /dev/null +++ b/framework/yii/data/DataProvider.php @@ -0,0 +1,100 @@ + + * @since 2.0 + */ +abstract class DataProvider extends Component implements IDataProvider +{ + private $_sort; + private $_pagination; + + /** + * @return Pagination the pagination object. If this is false, it means the pagination is disabled. + */ + public function getPagination() + { + if ($this->_pagination === null) { + $this->_pagination = new Pagination; + } + return $this->_pagination; + } + + /** + * Sets the pagination for this data provider. + * @param array|Pagination|boolean $value the pagination to be used by this data provider. + * This can be one of the following: + * + * - a configuration array for creating the pagination object. The "class" element defaults + * to 'yii\data\Pagination' + * - an instance of [[Pagination]] or its subclass + * - false, if pagination needs to be disabled. + * + * @throws InvalidParamException + */ + public function setPagination($value) + { + if (is_array($value)) { + $this->_pagination = Yii::createObject(array_merge(array('class' => 'yii\data\Pagination'), $value)); + } elseif ($value instanceof Pagination || $value === false) { + $this->_pagination = $value; + } else { + throw new InvalidParamException('Only Pagination instance, configuration array or false is allowed.'); + } + } + + /** + * @return Sort the sorting object. If this is false, it means the sorting is disabled. + */ + public function getSort() + { + if ($this->_sort === null) { + $this->_sort = new Sort; + } + return $this->_sort; + } + + /** + * Sets the sort definition for this data provider. + * @param array|Sort|boolean $value the sort definition to be used by this data provider. + * This can be one of the following: + * + * - a configuration array for creating the sort definition object. The "class" element defaults + * to 'yii\data\Sort' + * - an instance of [[Sort]] or its subclass + * - false, if sorting needs to be disabled. + * + * @throws InvalidParamException + */ + public function setSort($value) + { + if (is_array($value)) { + $this->_sort = Yii::createObject(array_merge(array('class' => 'yii\data\Sort'), $value)); + } elseif ($value instanceof Sort || $value === false) { + $this->_sort = $value; + } else { + throw new InvalidParamException('Only Sort instance, configuration array or false is allowed.'); + } + } + + /** + * Returns the number of data items in the current page. + * @return integer the number of data items in the current page. + */ + public function getItemCount() + { + return count($this->getItems()); + } +} diff --git a/framework/yii/data/IDataProvider.php b/framework/yii/data/IDataProvider.php new file mode 100644 index 0000000..a881364 --- /dev/null +++ b/framework/yii/data/IDataProvider.php @@ -0,0 +1,59 @@ + + * @since 2.0 + */ +interface IDataProvider +{ + /** + * Returns the number of data items in the current page. + * This is equivalent to `count($provider->getItems())`. + * When [[pagination]] is false, this is the same as [[totalItemCount]]. + * @return integer the number of data items in the current page. + */ + public function getItemCount(); + + /** + * Returns the total number of data items. + * When [[pagination]] is false, this is the same as [[itemCount]]. + * @return integer total number of possible data items. + */ + public function getTotalItemCount(); + + /** + * Returns the data items in the current page. + * @return array the list of data items in the current page. + */ + public function getItems(); + + /** + * Returns the key values associated with the data items. + * @return array the list of key values corresponding to [[items]]. Each data item in [[items]] + * is uniquely identified by the corresponding key value in this array. + */ + public function getKeys(); + + /** + * @return Sort the sorting object. If this is false, it means the sorting is disabled. + */ + public function getSort(); + + /** + * @return Pagination the pagination object. If this is false, it means the pagination is disabled. + */ + public function getPagination(); +} diff --git a/framework/yii/data/Pagination.php b/framework/yii/data/Pagination.php index 4e25809..18cfff8 100644 --- a/framework/yii/data/Pagination.php +++ b/framework/yii/data/Pagination.php @@ -104,18 +104,8 @@ class Pagination extends Object /** * @var integer total number of items. */ - public $itemCount; + public $itemCount = 0; - /** - * Constructor. - * @param integer $itemCount total number of items. - * @param array $config name-value pairs that will be used to initialize the object properties - */ - public function __construct($itemCount, $config = array()) - { - $this->itemCount = $itemCount; - parent::__construct($config); - } /** * @return integer number of pages