1: | <?php
|
2: |
|
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
|
9: | {
|
10: | |
11: | |
12: |
|
13: | protected $intValidator;
|
14: |
|
15: | public function __construct()
|
16: | {
|
17: | $this->intValidator = new HTMLPurifier_AttrDef_Integer();
|
18: | }
|
19: |
|
20: | |
21: | |
22: | |
23: | |
24: | |
25: |
|
26: | public function validate($value, $config, $context)
|
27: | {
|
28: | $value = $this->parseCDATA($value);
|
29: | if ($value === 'none') {
|
30: | return $value;
|
31: | }
|
32: |
|
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: |
|
78: | |