ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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

Definition at line 17 of file Flexible.php.

References $new, array, HTMLPurifier_VarParser\errorGeneric(), and HTMLPurifier_VarParser\errorInconsistent().

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  }
errorInconsistent($class, $type)
Throws an inconsistency exception.
Definition: VarParser.php:161
Exception type for HTMLPurifier_VarParser.
errorGeneric($var, $type)
Generic error for if a type didn't work.
Definition: VarParser.php:174
Create styles array
The data for the language used.
+ Here is the call graph for this function:

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