BxDolHTMLPurifierFilterAddBxLinksClass.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <?php
  2. class BxDolHTMLPurifierFilterAddBxLinksClass extends HTMLPurifier_Filter
  3. {
  4. public $name = 'AddBxLinksClass';
  5. protected $class = BX_DOL_LINK_CLASS;
  6. public function preFilter($sHtml, $config, $context)
  7. {
  8. if (false === strstr($sHtml, '<a '))
  9. return $sHtml;
  10. $sId = 'bx-links-' . md5(microtime());
  11. $dom = new DOMDocument();
  12. @$dom->loadHTML('<?xml encoding="UTF-8"><div id="' . $sId . '">' . $sHtml . '</div>');
  13. $xpath = new DOMXpath($dom);
  14. $oLinks = $xpath->evaluate('//a');
  15. for ($i = 0; $i < $oLinks->length; $i++) {
  16. $oLink = $oLinks->item($i);
  17. $sClasses = $oLink->getAttribute('class');
  18. if (!$sClasses || false === strpos($sClasses, $this->class))
  19. $sClasses = ($sClasses ? $sClasses . ' ' : '') . $this->class;
  20. $oLink->removeAttribute('class');
  21. $oLink->setAttribute("class", $sClasses);
  22. }
  23. if (false === ($s = $dom->saveXML($dom->getElementById($sId)))) // in case of error return original string
  24. return $sHtml;
  25. return mb_substr($s, 52, -6); // strip added tags
  26. }
  27. }