GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

HTMLPurifier_VarParser_Flexible   B
last analyzed

Complexity

Total Complexity 46

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 94
rs 8.72
c 0
b 0
f 0
wmc 46
lcom 0
cbo 2

1 Method

Rating   Name   Duplication   Size   Complexity  
F parseImplementation() 0 89 46

How to fix   Complexity   

Complex Class

Complex classes like HTMLPurifier_VarParser_Flexible often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use HTMLPurifier_VarParser_Flexible, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/**
4
 * Performs safe variable parsing based on types which can be used by
5
 * users. This may not be able to represent all possible data inputs,
6
 * however.
7
 */
8
class HTMLPurifier_VarParser_Flexible extends HTMLPurifier_VarParser
9
{
10
11
    protected function parseImplementation($var, $type, $allow_null) {
12
        if ($allow_null && $var === null) return null;
13
        switch ($type) {
14
            // Note: if code "breaks" from the switch, it triggers a generic
15
            // exception to be thrown. Specific errors can be specifically
16
            // done here.
17
            case self::MIXED :
18
            case self::ISTRING :
19
            case self::STRING :
20
            case self::TEXT :
21
            case self::ITEXT :
22
                return $var;
23
            case self::INT :
24
                if (is_string($var) && ctype_digit($var)) $var = (int) $var;
25
                return $var;
26
            case self::FLOAT :
27
                if ((is_string($var) && is_numeric($var)) || is_int($var)) $var = (float) $var;
28
                return $var;
29
            case self::BOOL :
30
                if (is_int($var) && ($var === 0 || $var === 1)) {
31
                    $var = (bool) $var;
32
                } elseif (is_string($var)) {
33
                    if ($var == 'on' || $var == 'true' || $var == '1') {
34
                        $var = true;
35
                    } elseif ($var == 'off' || $var == 'false' || $var == '0') {
36
                        $var = false;
37
                    } else {
38
                        throw new HTMLPurifier_VarParserException("Unrecognized value '$var' for $type");
39
                    }
40
                }
41
                return $var;
42
            case self::ALIST :
43
            case self::HASH :
44
            case self::LOOKUP :
45
                if (is_string($var)) {
46
                    // special case: technically, this is an array with
47
                    // a single empty string item, but having an empty
48
                    // array is more intuitive
49
                    if ($var == '') return array();
50
                    if (strpos($var, "\n") === false && strpos($var, "\r") === false) {
51
                        // simplistic string to array method that only works
52
                        // for simple lists of tag names or alphanumeric characters
53
                        $var = explode(',',$var);
54
                    } else {
55
                        $var = preg_split('/(,|[\n\r]+)/', $var);
56
                    }
57
                    // remove spaces
58
                    foreach ($var as $i => $j) $var[$i] = trim($j);
59
                    if ($type === self::HASH) {
60
                        // key:value,key2:value2
61
                        $nvar = array();
62
                        foreach ($var as $keypair) {
63
                            $c = explode(':', $keypair, 2);
64
                            if (!isset($c[1])) continue;
65
                            $nvar[trim($c[0])] = trim($c[1]);
66
                        }
67
                        $var = $nvar;
68
                    }
69
                }
70
                if (!is_array($var)) break;
71
                $keys = array_keys($var);
72
                if ($keys === array_keys($keys)) {
73
                    if ($type == self::ALIST) return $var;
74
                    elseif ($type == self::LOOKUP) {
75
                        $new = array();
76
                        foreach ($var as $key) {
77
                            $new[$key] = true;
78
                        }
79
                        return $new;
80
                    } else break;
81
                }
82
                if ($type === self::ALIST) {
83
                    trigger_error("Array list did not have consecutive integer indexes", E_USER_WARNING);
84
                    return array_values($var);
85
                }
86
                if ($type === self::LOOKUP) {
87
                    foreach ($var as $key => $value) {
88
                        if ($value !== true) {
89
                            trigger_error("Lookup array has non-true value at key '$key'; maybe your input array was not indexed numerically", E_USER_WARNING);
90
                        }
91
                        $var[$key] = true;
92
                    }
93
                }
94
                return $var;
95
            default:
96
                $this->errorInconsistent(__CLASS__, $type);
97
        }
98
        $this->errorGeneric($var, $type);
99
    }
100
101
}
102
103
// vim: et sw=4 sts=4
104