Completed
Push — master ( e8bfce...313e31 )
by Arnaud
13s queued 11s
created

MenuProvider::get()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 10
c 1
b 0
f 0
nc 2
nop 2
dl 0
loc 18
ccs 11
cts 11
cp 1
crap 2
rs 9.9332
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 2
    public function __construct(
34
        array $menuConfigurations,
35
        FactoryInterface $factory,
36
        ConfigurationFactory $configurationFactory,
37
        RoutingResolverInterface $resolver
38
    ) {
39 2
        $this->factory = $factory;
40 2
        $this->configurationFactory = $configurationFactory;
41 2
        $this->resolver = $resolver;
42 2
        $this->menuConfigurations = $menuConfigurations;
43 2
    }
44
45 2
    public function get(string $name, array $options = []): ItemInterface
46
    {
47 2
        $menuConfiguration = $this->configurationFactory->createMenuConfiguration($name, []);
48 2
        $menuConfiguration = $menuConfiguration->all();
49
50 2
        $menu = $this->factory->createItem('root', [
51 2
            'attributes' => $menuConfiguration['attributes'],
52
        ]);
53
54 2
        foreach ($menuConfiguration['children'] as $itemConfiguration) {
55 2
            $menu->addChild($itemConfiguration['text'], [
56 2
                'attributes' => $itemConfiguration['attributes'],
57 2
                'linkAttributes' => $itemConfiguration['linkAttributes'],
58 2
                'route' => $this->resolver->resolveOptions($itemConfiguration),
59
            ]);
60
        }
61
62 2
        return $menu;
63
    }
64
65
    public function has(string $name, array $options = []): bool
66
    {
67
        return key_exists($name, $this->menuConfigurations);
68
    }
69
70
    /**
71
     * @return ItemInterface[]
72
     */
73
    public function all(): array
74
    {
75
        $menus = [];
76
77
        foreach ($this->menuConfigurations as $menuName => $menuConfiguration) {
78
            if (!is_array($menuConfiguration)) {
79
                $menuConfiguration = [];
80
            }
81
            $menus[$menuName] = $this->get($menuName, $menuConfiguration);
82
        }
83
84
        return $menus;
85
    }
86
}
87