Completed
Pull Request — master (#154)
by Arnaud
03:37
created

MenuProvider::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 10
rs 10
1
<?php
2
3
namespace LAG\AdminBundle\Menu\Provider;
4
5
use Knp\Menu\FactoryInterface;
6
use Knp\Menu\ItemInterface;
7
use Knp\Menu\Provider\MenuProviderInterface;
8
use LAG\AdminBundle\Factory\ConfigurationFactory;
9
use LAG\AdminBundle\Routing\Resolver\RoutingResolverInterface;
10
11
class MenuProvider implements MenuProviderInterface
12
{
13
    /**
14
     * @var FactoryInterface
15
     */
16
    private $factory;
17
18
    /**
19
     * @var ConfigurationFactory
20
     */
21
    private $configurationFactory;
22
23
    /**
24
     * @var RoutingResolverInterface
25
     */
26
    private $resolver;
27
28
    /**
29
     * @var array
30
     */
31
    private $menuConfigurations;
32
33
    public function __construct(
34
        array $menuConfigurations,
35
        FactoryInterface $factory,
36
        ConfigurationFactory $configurationFactory,
37
        RoutingResolverInterface $resolver
38
    ) {
39
        $this->factory = $factory;
40
        $this->configurationFactory = $configurationFactory;
41
        $this->resolver = $resolver;
42
        $this->menuConfigurations = $menuConfigurations;
43
    }
44
45
    public function get(string $name, array $options = []): ItemInterface
46
    {
47
        $menuConfiguration = $this->configurationFactory->createMenuConfiguration($name, []);
48
        $menuConfiguration = $menuConfiguration->all();
49
50
        $menu = $this->factory->createItem('root', [
51
            'attributes' => $menuConfiguration['attributes'],
52
        ]);
53
54
        foreach ($menuConfiguration['children'] as $itemConfiguration) {
55
            $menu->addChild($itemConfiguration['text'], [
56
                'attributes' => $itemConfiguration['attributes'],
57
                'linkAttributes' => $itemConfiguration['linkAttributes'],
58
                'route' => $this->resolver->resolveOptions($itemConfiguration),
59
            ]);
60
        }
61
62
        return $menu;
63
    }
64
65
    public function has(string $name, array $options = []): bool
66
    {
67
        return key_exists($name, $this->menuConfigurations);
68
    }
69
70
    public function all(): array
71
    {
72
        $menus = [];
73
74
        foreach ($this->menuConfigurations as $menuName => $menuConfiguration) {
75
            $menus[$menuName] = $this->get($menuName, $menuConfiguration);
76
        }
77
78
        return $menus;
79
    }
80
}
81