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 
00040     public function setSeparator( $sSeparator )
00041     {
00042         $this->_sSeparator = $sSeparator;
00043     }
00044 
00050     public function getSeparator()
00051     {
00052         return $this->_sSeparator;
00053     }
00054 
00063     public function set( $sTags, $blPrepare = true )
00064     {
00065         $this->clear();
00066         $this->add( $sTags, $blPrepare );
00067     }
00068 
00074     public function get()
00075     {
00076         return $this->_aTags;
00077     }
00078 
00084     public function getInvalidTags()
00085     {
00086         return $this->_aInvalidTags;
00087     }
00088 
00097     public function add( $sTags, $blPrepare = true )
00098     {
00099         $aTags = explode( $this->getSeparator(), $sTags );
00100         foreach ( $aTags as $sTag ) {
00101             $this->addTag( $sTag, $blPrepare );
00102         }
00103     }
00104 
00113     public function addTag( $mTag, $blPrepare = true )
00114     {
00115         $oTag = $this->_formTag( $mTag, $blPrepare );
00116         $sTagName = $oTag->get();
00117         if ( !$oTag->isValid() ) {
00118             if ( $sTagName !== "" ) {
00119                 $this->_aInvalidTags[$sTagName] = $oTag;
00120             }
00121             return false;
00122         }
00123         if ( $this->_aTags[$sTagName] === null ) {
00124             $this->_aTags[$sTagName] = $oTag;
00125         } else {
00126             $this->_aTags[$sTagName]->increaseHitCount();
00127         }
00128         return true;
00129     }
00130 
00136     public function clear()
00137     {
00138         $this->_aTags = array();
00139     }
00140 
00146     public function formString()
00147     {
00148         $aTags = array();
00149         foreach ($this->get() as $oTag) {
00150             $aTags = array_merge($aTags, array_fill(0, $oTag->getHitCount(), $oTag->get() ) );
00151         }
00152         return implode($this->getSeparator(), $aTags );
00153     }
00154 
00160     public function __toString()
00161     {
00162         return $this->formString();
00163     }
00164 
00173     public function slice( $offset, $length )
00174     {
00175         $this->_aTags = array_slice( $this->get(), $offset, $length, true );
00176         return $this->_aTags;
00177     }
00178 
00184     public function sort()
00185     {
00186         $oStr = getStr();
00187         uksort( $this->_aTags, array($oStr, 'strrcmp') );
00188     }
00189 
00195     public function sortByHitCount()
00196     {
00197         uasort( $this->_aTags, array($this, '_tagHitsCmp') );
00198     }
00199 
00205     public function current()
00206     {
00207         return current( $this->_aTags );
00208     }
00209 
00215     public function next()
00216     {
00217         next( $this->_aTags );
00218     }
00219 
00225     public function key()
00226     {
00227         return key( $this->_aTags );
00228     }
00229 
00235     public function valid()
00236     {
00237         return isset( $this->_aTags[ $this->key() ] );
00238     }
00239 
00245     public function rewind()
00246     {
00247         reset( $this->_aTags );
00248     }
00249 
00258     protected function _formTag( $mTag, $blPrepare = true )
00259     {
00260         if ( $mTag instanceof oxTag ) {
00261             $oTag = $mTag;
00262         } else {
00263             $oTag = oxNew( "oxTag" );
00264             $oTag->set( $mTag, $blPrepare );
00265         }
00266         return $oTag;
00267     }
00268 
00277     protected function _tagHitsCmp( $oTag1, $oTag2 )
00278     {
00279         return $oTag2->getHitCount() - $oTag1->getHitCount();
00280     }
00281 }