commiting uncommited changes on live site
[weblabels.fsf.org.git] / crm.fsf.org / 20131203 / files / sites / all / modules-new / civicrm / packages / IDS / vendors / htmlpurifier / HTMLPurifier / AttrDef / CSS / Filter.php
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 protected $intValidator;
12
13 public function __construct() {
14 $this->intValidator = new HTMLPurifier_AttrDef_Integer();
15 }
16
17 public function validate($value, $config, $context) {
18 $value = $this->parseCDATA($value);
19 if ($value === 'none') return $value;
20 // if we looped this we could support multiple filters
21 $function_length = strcspn($value, '(');
22 $function = trim(substr($value, 0, $function_length));
23 if ($function !== 'alpha' &&
24 $function !== 'Alpha' &&
25 $function !== 'progid:DXImageTransform.Microsoft.Alpha'
26 ) return false;
27 $cursor = $function_length + 1;
28 $parameters_length = strcspn($value, ')', $cursor);
29 $parameters = substr($value, $cursor, $parameters_length);
30 $params = explode(',', $parameters);
31 $ret_params = array();
32 $lookup = array();
33 foreach ($params as $param) {
34 list($key, $value) = explode('=', $param);
35 $key = trim($key);
36 $value = trim($value);
37 if (isset($lookup[$key])) continue;
38 if ($key !== 'opacity') continue;
39 $value = $this->intValidator->validate($value, $config, $context);
40 if ($value === false) continue;
41 $int = (int) $value;
42 if ($int > 100) $value = '100';
43 if ($int < 0) $value = '0';
44 $ret_params[] = "$key=$value";
45 $lookup[$key] = true;
46 }
47 $ret_parameters = implode(',', $ret_params);
48 $ret_function = "$function($ret_parameters)";
49 return $ret_function;
50 }
51
52 }
53
54 // vim: et sw=4 sts=4