Completed
Push — master ( dda193...70e6ba )
by wen
23:11
created

AdminMenu::getAdminMenu()   D

Complexity

Conditions 9
Paths 8

Size

Total Lines 38
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 2
Bugs 0 Features 1
Metric Value
dl 0
loc 38
rs 4.909
c 2
b 0
f 1
ccs 0
cts 8
cp 0
cc 9
eloc 27
nc 8
nop 1
crap 90
1
<?php
2
3
namespace Sco\Admin\Http\Middleware;
4
5
use Auth;
6
use Closure;
7
use Route;
8
use Sco\Admin\Config\Factory as ConfigFactory;
9
10
class AdminMenu
11
{
12
    protected $configFactory;
13
14
    public function __construct(ConfigFactory $configFactory)
15
    {
16
        $this->configFactory = $configFactory;
17
    }
18
19
    /**
20
     * Handle an incoming request.
21
     *
22
     * @param \Illuminate\Http\Request $request
23
     * @param \Closure                 $next
24
     *
25
     * @return mixed
26
     */
27
    public function handle($request, Closure $next)
28
    {
29
        $request->attributes->set('admin.menu',
30
            $this->getAdminMenu(config('admin.menus')));
31
        return $next($request);
32
    }
33
34
    protected function getAdminMenu($list)
35
    {
36
        $menus = collect();
37
        foreach ($list as $key => $items) {
38
            if (is_string($items)) {
39
                $name = 'admin.' . $items;
40
                if (Route::has($name)) {
41
                    if (Auth::user()->can($name)) {
42
                        $menus->push([
43
                            'title' => $key,
44
                            'url'   => route($name),
45
                            'child' => [],
46
                        ]);
47
                    }
48
                } else {
49
                    $config = $this->configFactory->make($items);
50
                    if ($config && $config->getAttribute('permissions.view')) {
51
                        $menus->push([
52
                            'title' => $config->getAttribute('title'),
53
                            'url'   => ('/' . str_replace('.', '/', $name)),
54
                            'child' => [],
55
                        ]);
56
                    }
57
                }
58
            } elseif (is_array($items)) { // child
59
                $childs = $this->getAdminMenu($items);
60
                if ($childs->isNotEmpty()) {
61
                    $menu = [
62
                        'title' => $key,
63
                        'url'   => '/#',
64
                        'child' => $childs,
65
                    ];
66
                    $menus->push($menu);
67
                }
68
            }
69
        }
70
        return $menus;
71
    }
72
}
73