Completed
Push — master ( 23bd67...786b39 )
by wen
14:38
created

AdminMenu   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 0%

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A handle() 0 6 1
B getAdminMenu() 0 25 5
A getRouteUrl() 0 6 2
1
<?php
2
3
namespace Sco\Admin\Http\Middleware;
4
5
use Auth;
6
use Closure;
7
use Route;
8
use Sco\Admin\Models\Permission;
9
10
class AdminMenu
11
{
12
    /**
13
     * Handle an incoming request.
14
     *
15
     * @param \Illuminate\Http\Request $request
16
     * @param \Closure                 $next
17
     *
18
     * @return mixed
19
     */
20
    public function handle($request, Closure $next)
21
    {
22
        $request->attributes->set('admin.menu',
23
            $this->getAdminMenu(config('admin.menus')));
24
        return $next($request);
25
    }
26
27
    protected function getAdminMenu($list)
28
    {
29
        $menus = collect();
30
        foreach ($list as $key => $items) {
31
            if (is_string($items)) {
32
                $menu = [
33
                    'title' => $items,
34
                    'url'   => $this->getRouteUrl('admin.' . $items),
35
                    'child' => [],
36
                ];
37
                $menus->push($menu);
38
            } elseif (is_array($items)) { // child
39
                $childs = $this->getAdminMenu($items);
40
                if (!empty($childs)) {
41
                    $menu = [
42
                        'title' => $key,
43
                        'url'   => '/#',
44
                        'child' => $childs,
45
                    ];
46
                    $menus->push($menu);
47
                }
48
            }
49
        }
50
        return $menus;
51
    }
52
53
    private function getRouteUrl($name)
54
    {
55
        return Route::has($name) ? route($name, [], false)
56
            : ('/' . str_replace('.', '/', $name));
57
58
    }
59
}
60