Blame | Last modification | View Log | Download
<?php namespace ProcessWire;/*** ProcessWire HTML Purifier module** Serves as a front-end to the HTML Purifier software:* http://htmlpurifier.org** USAGE:** $purifier = $modules->get('MarkupHTMLPurifier');* $cleanHTML = $purifier->purify($dirtyHTML);** To specify custom settings to HTML Purifier, perform set()* calls before calling purify(). For example, UTF-8 encoding* is assumed, so if you wanted ISO-8859-1 instead, you'd do:** $purifier->set('Core.Encoding', 'ISO-8859-1');** For a full list of HTML Purifier config options, see:* http://htmlpurifier.org/live/configdoc/plain.html** HTML Purifier by: http://htmlpurifier.org* ProcessWire module by Ryan Cramer**/class MarkupHTMLPurifier extends WireData implements Module {public static function getModuleInfo() {return array('title' => 'HTML Purifier','summary' => 'Front-end to the HTML Purifier library.','version' => 495,'singular' => false,'autoload' => false,);}/*** HTML Purifier settings**/protected $settings = null;/*** Cached instance of HTMLPurifier**/protected $purifier = null;/*** Generate HTML Purifier settings object**/public function __construct() {require_once(dirname(__FILE__) . '/htmlpurifier/HTMLPurifier.standalone.php');$this->settings = \HTMLPurifier_Config::createDefault();$this->settings->autoFinalize = false;}/*** Initialize the module and create default settings**/public function init() {$this->settings->set('Cache.SerializerPath', $this->getCachePath());$this->settings->set('Attr.AllowedRel', array('nofollow'));$this->settings->set('HTML.DefinitionID', 'html5-definitions');$this->settings->set('HTML.DefinitionRev', 1);if($def = $this->settings->maybeGetRawHTMLDefinition()) {$def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common');$def->addElement('figcaption', 'Inline', 'Flow', 'Common');}}/*** Return the cache path used by HTML Purifier**/protected function getCachePath() {$cachePath = $this->wire('config')->paths->cache . $this->className() . '/';if(!is_dir($cachePath)) $this->wire('files')->mkdir($cachePath);return $cachePath;}/*** Return the current settings** @return \HTMLPurifier_Config**/public function getConfig() {return $this->settings;}/*** Get the HTMLPurifier instance** @return \HTMLPurifier**/public function getPurifier() {if(is_null($this->purifier)) $this->purifier = new \HTMLPurifier($this->settings);return $this->purifier;}/*** Purify the given dirty HTML and return the clean HTML** @param string Dirty HTML* @return string Clean HTML**/public function purify($html) {// purify$html = $this->getPurifier()->purify($html);return $html;}/*** Set an HTMLPurifier config option** See configuration options at: http://htmlpurifier.org/live/configdoc/plain.html** @param string $key* @param string $value* @return WireData|MarkupHTMLPurifier**/public function set($key, $value) {if(strpos($key, '.')) {// HTML Purifier setting: http://htmlpurifier.org/live/configdoc/plain.html$this->purifier = null;$this->settings->set($key, $value);return $this;}// some other settingreturn parent::set($key, $value);}/*** Get an HTMLPurifier config option** @param string $key* @return string|null**/public function get($key) {if(strpos($key, '.')) return $this->settings->get($key);return parent::get($key);}/*** Uninstall by removing the cache path and files**/public function ___uninstall() {$cachePath = $this->getCachePath();wireRmdir($cachePath, true);$this->message("Removed: $cachePath");}}