Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
class HTMLPurifier_URIDefinition extends HTMLPurifier_Definition
4
{
5
 
6
    public $type = 'URI';
7
    protected $filters = array();
8
    protected $postFilters = array();
9
    protected $registeredFilters = array();
10
 
11
    /**
12
     * HTMLPurifier_URI object of the base specified at %URI.Base
13
     */
14
    public $base;
15
 
16
    /**
17
     * String host to consider "home" base, derived off of $base
18
     */
19
    public $host;
20
 
21
    /**
22
     * Name of default scheme based on %URI.DefaultScheme and %URI.Base
23
     */
24
    public $defaultScheme;
25
 
26
    public function __construct()
27
    {
28
        $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternal());
29
        $this->registerFilter(new HTMLPurifier_URIFilter_DisableExternalResources());
30
        $this->registerFilter(new HTMLPurifier_URIFilter_DisableResources());
31
        $this->registerFilter(new HTMLPurifier_URIFilter_HostBlacklist());
32
        $this->registerFilter(new HTMLPurifier_URIFilter_SafeIframe());
33
        $this->registerFilter(new HTMLPurifier_URIFilter_MakeAbsolute());
34
        $this->registerFilter(new HTMLPurifier_URIFilter_Munge());
35
    }
36
 
37
    public function registerFilter($filter)
38
    {
39
        $this->registeredFilters[$filter->name] = $filter;
40
    }
41
 
42
    public function addFilter($filter, $config)
43
    {
44
        $r = $filter->prepare($config);
45
        if ($r === false) return; // null is ok, for backwards compat
46
        if ($filter->post) {
47
            $this->postFilters[$filter->name] = $filter;
48
        } else {
49
            $this->filters[$filter->name] = $filter;
50
        }
51
    }
52
 
53
    protected function doSetup($config)
54
    {
55
        $this->setupMemberVariables($config);
56
        $this->setupFilters($config);
57
    }
58
 
59
    protected function setupFilters($config)
60
    {
61
        foreach ($this->registeredFilters as $name => $filter) {
62
            if ($filter->always_load) {
63
                $this->addFilter($filter, $config);
64
            } else {
65
                $conf = $config->get('URI.' . $name);
66
                if ($conf !== false && $conf !== null) {
67
                    $this->addFilter($filter, $config);
68
                }
69
            }
70
        }
71
        unset($this->registeredFilters);
72
    }
73
 
74
    protected function setupMemberVariables($config)
75
    {
76
        $this->host = $config->get('URI.Host');
77
        $base_uri = $config->get('URI.Base');
78
        if (!is_null($base_uri)) {
79
            $parser = new HTMLPurifier_URIParser();
80
            $this->base = $parser->parse($base_uri);
81
            $this->defaultScheme = $this->base->scheme;
82
            if (is_null($this->host)) $this->host = $this->base->host;
83
        }
84
        if (is_null($this->defaultScheme)) $this->defaultScheme = $config->get('URI.DefaultScheme');
85
    }
86
 
87
    public function getDefaultScheme($config, $context)
88
    {
89
        return HTMLPurifier_URISchemeRegistry::instance()->getScheme($this->defaultScheme, $config, $context);
90
    }
91
 
92
    public function filter(&$uri, $config, $context)
93
    {
94
        foreach ($this->filters as $name => $f) {
95
            $result = $f->filter($uri, $config, $context);
96
            if (!$result) return false;
97
        }
98
        return true;
99
    }
100
 
101
    public function postFilter(&$uri, $config, $context)
102
    {
103
        foreach ($this->postFilters as $name => $f) {
104
            $result = $f->filter($uri, $config, $context);
105
            if (!$result) return false;
106
        }
107
        return true;
108
    }
109
 
110
}
111
 
112
// vim: et sw=4 sts=4