MenuBuilderListener::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 5
cts 5
cp 1
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 1
1
<?php
2
3
namespace MediaMonks\SonataMediaBundle\EventListener;
4
5
use Knp\Menu\ItemInterface;
6
use MediaMonks\SonataMediaBundle\Provider\ProviderPool;
7
use Sonata\AdminBundle\Event\ConfigureMenuEvent;
8
use Symfony\Component\Translation\TranslatorInterface;
9
10
class MenuBuilderListener
11
{
12
    /**
13
     * @var ProviderPool
14
     */
15
    private $providerPool;
16
17
    /**
18
     * @var TranslatorInterface
19
     */
20
    private $translator;
21
22
    /**
23
     * @var string
24
     */
25
    private $route;
26
27
    /**
28
     * @param ProviderPool $providerPool
29
     * @param TranslatorInterface $translator
30
     * @param string $route
31
     */
32 12
    public function __construct(
33
        ProviderPool $providerPool,
34
        TranslatorInterface $translator,
35
        $route = 'admin_mediamonks_sonatamedia_media_create'
36
    )
37
    {
38 12
        $this->providerPool = $providerPool;
39 12
        $this->translator = $translator;
40 12
        $this->route = $route;
41 12
    }
42
43
    /**
44
     * @param ConfigureMenuEvent $event
45
     */
46 12
    public function addMenuItems(ConfigureMenuEvent $event)
47
    {
48 12
        $menu = $event->getMenu();
49
50 12
        $child = $menu->getChild('Media');
51 12
        if (empty($child)) {
52
            return;
53
        }
54 12
        $child->setLabel($this->translator->trans('menu.title'));
55
56 12
        foreach ($this->providerPool->getProviders() as $providerClass => $provider) {
57 12
            $this->addProviderMenuChild(
58 12
                $child,
59 12
                $providerClass,
60 12
                $this->route,
61 12
                ['provider' => $providerClass],
62 12
                $provider->getName(),
63 12
                $provider->getIcon()
64
            );
65
        }
66 12
    }
67
68
    /**
69
     * @param ItemInterface $menu
70
     * @param string $name
71
     * @param string $route
72
     * @param array $routeParameters
73
     * @param string $label
74
     * @param string $icon
75
     */
76 12
    private function addProviderMenuChild(ItemInterface $menu, $name, $route, array $routeParameters, $label, $icon)
77
    {
78 12
        $child = $menu->addChild($name, ['route' => $route, 'routeParameters' => $routeParameters]);
79 12
        $child->setLabel($this->translator->trans('menu.provider', ['%provider%' => $this->translator->trans($label)]));
80 12
        $child->setAttribute('icon', sprintf('<i class="%s" aria-hidden="true"></i>', $icon));
81 12
    }
82
}
83