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

MenuBuilderListener   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 89.47%

Importance

Changes 1
Bugs 1 Features 0
Metric Value
wmc 5
c 1
b 1
f 0
lcom 1
cbo 5
dl 0
loc 64
ccs 17
cts 19
cp 0.8947
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A addMenuItems() 0 21 3
A addProviderMenuChild() 0 6 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
    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