oxtagset.php

Go to the documentation of this file.
00001 <?php
00002 
00003 
00009 class oxTagSet extends oxSuperCfg implements Iterator
00010 {
00011 
00017     protected $_sSeparator = ',';
00018 
00024     protected $_aTags = array();
00025 
00031     protected $_aInvalidTags = array();
00032 
00038     public function setSeparator($sSeparator)
00039     {
00040         $this->_sSeparator = $sSeparator;
00041     }
00042 
00048     public function getSeparator()
00049     {
00050         return $this->_sSeparator;
00051     }
00052 
00059     public function set($sTags, $blPrepare = true)
00060     {
00061         $this->clear();
00062         $this->add($sTags, $blPrepare);
00063     }
00064 
00070     public function get()
00071     {
00072         return $this->_aTags;
00073     }
00074 
00080     public function getInvalidTags()
00081     {
00082         return $this->_aInvalidTags;
00083     }
00084 
00091     public function add($sTags, $blPrepare = true)
00092     {
00093         $aTags = explode($this->getSeparator(), $sTags);
00094         foreach ($aTags as $sTag) {
00095             $this->addTag($sTag, $blPrepare);
00096         }
00097     }
00098 
00107     public function addTag($mTag, $blPrepare = true)
00108     {
00109         $oTag = $this->_formTag($mTag, $blPrepare);
00110         $sTagName = $oTag->get();
00111         if (!$oTag->isValid()) {
00112             if ($sTagName !== "") {
00113                 $this->_aInvalidTags[$sTagName] = $oTag;
00114             }
00115 
00116             return false;
00117         }
00118         if ($this->_aTags[$sTagName] === null) {
00119             $this->_aTags[$sTagName] = $oTag;
00120         } else {
00121             $this->_aTags[$sTagName]->increaseHitCount();
00122         }
00123 
00124         return true;
00125     }
00126 
00130     public function clear()
00131     {
00132         $this->_aTags = array();
00133     }
00134 
00140     public function formString()
00141     {
00142         $aTags = array();
00143         foreach ($this->get() as $oTag) {
00144             $aTags = array_merge($aTags, array_fill(0, $oTag->getHitCount(), $oTag->get()));
00145         }
00146 
00147         return implode($this->getSeparator(), $aTags);
00148     }
00149 
00155     public function __toString()
00156     {
00157         return $this->formString();
00158     }
00159 
00168     public function slice($offset, $length)
00169     {
00170         $this->_aTags = array_slice($this->get(), $offset, $length, true);
00171 
00172         return $this->_aTags;
00173     }
00174 
00178     public function sort()
00179     {
00180         $oStr = getStr();
00181         uksort($this->_aTags, array($oStr, 'strrcmp'));
00182     }
00183 
00187     public function sortByHitCount()
00188     {
00189         uasort($this->_aTags, array($this, '_tagHitsCmp'));
00190     }
00191 
00197     public function current()
00198     {
00199         return current($this->_aTags);
00200     }
00201 
00205     public function next()
00206     {
00207         next($this->_aTags);
00208     }
00209 
00215     public function key()
00216     {
00217         return key($this->_aTags);
00218     }
00219 
00225     public function valid()
00226     {
00227         return isset($this->_aTags[$this->key()]);
00228     }
00229 
00233     public function rewind()
00234     {
00235         reset($this->_aTags);
00236     }
00237 
00246     protected function _formTag($mTag, $blPrepare = true)
00247     {
00248         if ($mTag instanceof oxTag) {
00249             $oTag = $mTag;
00250         } else {
00251             $oTag = oxNew("oxTag");
00252             $oTag->set($mTag, $blPrepare);
00253         }
00254 
00255         return $oTag;
00256     }
00257 
00266     protected function _tagHitsCmp($oTag1, $oTag2)
00267     {
00268         return $oTag2->getHitCount() - $oTag1->getHitCount();
00269     }
00270 }