File indexing completed on 2024-12-22 05:36:24

0001 <?php
0002 /**
0003  *  ocs-webserver
0004  *
0005  *  Copyright 2016 by pling GmbH.
0006  *
0007  *    This file is part of ocs-webserver.
0008  *
0009  *    This program is free software: you can redistribute it and/or modify
0010  *    it under the terms of the GNU Affero General Public License as
0011  *    published by the Free Software Foundation, either version 3 of the
0012  *    License, or (at your option) any later version.
0013  *
0014  *    This program is distributed in the hope that it will be useful,
0015  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017  *    GNU Affero General Public License for more details.
0018  *
0019  *    You should have received a copy of the GNU Affero General Public License
0020  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021  **/
0022 
0023 class Local_Paginator extends Zend_Paginator
0024 {
0025     /** @var  integer */
0026     protected $totalItemCount;
0027 
0028     /**
0029      * Returns the total number of items available.
0030      *
0031      * @return integer
0032      */
0033     public function getTotalItemCount()
0034     {
0035         return $this->totalItemCount;
0036     }
0037 
0038     public function setTotalItemCount($count)
0039     {
0040         $this->totalItemCount = (integer)$count;
0041         $this->_pageCount     = $this->_calculatePageCount();
0042         return $this;
0043     }
0044 
0045     /**
0046      * Returns the items for the current page.
0047      *
0048      * @return Traversable
0049      */
0050     public function getCurrentItems()
0051     {
0052         if ($this->_currentItems === null) {
0053             $this->_currentItems = $this->getItems();
0054         }
0055 
0056         return $this->_currentItems;
0057     }
0058 
0059     /**
0060      * Returns the items for a given page.
0061      *
0062      * @return Traversable
0063      */
0064     public function getItems()
0065     {
0066 
0067         $items = $this->_adapter->getItems(0, $this->getItemCountPerPage());
0068 
0069         $filter = $this->getFilter();
0070 
0071         if ($filter !== null) {
0072             $items = $filter->filter($items);
0073         }
0074 
0075         if (!$items instanceof Traversable) {
0076             $items = new ArrayIterator($items);
0077         }
0078 
0079         return $items;
0080     }
0081 
0082     /**
0083      * Factory.
0084      *
0085      * @param  mixed $data
0086      * @param string $adapter
0087      * @param  array $prefixPaths
0088      * @return Local_Paginator
0089      * @throws Zend_Loader_PluginLoader_Exception
0090      * @throws Zend_Paginator_Exception
0091      */
0092     public static function factory($data, $adapter = self::INTERNAL_ADAPTER,
0093         array $prefixPaths = null)
0094     {
0095         if ($data instanceof Zend_Paginator_AdapterAggregate) {
0096             return new self($data->getPaginatorAdapter());
0097         } else {
0098             if ($adapter == self::INTERNAL_ADAPTER) {
0099                 if (is_array($data)) {
0100                     $adapter = 'Array';
0101                 } else if ($data instanceof Zend_Db_Table_Select) {
0102                     $adapter = 'DbTableSelect';
0103                 } else if ($data instanceof Zend_Db_Select) {
0104                     $adapter = 'DbSelect';
0105                 } else if ($data instanceof Iterator) {
0106                     $adapter = 'Iterator';
0107                 } else if (is_integer($data)) {
0108                     $adapter = 'Null';
0109                 } else {
0110                     $type = (is_object($data)) ? get_class($data) : gettype($data);
0111 
0112                     /**
0113                      * @see Zend_Paginator_Exception
0114                      */
0115                     // require_once 'Zend/Paginator/Exception.php';
0116 
0117                     throw new Zend_Paginator_Exception('No adapter for type ' . $type);
0118                 }
0119             }
0120 
0121             $pluginLoader = self::getAdapterLoader();
0122 
0123             if (null !== $prefixPaths) {
0124                 foreach ($prefixPaths as $prefix => $path) {
0125                     $pluginLoader->addPrefixPath($prefix, $path);
0126                 }
0127             }
0128 
0129             $adapterClassName = $pluginLoader->load($adapter);
0130 
0131             return new self(new $adapterClassName($data));
0132         }
0133     }
0134 
0135 }