ListenerProviderConfig   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 16
dl 0
loc 52
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getListeners() 0 27 6
A addListener() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace OpenEngine\EventDispatcher;
4
5
use OpenEngine\EventDispatcher\Interfaces\ListenerProviderConfigInterface;
6
7
class ListenerProviderConfig implements ListenerProviderConfigInterface
8
{
9
    /**
10
     * @var RegisteredListener[]
11
     */
12
    private $listeners = [];
13
14
    /**
15
     * Add listener
16
     *
17
     * @param string $eventClass
18
     * @param callable $listener
19
     * @param int $priority Zero is highest priority
20
     */
21
    public function addListener(string $eventClass, callable $listener, int $priority = 1000): void
22
    {
23
        $this->listeners[] = new RegisteredListener($eventClass, $listener, $priority);
24
    }
25
26
    /**
27
     * Get sorted by priority listeners for event $eventClass
28
     *
29
     * @param string $eventClass
30
     * @return iterable
31
     */
32
    public function getListeners(string $eventClass): iterable
33
    {
34
        $listeners = [];
35
36
        foreach ($this->listeners as $listener) {
37
            if ($eventClass === $listener->getEventClass()) {
38
                $listeners[] = $listener;
39
            }
40
        }
41
42
        usort($listeners, function (RegisteredListener $first, RegisteredListener $second) {
43
            if ($first->getPriority() < $second->getPriority()) {
44
                return -1;
45
            }
46
47
            if ($first->getPriority() > $second->getPriority()) {
48
                return 1;
49
            }
50
51
            return 0;
52
        });
53
54
        foreach ($listeners as $key => $listener) {
55
            $listeners[$key] = $listener->getListener();
56
        }
57
58
        return $listeners;
59
    }
60
}
61