Completed
Push — master ( bfa3e9...918ad2 )
by
unknown
27:42 queued 07:20
created

MenuBuilderListener::addMenuItems()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3.0175

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 21
ccs 7
cts 8
cp 0.875
rs 9.3142
cc 3
eloc 14
nc 3
nop 1
crap 3.0175
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
    const ROUTE = 'admin_mediamonks_sonatamedia_media_create';
13
14
    /**
15
     * @var ProviderPool
16
     */
17
    private $providerPool;
18
19
    /**
20
     * @var TranslatorInterface
21
     */
22
    private $translator;
23
24
    /**
25
     * @param ProviderPool $providerPool
26 12
     * @param TranslatorInterface $translator
27
     */
28
    public function __construct(ProviderPool $providerPool, TranslatorInterface $translator)
29
    {
30 12
        $this->providerPool = $providerPool;
31 12
        $this->translator = $translator;
32 12
    }
33
34
    /**
35
     * @param ConfigureMenuEvent $event
36
     */
37 12
    public function addMenuItems(ConfigureMenuEvent $event)
38
    {
39 12
        $menu = $event->getMenu();
40
41 12
        $child = $menu->getChild('Media');
42 12
        if (empty($child)) {
43
            return;
44
        }
45 12
        $child->setLabel($this->translator->trans('menu.title'));
46
47
        foreach ($this->providerPool->getProviders() as $providerClass => $provider) {
48
            $this->addProviderMenuChild(
49
                $child,
50
                $providerClass,
51
                self::ROUTE,
52
                ['provider' => $providerClass],
53
                $provider->getName(),
54
                $provider->getIcon()
55
            );
56 12
        }
57 12
    }
58
59 12
    /**
60 12
     * @param ItemInterface $menu
61 12
     * @param string $name
62 12
     * @param string $route
63 12
     * @param array $routeParameters
64
     * @param string $label
65
     * @param string $icon
66 12
     */
67
    private function addProviderMenuChild(ItemInterface $menu, $name, $route, array $routeParameters, $label, $icon)
68
    {
69
        $child = $menu->addChild($name, ['route' => $route, 'routeParameters' => $routeParameters]);
70
        $child->setLabel($this->translator->trans('menu.provider', ['%provider%' => $this->translator->trans($label)]));
71
        $child->setAttribute('icon', sprintf('<i class="%s" aria-hidden="true"></i>', $icon));
72
    }
73
}
74