Passed
Push — dependabot/npm_and_yarn/string... ( b56eb5...bc569b )
by
unknown
45:46 queued 33s
created

MenuItemController   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Test Coverage

Coverage 90%

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 77
ccs 36
cts 40
cp 0.9
rs 10
c 0
b 0
f 0
wmc 9
1
<?php
2
3
namespace Thinktomorrow\Chief\App\Http\Controllers\Back\Menu;
4
5
use Thinktomorrow\Chief\Pages\Page;
6
use Thinktomorrow\Chief\Menu\MenuItem;
7
use Thinktomorrow\Chief\Menu\ChiefMenu;
8
use Thinktomorrow\Chief\Menu\Application\CreateMenu;
9
use Thinktomorrow\Chief\Menu\Application\DeleteMenu;
10
use Thinktomorrow\Chief\Menu\Application\UpdateMenu;
11
use Thinktomorrow\Chief\App\Http\Requests\MenuRequest;
12
use Thinktomorrow\Chief\App\Http\Controllers\Controller;
13
use Thinktomorrow\Chief\FlatReferences\FlatReferencePresenter;
14
use Thinktomorrow\Chief\Management\Managers;
15
16
class MenuItemController extends Controller
17
{
18
    public function create($menutype)
19
    {
20
        $menuitem            = new MenuItem;
21
        $menuitem->type      = MenuItem::TYPE_INTERNAL;  // Default menu type
22
        $menuitem->menu_type = $menutype;
23
24
        $menuitems = ChiefMenu::fromMenuItems($menuitem->menuType())->getForSelect();
25
        $collections = app(Managers::class)->findByTagForSelect('page')->toArray();
26
27
        return view('chief::back.menu.create', [
28
            'pages'            => FlatReferencePresenter::toGroupedSelectValues(Page::all())->toArray(),
29
            'menuitem'         => $menuitem,
30
            'collections'      => $collections,
31
            'internal_page_id' => null,
32
            'parents'          => $menuitems,
33
        ]);
34
    }
35
36
    public function store(MenuRequest $request)
37
    {
38
        $menu = app(CreateMenu::class)->handle($request);
39
40
        return redirect()->route('chief.back.menus.show', $menu->menu_type)->with('messages.success', $menu->label . ' is aangemaakt');
41
    }
42
43
    public function edit($id)
44
    {
45
        $menuitem = MenuItem::findOrFail($id);
46
        $menuitem->injectTranslationForForm();
47
48
        // Transpose selected page_id to the format <class>@<id>
49
        // as expected by t9he select field.
50
        $internal_page_id = null;
51
        if ($menuitem->type == MenuItem::TYPE_INTERNAL && $menuitem->page_id) {
52
            //Archived and deleted pages can no longer be referenced in a menu item
53
            if ($page = Page::find($menuitem->page_id)) {
54
                $internal_page_id = $page->flatReference()->get();
55
            }
56
        }
57
58
        $menuitems   = ChiefMenu::fromMenuItems($menuitem->menuType())->getForSelect($id);
59
60
        // TODO: replace CollectionKeys logic with Page specific one. e.g. Pages::getCollectionsForSelect()
61
        $collections = app(Managers::class)->findByTagForSelect('page')->toArray();
62
63
        $pages = FlatReferencePresenter::toGroupedSelectValues(Page::all()->reject(function ($page) {
64
            return $page->hidden_in_menu == true;
65
        }))->toArray();
66
67
        return view('chief::back.menu.edit', [
68
            'menuitem'         => $menuitem,
69
            'pages'            => $pages,
70
            'collections'      => $collections,
71
            'internal_page_id' => $internal_page_id,
72
            'parents'          => $menuitems,
73
        ]);
74
    }
75
76
    public function update(MenuRequest $request, $id)
77
    {
78
        $menu = app(UpdateMenu::class)->handle($id, $request);
79
80
        return redirect()->route('chief.back.menus.show', $menu->menu_type)->with('messages.success', $menu->label . ' is aangepast');
81
    }
82
83
    public function destroy($id)
84
    {
85
        $menuItem = app(DeleteMenu::class)->handle($id);
86
87
        if ($menuItem) {
88
            $message = 'Het item werd verwijderd.';
89
90
            return redirect()->route('chief.back.menus.show', $menuItem->menuType())->with('messages.warning', $message);
91
        } else {
92
            return redirect()->back()->with('messages.warning', 'Je menu item is niet verwijderd. Probeer opnieuw');
93
        }
94
    }
95
}
96