Menu   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 50
c 2
b 0
f 1
dl 0
loc 100
rs 10
wmc 17

7 Methods

Rating   Name   Duplication   Size   Complexity  
A tree() 0 18 3
A get() 0 10 1
A renderFrontEnd() 0 19 4
A scripts() 0 3 1
A select() 0 14 3
A render() 0 16 4
A getByName() 0 5 1
1
<?php
2
3
namespace Chuckbe\Chuckcms\Chuck\Accessors;
4
5
use Chuckbe\Chuckcms\Models\MenuItems;
6
use Chuckbe\Chuckcms\Models\Menus;
7
8
class Menu
9
{
10
    public function render($pages)
11
    {
12
        $menu = new Menus();
13
        $menuitems = new MenuItems();
14
        $menulist = $menu->select(['id', 'name'])->get();
15
        $menulist = $menulist->pluck('name', 'id')->prepend('Select menu', 0)->all();
16
17
        if ((request()->has('action') && empty(request()->input('menu'))) || request()->input('menu') == '0') {
18
            return view('chuckcms::vendor.chuck-menu.menu-dashboard')->with('menulist', $menulist);
19
        } else {
20
            $menu = Menus::find(request()->input('menu'));
21
            $menus = $menuitems->getall(request()->input('menu'));
22
23
            $data = ['menus' => $menus, 'indmenu' => $menu, 'menulist' => $menulist, 'pages' => $pages];
24
25
            return view('chuckcms::vendor.chuck-menu.menu-dashboard', $data);
26
        }
27
    }
28
29
    public function renderFrontEnd($tslug = null, $fileslug = null, $menuname = null)
30
    {
31
        if ($menuname == null) {
32
            $menu = Menus::find(1);
33
        } else {
34
            $menu = Menus::where('name', $menuname)->first();
35
        }
36
        $menuitems = new MenuItems();
37
        $menus = $menuitems->getall($menu->id);
38
39
        $data = ['menus' => $menus, 'indmenu' => $menu];
40
        if ($tslug == null) {
41
            return view('chuckcms::vendor.chuck-menu.menu-front-end', $data);
42
        }
43
        if ($fileslug == null) {
44
            return view($tslug.'::vendor.chuck-menu.menu-front-end', $data);
45
        }
46
47
        return view($tslug.'::vendor.chuck-menu.'.$fileslug, $data);
48
    }
49
50
    public function scripts()
51
    {
52
        return view('chuckcms::vendor.chuck-menu.scripts');
53
    }
54
55
    public function select($name = 'menu', $menulist = [])
56
    {
57
        $html = '<select name="'.$name.'">';
58
59
        foreach ($menulist as $key => $val) {
60
            $active = '';
61
            if (request()->input('menu') == $key) {
62
                $active = 'selected="selected"';
63
            }
64
            $html .= '<option '.$active.' value="'.$key.'">'.$val.'</option>';
65
        }
66
        $html .= '</select>';
67
68
        return $html;
69
    }
70
71
    public static function getByName($name)
72
    {
73
        $menu_id = Menus::byName($name)->id;
74
75
        return self::get($menu_id);
76
    }
77
78
    public static function get($menu_id)
79
    {
80
        $menuItem = new MenuItems();
81
        $menu_list = $menuItem->getall($menu_id);
82
83
        $roots = $menu_list->where('menu', (int) $menu_id)->where('parent', 0);
84
85
        $items = self::tree($roots, $menu_list);
86
87
        return $items;
88
    }
89
90
    private static function tree($items, $all_items)
91
    {
92
        $data_arr = [];
93
        $i = 0;
94
        foreach ($items as $item) {
95
            $data_arr[$i] = $item->toArray();
96
            $find = $all_items->where('parent', $item->id);
97
98
            $data_arr[$i]['child'] = [];
99
100
            if ($find->count()) {
101
                $data_arr[$i]['child'] = self::tree($find, $all_items);
102
            }
103
104
            $i++;
105
        }
106
107
        return $data_arr;
108
    }
109
}
110