Completed
Push — master ( 728554...90855a )
by John
01:53
created

Cookie::clear()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Escopecz\MauticFormSubmit;
4
5
/**
6
 * $_COOKIE object representation
7
 */
8
class Cookie
9
{
10
    /**
11
     * Store for values stored in this PHP runtime
12
     * because when cookie is set with setCookie
13
     * it's accessible on the next script run only,
14
     * not at the same run.
15
     *
16
     * @var array
17
     */
18
    protected $store = [];
19
20
    /**
21
     * Get cookie with FILTER_SANITIZE_STRING
22
     *
23
     * @param  string $key
24
     *
25
     * @return string|null
26
     */
27 26
    public function get($key)
28
    {
29 26
        if (isset($this->store[$key])) {
30 10
            return filter_var($this->store[$key], FILTER_SANITIZE_STRING);
31
        }
32
33 26
        return filter_input(INPUT_COOKIE, $key, FILTER_SANITIZE_STRING);
34
    }
35
36
    /**
37
     * Get cookie with FILTER_SANITIZE_NUMBER_INT
38
     *
39
     * @param  string $key
40
     *
41
     * @return int|null
42
     */
43 20
    public function getInt($key)
44
    {
45 20
        if (isset($this->store[$key])) {
46 14
            return (int) filter_var($this->store[$key], FILTER_SANITIZE_NUMBER_INT);
47
        }
48
49 12
        return (int) filter_input(INPUT_COOKIE, $key, FILTER_SANITIZE_NUMBER_INT);
50
    }
51
52
    /**
53
     * Set a cookie value
54
     *
55
     * @param string $key
56
     * @param mixed $value
57
     *
58
     * @return bool
59
     */
60 22
    public function set($key, $value)
61
    {
62 22
        $this->store[$key] = $value;
63
64 22
        return setcookie($key, $value);
65
    }
66
67
    /**
68
     * Unset the key from the cookie
69
     *
70
     * @param string $key
71
     *
72
     * @return Cookie
73
     */
74 16
    public function clear($key)
0 ignored issues
show
Coding Style introduced by
clear uses the super-global variable $_COOKIE which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
75
    {
76 16
        setcookie($key, '', time() - 3600);
77 16
        unset($_COOKIE[$key]);
78 16
        unset($this->store[$key]);
79
80 16
        return $this;
81
    }
82
83
    /**
84
     * Returns $_COOKIE
85
     *
86
     * @return array
87
     */
88 4
    public function getSuperGlobalCookie()
0 ignored issues
show
Coding Style introduced by
getSuperGlobalCookie uses the super-global variable $_COOKIE which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
89
    {
90 4
        return $_COOKIE;
91
    }
92
93
    /**
94
     * Return all cookies as array merged with current state
95
     *
96
     * @return array
97
     */
98 2
    public function toArray()
99
    {
100 2
        return array_merge($this->getSuperGlobalCookie(), $this->store);
101
    }
102
103
    /**
104
     * Creates unique cookie file in system tmp dir and returns absolute path to it.
105
     *
106
     * @return string|false
107
     */
108 2
    public function createCookieFile()
109
    {
110 2
        return tempnam(sys_get_temp_dir(), 'mauticcookie');
111
    }
112
}
113