Hook   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 83
rs 10
c 0
b 0
f 0
ccs 34
cts 34
cp 1
wmc 11
lcom 1
cbo 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addHook() 0 8 1
A getHooks() 0 4 1
C removeCallbackWithPriority() 0 22 7
A removeAllHooks() 0 4 1
1
<?php
2
namespace Redbox\Hooks;
3
4
class Hook
5
{
6
7
    /**
8
     * @var string
9
     */
10
    protected $tag;
11
12
    /**
13
     * @var array
14
     */
15
    protected $hooks = [];
16
17
18
    /**
19
     * Hook constructor.
20
     * @param string $tag
21
     */
22 64
    public function __construct($tag)
23
    {
24 64
        $this->tag = $tag;
25 64
    }
26
27
    /**
28
     * @param int $priority
29
     * @param string $callback
30
     */
31 64
    public function addHook($priority = 10, $callback = '')
32
    {
33 64
        $this->hooks[$priority][] = [
34 64
            'callback' => $callback,
35 64
            'priority' => $priority,
36
        ];
37 64
        ksort($this->hooks);
38 64
    }
39
40
    /**
41
     * Return all hooks
42
     *
43
     * @return array
44
     */
45 64
    public function getHooks()
46
    {
47 64
        return $this->hooks;
48
    }
49
50
    /**
51
     * Remove a given hook with a callback and priority.
52
     *
53
     * @param int $priority
54
     * @param string $callback
55
     */
56 8
    public function removeCallbackWithPriority($priority = 10, $callback = '')
57
    {
58 8
        $hooks = $this->getHooks();
59 8
        if (isset($hooks[$priority]) == true) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
60 8
            $callbacks = $hooks[$priority];
61 8
            foreach ($callbacks as $index => $entry) {
62 8
                if ($entry['callback'] == $callback) {
63 8
                    unset($this->hooks[$priority][$index]);
64
65 8
                    if (count($this->hooks[$priority]) > 0) {
66 4
                        $new = [];
67 4
                        foreach ($this->hooks[$priority] as $hook) {
68 4
                            $new[] = $hook;
69 2
                        }
70 4
                        $this->hooks[$priority] = $new;
71 6
                    } elseif (count($this->hooks[$priority]) == 0) {
72 6
                        unset($this->hooks[$priority]);
73 2
                    }
74 4
                }
75 4
            }
76 4
        }
77 8
    }
78
79
    /**
80
     * Remove all known hooks.
81
     */
82 44
    public function removeAllHooks()
83
    {
84 44
        $this->hooks = [];
85 44
    }
86
}
87