Passed
Push — main ( cbe365...9cd787 )
by Sammy
01:33
created

Smith::hasFilter()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 1
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
namespace HexMakina\Smith;
4
5
class Smith
6
{
7
    const REPORTING_USER = 'user_messages';
8
    const INDEX_FILTER = 'filter';
9
    const INDEX_OPERATOR = 'operator';
10
11
  // IS-54-16 : Behold, I have created the smith who blows the fire of coals
12
  // $options : https://www.php.net/manual/fr/session.configuration.php
13
    public function __construct($options = [])
14
    {
15
        if (isset($options['session_name'])) {
16
            session_name($options['session_name']);
17
            unset($options['session_name']);
18
        }
19
20
        session_start($options); // https://www.php.net/manual/fr/function.session-start.php
21
    }
22
23
    // camelCase wrapper for setcookie, coherent with getCookie
24
    public function setCookie($name, $value = "", $expires_in = 365 * 24 * 60 * 60, $path = "/", $domain = "", $secure = false, $httponly = false): bool
25
    {
26
        return setcookie($name, $value, time() + $expires_in, $path, $domain, $secure, $httponly);
27
    }
28
29
    // returns the value stored or null
30
    public function getCookie($name)
31
    {
32
        return $_COOKIE[$name] ?? null;
33
    }
34
35
  // IS-54-16 : and produces a weapon for its purpose
36
    public function addMessage($level, $message, $context = [])
37
    {
38
        if (!isset($_SESSION[self::REPORTING_USER])) {
39
            $_SESSION[self::REPORTING_USER] = [];
40
        }
41
42
        if (!isset($_SESSION[self::REPORTING_USER][$level])) {
43
            $_SESSION[self::REPORTING_USER][$level] = [];
44
        }
45
46
        $_SESSION[self::REPORTING_USER][$level][] = [$message, $context];
47
    }
48
49
    public function messages($level = null)
50
    {
51
        if (is_null($level)) {
52
            return $_SESSION[self::REPORTING_USER];
53
        }
54
55
        return $_SESSION[self::REPORTING_USER][$level] ?? null;
56
    }
57
58
    public function resetMessages($level = null)
59
    {
60
        $this->reset(self::REPORTING_USER, $level);
61
    }
62
63
64
    public function addRuntimeFilters($filters)
65
    {
66
        $_SESSION[self::INDEX_FILTER] = array_merge($_SESSION[self::INDEX_FILTER] ?? [], $filters);
67
    }
68
69
    public function hasFilter($filter_name): bool
70
    {
71
        return isset($_SESSION[self::INDEX_FILTER][$filter_name]) && strlen('' . $_SESSION[self::INDEX_FILTER][$filter_name]) > 0;
72
    }
73
74
    public function filters($filter_name = null, $value = null)
75
    {
76
        if (is_null($filter_name)) {
77
            return $_SESSION[self::INDEX_FILTER];
78
        }
79
80
        if (!is_null($value)) {
81
            $_SESSION[self::INDEX_FILTER][$filter_name] = $value;
82
        }
83
84
        return $_SESSION[self::INDEX_FILTER][$filter_name] ?? null;
85
    }
86
87
    public function resetFilters($filter_name = null)
88
    {
89
        $this->reset(self::INDEX_FILTER, $filter_name);
90
    }
91
92
    public function operator_id($setter = null)
93
    {
94
        if (!is_null($setter)) {
95
            $_SESSION[self::INDEX_OPERATOR] = ['id' => $setter, 'set_on' => time()];
96
        }
97
98
        return $_SESSION[self::INDEX_OPERATOR]['id'] ?? null;
99
    }
100
101
    public function operator_started_on()
102
    {
103
        return $_SESSION[self::INDEX_OPERATOR]['set_on'] ?? null;
104
    }
105
106
    // IS-54-16 : I have also created the ravager to destroy
107
    public function destroy(): bool
108
    {
109
110
        if (ini_get("session.use_cookies")) {
111
            $params = session_get_cookie_params();
112
            setcookie(
113
                session_name(),
114
                '',
115
                time() - 42000,
116
                $params["path"],
117
                $params["domain"],
118
                $params["secure"],
119
                $params["httponly"]
120
            );
121
        }
122
        return session_destroy();
123
    }
124
125
    private function reset($index, $part = null)
126
    {
127
        if (is_null($part)) {
128
            $_SESSION[$index] = [];
129
        } else {
130
            unset($_SESSION[$index][$part]);
131
        }
132
    }
133
}
134