HTMLPurifier 4.4.0
/home/ezyang/Dev/htmlpurifier/library/HTMLPurifier/URIDefinition.php
Go to the documentation of this file.
00001 <?php
00002 
00003 class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
00004 {
00005 
00006     public $type = 'URI';
00007     protected $filters = array();
00008     protected $postFilters = array();
00009     protected $registeredFilters = array();
00010 
00014     public $base;
00015 
00019     public $host;
00020 
00024     public $defaultScheme;
00025 
00026     public function __construct() {
00027         $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal());
00028         $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources());
00029         $this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist());
00030         $this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe());
00031         $this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute());
00032         $this->registerFilter(new HTMLPurifier_URIFilter_Munge());
00033     }
00034 
00035     public function registerFilter($filter) {
00036         $this->registeredFilters[$filter->name] = $filter;
00037     }
00038 
00039     public function addFilter($filter, $config) {
00040         $r = $filter->prepare($config);
00041         if ($r === false) return; // null is ok, for backwards compat
00042         if ($filter->post) {
00043             $this->postFilters[$filter->name] = $filter;
00044         } else {
00045             $this->filters[$filter->name] = $filter;
00046         }
00047     }
00048 
00049     protected function doSetup($config) {
00050         $this->setupMemberVariables($config);
00051         $this->setupFilters($config);
00052     }
00053 
00054     protected function setupFilters($config) {
00055         foreach ($this->registeredFilters as $name => $filter) {
00056             if ($filter->always_load) {
00057                 $this->addFilter($filter, $config);
00058             } else {
00059                 $conf = $config->get('URI.' . $name);
00060                 if ($conf !== false && $conf !== null) {
00061                     $this->addFilter($filter, $config);
00062                 }
00063             }
00064         }
00065         unset($this->registeredFilters);
00066     }
00067 
00068     protected function setupMemberVariables($config) {
00069         $this->host = $config->get('URI.Host');
00070         $base_uri = $config->get('URI.Base');
00071         if (!is_null($base_uri)) {
00072             $parser = new HTMLPurifier_URIParser();
00073             $this->base = $parser->parse($base_uri);
00074             $this->defaultScheme = $this->base->scheme;
00075             if (is_null($this->host)) $this->host = $this->base->host;
00076         }
00077         if (is_null($this->defaultScheme)) $this->defaultScheme = $config->get('URI.DefaultScheme');
00078     }
00079 
00080     public function getDefaultScheme($config, $context) {
00081         return HTMLPurifier_URISchemeRegistry::instance()->getScheme($this->defaultScheme, $config, $context);
00082     }
00083 
00084     public function filter(&$uri, $config, $context) {
00085         foreach ($this->filters as $name => $f) {
00086             $result = $f->filter($uri, $config, $context);
00087             if (!$result) return false;
00088         }
00089         return true;
00090     }
00091 
00092     public function postFilter(&$uri, $config, $context) {
00093         foreach ($this->postFilters as $name => $f) {
00094             $result = $f->filter($uri, $config, $context);
00095             if (!$result) return false;
00096         }
00097         return true;
00098     }
00099 
00100 }
00101 
00102 // vim: et sw=4 sts=4