Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
/**
4
 * Microsoft's proprietary filter: CSS property
5
 * @note Currently supports the alpha filter. In the future, this will
6
 *       probably need an extensible framework
7
 */
8
class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
9
{
10
    /**
11
     * @type HTMLPurifier_AttrDef_Integer
12
     */
13
    protected $intValidator;
14
 
15
    public function __construct()
16
    {
17
        $this->intValidator = new HTMLPurifier_AttrDef_Integer();
18
    }
19
 
20
    /**
21
     * @param string $value
22
     * @param HTMLPurifier_Config $config
23
     * @param HTMLPurifier_Context $context
24
     * @return bool|string
25
     */
26
    public function validate($value, $config, $context)
27
    {
28
        $value = $this->parseCDATA($value);
29
        if ($value === 'none') {
30
            return $value;
31
        }
32
        // if we looped this we could support multiple filters
33
        $function_length = strcspn($value, '(');
34
        $function = trim(substr($value, 0, $function_length));
35
        if ($function !== 'alpha' &&
36
            $function !== 'Alpha' &&
37
            $function !== 'progid:DXImageTransform.Microsoft.Alpha'
38
        ) {
39
            return false;
40
        }
41
        $cursor = $function_length + 1;
42
        $parameters_length = strcspn($value, ')', $cursor);
43
        $parameters = substr($value, $cursor, $parameters_length);
44
        $params = explode(',', $parameters);
45
        $ret_params = array();
46
        $lookup = array();
47
        foreach ($params as $param) {
48
            list($key, $value) = explode('=', $param);
49
            $key = trim($key);
50
            $value = trim($value);
51
            if (isset($lookup[$key])) {
52
                continue;
53
            }
54
            if ($key !== 'opacity') {
55
                continue;
56
            }
57
            $value = $this->intValidator->validate($value, $config, $context);
58
            if ($value === false) {
59
                continue;
60
            }
61
            $int = (int)$value;
62
            if ($int > 100) {
63
                $value = '100';
64
            }
65
            if ($int < 0) {
66
                $value = '0';
67
            }
68
            $ret_params[] = "$key=$value";
69
            $lookup[$key] = true;
70
        }
71
        $ret_parameters = implode(',', $ret_params);
72
        $ret_function = "$function($ret_parameters)";
73
        return $ret_function;
74
    }
75
}
76
 
77
// vim: et sw=4 sts=4