OXID eShop CE  4.9.7
 All Classes Files Functions Variables Pages
oxtag.php
Go to the documentation of this file.
1 <?php
2 
3 if (!defined('OXTAGCLOUD_MINTAGLENGTH')) {
4  define('OXTAGCLOUD_MINTAGLENGTH', 4);
5 }
10 class oxTag extends oxSuperCfg
11 {
12 
18  protected $_sTag = '';
19 
23  protected $_aForbiddenTags = array(
24  'admin', 'application', 'core', 'export', 'modules', 'out', 'setup', 'tmp'
25  );
26 
32  protected $_sTagLink = null;
33 
40  protected $_iTagMaxLength = 60;
41 
47  protected $_iHitCount = 1;
48 
55  protected $_aMetaChars = array('+', '-', '>', '<', '(', ')', '~', '*', '"', '\'', '\\', '[', ']', '{', '}', ';', ':', '.', '/', '|', '!', '@', '#', '$', '%', '^', '&', '?', '=', '`');
56 
62  public function __construct($sTag = null)
63  {
65  if ($sTag !== null) {
66  $this->set($sTag);
67  }
68  }
69 
75  public function setMaxLength($iTagMaxLength)
76  {
77  $this->_iTagMaxLength = $iTagMaxLength;
78  }
79 
85  public function getMaxLength()
86  {
87  return $this->_iTagMaxLength;
88  }
89 
96  public function set($sTag, $blPrepare = true)
97  {
98  $this->_sTag = $blPrepare ? $this->prepare($sTag) : $sTag;
99  $this->setLink();
100  }
101 
107  public function get()
108  {
109  return $this->_sTag;
110  }
111 
117  public function setHitCount($iHitCount)
118  {
119  $this->_iHitCount = $iHitCount;
120  }
121 
127  public function getHitCount()
128  {
129  return $this->_iHitCount;
130  }
131 
135  public function increaseHitCount()
136  {
137  $this->_iHitCount++;
138  }
139 
145  public function isValid()
146  {
147  $blValid = strlen($this->_sTag) > 0 ? true : false;
148  if ($blValid && in_array($this->_sTag, $this->_aForbiddenTags)) {
149  $blValid = false;
150  }
151 
152  return $blValid;
153  }
154 
160  public function getLink()
161  {
162  if (is_null($this->_sTagLink)) {
163  $this->_sTagLink = $this->formLink($this->get());
164  }
165 
166  return $this->_sTagLink;
167  }
168 
174  public function setLink($sTagLink = null)
175  {
176  $this->_sTagLink = $sTagLink;
177  }
178 
184  public function getTitle()
185  {
186  return getStr()->htmlentities($this->get());
187  }
188 
194  public function __toString()
195  {
196  return $this->get();
197  }
198 
207  public function prepare($sTag)
208  {
209  $sTag = $this->stripMetaChars($sTag);
210  $oStr = getStr();
211  $iLen = $oStr->strlen($sTag);
212  if ($iLen > $this->getMaxLength()) {
213  $sTag = trim($oStr->substr($sTag, 0, $this->getMaxLength()));
214  }
215 
216  return $oStr->strtolower($sTag);
217  }
218 
226  public function stripMetaChars($sText)
227  {
228  $oStr = getStr();
229 
230  // Remove meta chars
231  $sText = str_replace($this->_aMetaChars, ' ', $sText);
232 
233  // Replace multiple spaces with single space
234  $sText = $oStr->preg_replace("/\s+/", " ", trim($sText));
235 
236  return $sText;
237  }
238 
246  public function formLink($sTag)
247  {
248  $oSeoEncoderTag = oxRegistry::get("oxSeoEncoderTag");
249 
250  $iLang = oxRegistry::getLang()->getBaseLanguage();
251 
252  $sUrl = false;
253  if (oxRegistry::getUtils()->seoIsActive()) {
254  $sUrl = $oSeoEncoderTag->getTagUrl($sTag, $iLang);
255  }
256 
257  return $sUrl ? $sUrl : $this->getConfig()->getShopUrl() . $oSeoEncoderTag->getStdTagUri($sTag) . "&amp;lang=" . $iLang;
258  }
259 
263  public function addUnderscores()
264  {
265  $oStr = getStr();
266  $aTagParts = explode(' ', $this->get());
267  foreach ($aTagParts as &$sTagPart) {
268  if ($oStr->strlen($sTagPart) < OXTAGCLOUD_MINTAGLENGTH) {
269  $sTagPart .= str_repeat("_", OXTAGCLOUD_MINTAGLENGTH - $oStr->strlen($sTagPart));
270  }
271  }
272  unset($sTagPart);
273  $this->set(implode(' ', $aTagParts), false);
274  }
275 
276 
280  public function removeUnderscores()
281  {
282  $oStr = getStr();
283  $sRes = '';
284  if ($oStr->preg_match_all("/([\s\-]?)([^\s\-]+)([\s\-]?)/", $this->get(), $aMatches)) {
285  foreach ($aMatches[2] as $iKey => $sMatch) {
286  if ($oStr->strlen($sMatch) <= OXTAGCLOUD_MINTAGLENGTH) {
287  $sMatch = rtrim($sMatch, "_");
288  }
289  $sRes .= $aMatches[1][$iKey] . $sMatch . $aMatches[3][$iKey];
290  }
291  }
292  $this->set($sRes, false);
293  }
294 }