ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
HTMLPurifier_VarParser_Flexible Class Reference

Performs safe variable parsing based on types which can be used by users. More...

+ Inheritance diagram for HTMLPurifier_VarParser_Flexible:
+ Collaboration diagram for HTMLPurifier_VarParser_Flexible:

Protected Member Functions

 parseImplementation ($var, $type, $allow_null)
 
- Protected Member Functions inherited from HTMLPurifier_VarParser
 parseImplementation ($var, $type, $allow_null)
 Actually implements the parsing. More...
 
 error ($msg)
 Throws an exception. More...
 
 errorInconsistent ($class, $type)
 Throws an inconsistency exception. More...
 
 errorGeneric ($var, $type)
 Generic error for if a type didn't work. More...
 

Additional Inherited Members

- Public Member Functions inherited from HTMLPurifier_VarParser
 parse ($var, $type, $allow_null=false)
 Validate a variable according to type. More...
 
- Static Public Member Functions inherited from HTMLPurifier_VarParser
static getTypeName ($type)
 
- Data Fields inherited from HTMLPurifier_VarParser
const STRING = 1
 
const ISTRING = 2
 
const TEXT = 3
 
const ITEXT = 4
 
const INT = 5
 
const FLOAT = 6
 
const BOOL = 7
 
const LOOKUP = 8
 
const ALIST = 9
 
const HASH = 10
 
const MIXED = 11
 
- Static Public Attributes inherited from HTMLPurifier_VarParser
static $types
 Lookup table of allowed types. More...
 
static $stringTypes
 Lookup table of types that are string, and can have aliases or allowed value lists. More...
 

Detailed Description

Performs safe variable parsing based on types which can be used by users.

This may not be able to represent all possible data inputs, however.

Definition at line 8 of file Flexible.php.

Member Function Documentation

◆ parseImplementation()

HTMLPurifier_VarParser_Flexible::parseImplementation (   $var,
  $type,
  $allow_null 
)
protected
Parameters
mixed$var
int$type
bool$allow_null
Returns
array|bool|float|int|mixed|null|string
Exceptions
HTMLPurifier_VarParserException

Reimplemented from HTMLPurifier_VarParser.

Definition at line 17 of file Flexible.php.

18 {
19 if ($allow_null && $var === null) {
20 return null;
21 }
22 switch ($type) {
23 // Note: if code "breaks" from the switch, it triggers a generic
24 // exception to be thrown. Specific errors can be specifically
25 // done here.
26 case self::MIXED:
27 case self::ISTRING:
28 case self::STRING:
29 case self::TEXT:
30 case self::ITEXT:
31 return $var;
32 case self::INT:
33 if (is_string($var) && ctype_digit($var)) {
34 $var = (int)$var;
35 }
36 return $var;
37 case self::FLOAT:
38 if ((is_string($var) && is_numeric($var)) || is_int($var)) {
39 $var = (float)$var;
40 }
41 return $var;
42 case self::BOOL:
43 if (is_int($var) && ($var === 0 || $var === 1)) {
44 $var = (bool)$var;
45 } elseif (is_string($var)) {
46 if ($var == 'on' || $var == 'true' || $var == '1') {
47 $var = true;
48 } elseif ($var == 'off' || $var == 'false' || $var == '0') {
49 $var = false;
50 } else {
51 throw new HTMLPurifier_VarParserException("Unrecognized value '$var' for $type");
52 }
53 }
54 return $var;
55 case self::ALIST:
56 case self::HASH:
57 case self::LOOKUP:
58 if (is_string($var)) {
59 // special case: technically, this is an array with
60 // a single empty string item, but having an empty
61 // array is more intuitive
62 if ($var == '') {
63 return array();
64 }
65 if (strpos($var, "\n") === false && strpos($var, "\r") === false) {
66 // simplistic string to array method that only works
67 // for simple lists of tag names or alphanumeric characters
68 $var = explode(',', $var);
69 } else {
70 $var = preg_split('/(,|[\n\r]+)/', $var);
71 }
72 // remove spaces
73 foreach ($var as $i => $j) {
74 $var[$i] = trim($j);
75 }
76 if ($type === self::HASH) {
77 // key:value,key2:value2
78 $nvar = array();
79 foreach ($var as $keypair) {
80 $c = explode(':', $keypair, 2);
81 if (!isset($c[1])) {
82 continue;
83 }
84 $nvar[trim($c[0])] = trim($c[1]);
85 }
86 $var = $nvar;
87 }
88 }
89 if (!is_array($var)) {
90 break;
91 }
92 $keys = array_keys($var);
93 if ($keys === array_keys($keys)) {
94 if ($type == self::ALIST) {
95 return $var;
96 } elseif ($type == self::LOOKUP) {
97 $new = array();
98 foreach ($var as $key) {
99 $new[$key] = true;
100 }
101 return $new;
102 } else {
103 break;
104 }
105 }
106 if ($type === self::ALIST) {
107 trigger_error("Array list did not have consecutive integer indexes", E_USER_WARNING);
108 return array_values($var);
109 }
110 if ($type === self::LOOKUP) {
111 foreach ($var as $key => $value) {
112 if ($value !== true) {
113 trigger_error(
114 "Lookup array has non-true value at key '$key'; " .
115 "maybe your input array was not indexed numerically",
116 E_USER_WARNING
117 );
118 }
119 $var[$key] = true;
120 }
121 }
122 return $var;
123 default:
124 $this->errorInconsistent(__CLASS__, $type);
125 }
126 $this->errorGeneric($var, $type);
127 }
Exception type for HTMLPurifier_VarParser.
errorInconsistent($class, $type)
Throws an inconsistency exception.
Definition: VarParser.php:161
errorGeneric($var, $type)
Generic error for if a type didn't work.
Definition: VarParser.php:174

References HTMLPurifier_VarParser\ALIST, HTMLPurifier_VarParser\BOOL, HTMLPurifier_VarParser\errorGeneric(), HTMLPurifier_VarParser\errorInconsistent(), HTMLPurifier_VarParser\FLOAT, HTMLPurifier_VarParser\HASH, HTMLPurifier_VarParser\INT, HTMLPurifier_VarParser\ISTRING, HTMLPurifier_VarParser\ITEXT, HTMLPurifier_VarParser\LOOKUP, HTMLPurifier_VarParser\MIXED, HTMLPurifier_VarParser\STRING, and HTMLPurifier_VarParser\TEXT.

+ Here is the call graph for this function:

The documentation for this class was generated from the following file: