Failed Conditions
Push — psr2 ( b8c09b...820934 )
by Andreas
05:50 queued 03:09
created

EventHandler   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 100
rs 10
c 0
b 0
f 0
wmc 15
lcom 1
cbo 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 14 3
A register_hook() 0 10 2
B process_event() 0 21 7
A hasHandlerForEvent() 0 8 3
1
<?php
2
// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
3
4
namespace dokuwiki\Extension;
5
6
/**
7
 * Controls the registration and execution of all events,
8
 */
9
class EventHandler
10
{
11
12
    // public properties:  none
13
14
    // private properties
15
    protected $hooks = array();          // array of events and their registered handlers
16
17
    /**
18
     * event_handler
19
     *
20
     * constructor, loads all action plugins and calls their register() method giving them
21
     * an opportunity to register any hooks they require
22
     */
23
    public function __construct()
24
    {
25
26
        // load action plugins
27
        /** @var ActionPlugin $plugin */
28
        $plugin = null;
0 ignored issues
show
Unused Code introduced by
$plugin is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
29
        $pluginlist = plugin_list('action');
30
31
        foreach ($pluginlist as $plugin_name) {
32
            $plugin = plugin_load('action', $plugin_name);
33
34
            if ($plugin !== null) $plugin->register($this);
35
        }
36
    }
37
38
    /**
39
     * register_hook
40
     *
41
     * register a hook for an event
42
     *
43
     * @param  string $event string   name used by the event, (incl '_before' or '_after' for triggers)
44
     * @param  string $advise
45
     * @param  object $obj object in whose scope method is to be executed,
46
     *                             if NULL, method is assumed to be a globally available function
47
     * @param  string $method event handler function
48
     * @param  mixed $param data passed to the event handler
49
     * @param  int $seq sequence number for ordering hook execution (ascending)
50
     */
51
    public function register_hook($event, $advise, $obj, $method, $param = null, $seq = 0)
52
    {
53
        $seq = (int)$seq;
54
        $doSort = !isset($this->hooks[$event . '_' . $advise][$seq]);
55
        $this->hooks[$event . '_' . $advise][$seq][] = array($obj, $method, $param);
56
57
        if ($doSort) {
58
            ksort($this->hooks[$event . '_' . $advise]);
59
        }
60
    }
61
62
    /**
63
     * process the before/after event
64
     *
65
     * @param Event $event
66
     * @param string $advise BEFORE or AFTER
67
     */
68
    public function process_event($event, $advise = '')
69
    {
70
71
        $evt_name = $event->name . ($advise ? '_' . $advise : '_BEFORE');
72
73
        if (!empty($this->hooks[$evt_name])) {
74
            foreach ($this->hooks[$evt_name] as $sequenced_hooks) {
75
                foreach ($sequenced_hooks as $hook) {
76
                    list($obj, $method, $param) = $hook;
77
78
                    if ($obj === null) {
79
                        $method($event, $param);
80
                    } else {
81
                        $obj->$method($event, $param);
82
                    }
83
84
                    if (!$event->mayPropagate()) return;
85
                }
86
            }
87
        }
88
    }
89
90
    /**
91
     * Check if an event has any registered handlers
92
     *
93
     * When $advise is empty, both BEFORE and AFTER events will be considered,
94
     * otherwise only the given advisory is checked
95
     *
96
     * @param string $name Name of the event
97
     * @param string $advise BEFORE, AFTER or empty
98
     * @return bool
99
     */
100
    public function hasHandlerForEvent($name, $advise = '')
101
    {
102
        if ($advise) {
103
            return isset($this->hooks[$name . '_' . $advise]);
104
        }
105
106
        return isset($this->hooks[$name . '_BEFORE']) || isset($this->hooks[$name . '_AFTER']);
107
    }
108
}
109