Completed
Pull Request — master (#610)
by Diego
03:35
created

AdminLte::buildMenu()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
namespace JeroenNoten\LaravelAdminLte;
4
5
use Illuminate\Contracts\Container\Container;
6
use Illuminate\Contracts\Events\Dispatcher;
7
use JeroenNoten\LaravelAdminLte\Events\BuildingMenu;
8
use JeroenNoten\LaravelAdminLte\Helpers\MenuItemHelper;
9
use JeroenNoten\LaravelAdminLte\Menu\Builder;
10
11
class AdminLte
12
{
13
    protected $menu;
14
15
    protected $filters;
16
17
    protected $events;
18
19
    protected $container;
20
21
    /**
22
     * Map between a valid menu filter token and his respective filter method.
23
     *
24
     * @var array
25
     */
26
    protected $menuFilterMap;
27
28 5
    public function __construct(
29
        array $filters,
30
        Dispatcher $events,
31
        Container $container
32
    ) {
33 5
        $this->filters = $filters;
34 5
        $this->events = $events;
35 5
        $this->container = $container;
36
37
        // Fill the map of filters methods.
38
39 5
        $this->menuFilterMap = [
40 5
            'sidebar'      => [$this, 'sidebarFilter'],
41 5
            'navbar-left'  => [$this, 'navbarLeftFilter'],
42 5
            'navbar-right' => [$this, 'navbarRightFilter'],
43 5
            'navbar-user'  => [$this, 'navbarUserMenuFilter'],
44
        ];
45 5
    }
46
47 5
    public function menu($filterToken = null)
48
    {
49 5
        if (! $this->menu) {
50 5
            $this->menu = $this->buildMenu();
51
        }
52
53
        // Check for filter token.
54
55 5
        if (isset($this->menuFilterMap[$filterToken])) {
56 4
            return array_filter(
57 4
                $this->menu,
58 4
                $this->menuFilterMap[$filterToken]
59
            );
60
        }
61
62
        // No filter token provided, return the complete menu.
63
64 1
        return $this->menu;
65
    }
66
67 5
    protected function buildMenu()
68
    {
69 5
        $builder = new Builder($this->buildFilters());
70
71 5
        $this->events->dispatch(new BuildingMenu($builder));
72
73 5
        return $builder->menu;
74
    }
75
76 5
    protected function buildFilters()
77
    {
78 5
        return array_map([$this->container, 'make'], $this->filters);
79
    }
80
81
    /**
82
     * Filter method for sidebar menu items.
83
     */
84 1
    private function sidebarFilter($item)
85
    {
86 1
        return MenuItemHelper::isSidebarItem($item);
87
    }
88
89
    /**
90
     * Filter method for navbar top left menu items.
91
     */
92 1
    private function navbarLeftFilter($item)
93
    {
94 1
        if (config('adminlte.layout_topnav') && MenuItemHelper::isSidebarItem($item)) {
95 1
            return MenuItemHelper::isValidNavbarItem($item);
96
        }
97
98 1
        return MenuItemHelper::isNavbarLeftItem($item);
99
    }
100
101
    /**
102
     * Filter method for navbar top right menu items.
103
     */
104 1
    private function navbarRightFilter($item)
105
    {
106 1
        return MenuItemHelper::isNavbarRightItem($item);
107
    }
108
109
    /**
110
     * Filter method for navbar dropdown user menu items.
111
     */
112 1
    private function navbarUserMenuFilter($item)
113
    {
114 1
        return MenuItemHelper::isNavbarUserItem($item);
115
    }
116
}
117