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 }