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
|
|
|
|