Test Setup Failed
Push — master ( 195648...185a1e )
by Craig
58s queued 15s
created

ExtensionMenuCollector::has()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 1
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula Foundation - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\MenuModule\ExtensionMenu;
15
16
use Knp\Menu\ItemInterface;
17
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
18
19
class ExtensionMenuCollector
20
{
21
    /**
22
     * @var ExtensionMenuInterface[]
23
     */
24
    private $extensionMenus;
25
26
    /**
27
     * @var EventDispatcherInterface
28
     */
29
    private $eventDispatcher;
30
31
    public function __construct(EventDispatcherInterface $eventDispatcher, iterable $extensionMenus = [])
32
    {
33
        $this->eventDispatcher = $eventDispatcher;
34
        $this->extensionMenus = [];
35
        foreach ($extensionMenus as $extensionMenu) {
36
            $this->add($extensionMenu);
37
        }
38
    }
39
40
    public function add(ExtensionMenuInterface $extensionMenu): void
41
    {
42
        $this->extensionMenus[$extensionMenu->getBundleName()] = $extensionMenu;
43
    }
44
45
    public function get(string $bundleName, string $type = ExtensionMenuInterface::TYPE_ADMIN): ?ItemInterface
46
    {
47
        if ($this->has($bundleName)) {
48
            try {
49
                $menu = $this->extensionMenus[$bundleName]->get($type);
50
            } catch (\Exception $exception) {
51
                // do nothing
52
            }
53
54
            // fire event here to add more menu items like hooks, moduleServices, etc
55
            $event = new ExtensionMenuEvent($bundleName, $type, $menu);
56
            $menu = $this->eventDispatcher->dispatch($event)->getMenu();
57
58
            return $menu;
59
        }
60
61
        return null;
62
    }
63
64
    public function getAllByType(string $type = ExtensionMenuInterface::TYPE_ACCOUNT): array
65
    {
66
        $menus = [];
67
        foreach ($this->extensionMenus as $bundleName => $extensionMenu) {
68
            $menu = $extensionMenu->get($type);
69
            if (null !== $menu) {
70
                $menus[$bundleName] = $menu;
71
            }
72
        }
73
74
        return $menus;
75
    }
76
77
    public function has(string $bundleName): bool
78
    {
79
        return isset($this->extensionMenus[$bundleName]);
80
    }
81
}
82