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

AdminMenu   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 6
Bugs 1 Features 1
Metric Value
wmc 10
lcom 0
cbo 4
dl 0
loc 57
rs 10
c 6
b 1
f 1
ccs 0
cts 21
cp 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A handle() 0 6 1
D getAdminMenu() 0 38 9
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