Completed
Pull Request — 5.6 (#2830)
by Jeroen
14:14
created

AdminBundle/Helper/Menu/SimpleMenuAdaptor.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\AdminBundle\Helper\Menu;
4
5
use Symfony\Component\HttpFoundation\Request;
6
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
7
8
class SimpleMenuAdaptor implements MenuAdaptorInterface
9
{
10
    /**
11
     * @var AuthorizationCheckerInterface
12
     */
13
    private $authorizationChecker;
14
15
    /**
16
     * @var array
17
     */
18
    private $menuItems;
19
20 3
    public function __construct(AuthorizationCheckerInterface $authorizationChecker, array $menuItems)
21
    {
22 3
        $this->authorizationChecker = $authorizationChecker;
23 3
        $this->menuItems = $menuItems;
24 3
    }
25
26
    /**
27
     * In this method you can add children for a specific parent, but also remove and change the already created
28
     * children
29
     *
30
     * @param MenuBuilder   $menu      The MenuBuilder
31
     * @param MenuItem[]    &$children The current children
32
     * @param MenuItem|null $parent    The parent Menu item
33
     * @param Request       $request   The Request
0 ignored issues
show
Should the type for parameter $request not be null|Request?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
34
     */
35 2
    public function adaptChildren(MenuBuilder $menu, array &$children, MenuItem $parent = null, Request $request = null)
36
    {
37 2
        foreach ($this->menuItems as $item) {
38 2
            if (false === $this->parentMatches($parent, $item)) {
39 2
                continue;
40
            }
41
42 2
            if ($item['role'] && false === $this->authorizationChecker->isGranted($item['role'])) {
43 2
                continue;
44
            }
45
46 2
            $menuItem = new TopMenuItem($menu);
47
            $menuItem
48 2
                ->setRoute($item['route'], $item['params'])
49 2
                ->setLabel($item['label'])
50 2
                ->setUniqueId($item['route'])
51 2
                ->setParent($parent);
52
53 2
            if ($request && null !== $parent && stripos($request->attributes->get('_route'), $menuItem->getRoute()) === 0) {
54 1
                $menuItem->setActive(true);
55 1
                $parent->setActive(true);
56
            }
57
58 2
            $children[] = $menuItem;
59
        }
60 2
    }
61
62
    /**
63
     * @param MenuItem $parent
64
     * @param array    $item
65
     *
66
     * @return bool
67
     */
68 2
    private function parentMatches(MenuItem $parent = null, $item)
69
    {
70 2
        if (null === $parent) {
71 1
            return null === $item['parent'];
72
        }
73
74 1
        return $item['parent'] === $parent->getRoute();
75
    }
76
}
77