File indexing completed on 2024-12-22 05:37:13

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_View
0017  * @subpackage Helper
0018  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0019  * @version    $Id$
0020  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0021  */
0022 
0023 /**
0024  * Helper for alternating between set of values
0025  *
0026  * @package    Zend_View
0027  * @subpackage Helper
0028  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0029  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0030  */
0031 class Zend_View_Helper_Cycle implements Iterator
0032 {
0033 
0034     /**
0035      * Default name
0036      * @var string
0037      */
0038     const DEFAULT_NAME = 'default';
0039 
0040     /**
0041      * Pointers
0042      *
0043      * @var array
0044      */
0045     protected $_pointers = array(self::DEFAULT_NAME =>-1) ;
0046 
0047     /**
0048      * Array of values
0049      *
0050      * @var array
0051      */
0052     protected $_data = array(self::DEFAULT_NAME=>array());
0053 
0054     /**
0055      * Actual name of cycle
0056      *
0057      * @var string
0058      */
0059     protected $_name = self::DEFAULT_NAME;
0060 
0061     /**
0062      * Add elements to alternate
0063      *
0064      * @param array $data
0065      * @param string $name
0066      * @return Zend_View_Helper_Cycle
0067      */
0068     public function cycle(array $data = array(), $name = self::DEFAULT_NAME)
0069     {
0070         if(!empty($data))
0071            $this->_data[$name] = $data;
0072 
0073         $this->setName($name);
0074         return $this;
0075     }
0076 
0077     /**
0078      * Add elements to alternate
0079      *
0080      * @param array $data
0081      * @param string $name
0082      * @return Zend_View_Helper_Cycle
0083      */
0084     public function assign(Array $data , $name = self::DEFAULT_NAME)
0085     {
0086         $this->setName($name);
0087         $this->_data[$name] = $data;
0088         $this->rewind();
0089         return $this;
0090     }
0091 
0092     /**
0093      * Sets actual name of cycle
0094      *
0095      * @param string $name
0096      * @return Zend_View_Helper_Cycle
0097      */
0098     public function setName($name = self::DEFAULT_NAME)
0099     {
0100        $this->_name = $name;
0101 
0102        if(!isset($this->_data[$this->_name]))
0103          $this->_data[$this->_name] = array();
0104 
0105        if(!isset($this->_pointers[$this->_name]))
0106          $this->rewind();
0107 
0108        return $this;
0109     }
0110 
0111     /**
0112      * Gets actual name of cycle
0113      *
0114      * @return string
0115      */
0116     public function getName()
0117     {
0118         return $this->_name;
0119     }
0120 
0121 
0122     /**
0123      * Return all elements
0124      *
0125      * @return array
0126      */
0127     public function getAll()
0128     {
0129         return $this->_data[$this->_name];
0130     }
0131 
0132     /**
0133      * Turn helper into string
0134      *
0135      * @return string
0136      */
0137     public function toString()
0138     {
0139         return (string) $this->_data[$this->_name][$this->key()];
0140     }
0141 
0142     /**
0143      * Cast to string
0144      *
0145      * @return string
0146      */
0147     public function __toString()
0148     {
0149         return $this->toString();
0150     }
0151 
0152     /**
0153      * Move to next value
0154      *
0155      * @return Zend_View_Helper_Cycle
0156      */
0157     public function next()
0158     {
0159         $count = count($this->_data[$this->_name]);
0160         if ($this->_pointers[$this->_name] == ($count - 1))
0161             $this->_pointers[$this->_name] = 0;
0162         else
0163             $this->_pointers[$this->_name] = ++$this->_pointers[$this->_name];
0164         return $this;
0165     }
0166 
0167     /**
0168      * Move to previous value
0169      *
0170      * @return Zend_View_Helper_Cycle
0171      */
0172     public function prev()
0173     {
0174         $count = count($this->_data[$this->_name]);
0175         if ($this->_pointers[$this->_name] <= 0)
0176             $this->_pointers[$this->_name] = $count - 1;
0177         else
0178             $this->_pointers[$this->_name] = --$this->_pointers[$this->_name];
0179         return $this;
0180     }
0181 
0182     /**
0183      * Return iteration number
0184      *
0185      * @return int
0186      */
0187     public function key()
0188     {
0189         if ($this->_pointers[$this->_name] < 0)
0190             return 0;
0191         else
0192             return $this->_pointers[$this->_name];
0193     }
0194 
0195     /**
0196      * Rewind pointer
0197      *
0198      * @return Zend_View_Helper_Cycle
0199      */
0200     public function rewind()
0201     {
0202         $this->_pointers[$this->_name] = -1;
0203         return $this;
0204     }
0205 
0206     /**
0207      * Check if element is valid
0208      *
0209      * @return bool
0210      */
0211     public function valid()
0212     {
0213         return isset($this->_data[$this->_name][$this->key()]);
0214     }
0215 
0216     /**
0217      * Return  current element
0218      *
0219      * @return mixed
0220      */
0221     public function current()
0222     {
0223         return $this->_data[$this->_name][$this->key()];
0224     }
0225 }