Completed
Push — master ( d1079a...aa7461 )
by wen
05:09
created

AdminMenu::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
ccs 0
cts 0
cp 0
cc 1
eloc 2
nc 1
nop 1
crap 2
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
13
    /**
14
     * Handle an incoming request.
15
     *
16
     * @param \Illuminate\Http\Request $request
17
     * @param \Closure                 $next
18
     *
19
     * @return mixed
20
     */
21
    public function handle($request, Closure $next)
22
    {
23
        $request->attributes->set('admin.menu',
24
            $this->getAdminMenu(config('admin.menus')));
25
        return $next($request);
26
    }
27
28
    protected function getAdminMenu($list)
29
    {
30
        $menus = collect();
31
        foreach ($list as $key => $items) {
32
            if (is_string($items)) {
33
                if (Route::has($items)) {
34
                    if (Auth::user()->can($items)) {
35
                        $menus->push([
36
                            'title' => $key,
37
                            'url'   => route($items, [], false),
38
                            'child' => [],
39
                        ]);
40
                    }
41
                } else {
42
                    $config = app('admin.config.factory')->make($items);
43
                    if ($config && $config->getAttribute('permissions.view')) {
44
                        $model = str_replace('.', '/', $items);
45
                        $menus->push([
46
                            'title' => $config->getAttribute('title'),
47
                            'url'   => route('admin.model.index', ['model' => $model], false),
48
                            'child' => [],
49
                        ]);
50
                    }
51
                }
52
            } elseif (is_array($items)) { // child
53
                $childs = $this->getAdminMenu($items);
54
                if ($childs->isNotEmpty()) {
55
                    $menu = [
56
                        'title' => $key,
57
                        'url'   => '/#',
58
                        'child' => $childs,
59
                    ];
60
                    $menus->push($menu);
61
                }
62
            }
63
        }
64
        return $menus;
65
    }
66
}
67