Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Commit 2963e60

Browse files
committed
updates & cleanup
## todo - add new nesting levels
1 parent f005142 commit 2963e60

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+843
-415
lines changed

README.md

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
- Javascript
1313
+ [Vue](https://vuejs.org/)
1414
+ [jQuery](https://jquery.com/)
15+
+ [select2]()
16+
+ [tinymce]()
1517
+ [vuedraggable](https://github.com/SortableJS/Vue.Draggable)
18+
+ [notification-component](https://github.com/ctf0/Notification-Component)
1619

1720
## Installation
1821

@@ -34,7 +37,7 @@
3437

3538
- publish the packages assets with `php artisan vendor:publish`
3639
- for simpleMenu [Wiki](https://github.com/ctf0/simple-menu/wiki/Publish)
37-
- also check the **Dependencies** packages pages for "config/options/migrations".
40+
- also check the **Dependencies** packages for "config/options/migrations".
3841

3942
## Config
4043
**config/simpleMenu.php**
@@ -50,31 +53,40 @@ return [
5053
],
5154

5255
/*
53-
* where to search for the template views relative to "resources\views" folder
56+
* where to search for the template views ? (relative to "resources\views" folder)
5457
*/
5558
'templatePath' => 'pages',
5659

5760
/*
58-
* the path where we will save the route list for multiLocal route resolving
61+
* the path where we will save the routes list
5962
*/
6063
'routeListPath' => storage_path('logs/simpleMenu.php'),
6164

6265
/*
63-
* what happens when a route is available in one locale "en" but not in another "fr", add either
64-
* 'home' = '/' or
65-
* 'error' = '404'
66+
* where to redirect when a route is available in one locale "en" but not in another "fr" ?
6667
*/
6768
'unFoundLocalizedRoute' => 'home',
6869

6970
/*
70-
* pages controller namespace
71+
* pages action controller namespace
7172
*/
72-
'pagesControllerNS'=> 'App\Http\Controllers',
73+
'pagesControllerNS' => 'App\Http\Controllers',
7374

7475
/*
75-
* css farmework
76+
* the user model we are going to use for the admin page
7677
*/
77-
'framework'=> 'bulma',
78+
'userModel' => App\User::class,
79+
80+
/*
81+
* by default when removing a nested page, all of its 'Descendants' gets cleared.
82+
* but what about when removing the root, do you also want the same behavior ?
83+
*/
84+
'clearRootDescendants' => false,
85+
86+
/*
87+
* css farmework for admin pages
88+
*/
89+
'framework' => 'bulma',
7890
];
7991
```
8092

@@ -90,7 +102,3 @@ return [
90102

91103
### Crud Views
92104
[Wiki](https://github.com/ctf0/SimpleMenu/wiki/Crud-Views)
93-
94-
# ToDo
95-
96-
* [ ] Menu Pages Hierarchy "nesting" Creation.

src/Controllers/Admin/AdminController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace ctf0\SimpleMenu\Controllers\Admin;
44

5-
use App\Http\Controllers\Controller;
5+
use ctf0\SimpleMenu\Controllers\BaseController;
66

7-
class AdminController extends Controller
7+
class AdminController extends BaseController
88
{
99
/**
1010
* home.
@@ -13,7 +13,7 @@ class AdminController extends Controller
1313
*/
1414
public function index()
1515
{
16-
return view('SimpleMenu::admin.'.config('simpleMenu.framework').'.admin')->with([
16+
return view("{$this->adminPath}.admin")->with([
1717
'title' => 'DashBoard',
1818
'desc' => 'Admin Description',
1919
]);

src/Controllers/Admin/MenusController.php

Lines changed: 31 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@
22

33
namespace ctf0\SimpleMenu\Controllers\Admin;
44

5-
use App\Http\Controllers\Controller;
5+
use ctf0\SimpleMenu\Controllers\Admin\Traits\MenuOps;
6+
use ctf0\SimpleMenu\Controllers\BaseController;
67
use ctf0\SimpleMenu\Models\Menu;
78
use ctf0\SimpleMenu\Models\Page;
89
use Illuminate\Http\Request;
910
use Illuminate\Support\Facades\DB;
1011

11-
class MenusController extends Controller
12+
class MenusController extends BaseController
1213
{
14+
use MenuOps;
15+
1316
/**
1417
* Display a listing of Menu.
1518
*
1619
* @return \Illuminate\Http\Response
1720
*/
1821
public function index()
1922
{
20-
$menus = Menu::all();
23+
$menus = cache('sm-menus');
2124

22-
return view('SimpleMenu::admin.'.config('simpleMenu.framework').'.menus.index', compact('menus'));
25+
return view("{$this->adminPath}.menus.index", compact('menus'));
2326
}
2427

2528
/**
@@ -29,7 +32,7 @@ public function index()
2932
*/
3033
public function create()
3134
{
32-
return view('SimpleMenu::admin.'.config('simpleMenu.framework').'.menus.create');
35+
return view("{$this->adminPath}.menus.create");
3336
}
3437

3538
/**
@@ -47,6 +50,8 @@ public function store(Request $request)
4750

4851
Menu::create($request->all());
4952

53+
$this->clearCache();
54+
5055
return redirect()->route('admin.menus.index');
5156
}
5257

@@ -59,9 +64,9 @@ public function store(Request $request)
5964
*/
6065
public function edit($id)
6166
{
62-
$menu = Menu::findOrFail($id);
67+
$menu = cache('sm-menus')->find($id);
6368

64-
return view('SimpleMenu::admin.'.config('simpleMenu.framework').'.menus.edit', compact('menu'));
69+
return view("{$this->adminPath}.menus.edit", compact('menu'));
6570
}
6671

6772
/**
@@ -78,18 +83,28 @@ public function update($id, Request $request)
7883
'name' => 'required|unique:menus,name,'.$id,
7984
]);
8085

81-
$menu = Menu::findOrFail($id);
86+
$menu = Menu::find($id);
87+
88+
// clear prev records
89+
DB::table('menu_page')->where('menu_id', $menu->id)->delete();
8290

8391
foreach (json_decode($request->saveList) as $item) {
84-
$menu->pages()->sync($item->id, false);
85-
DB::table('menu_page')->where('page_id', $item->id)->update(['order'=>$item->order]);
92+
// make sure page is not included under any other pages
93+
$this->clearSelfAndNests($item->id);
94+
95+
// save page hierarchy
96+
if ($item->children) {
97+
$this->saveListToDb($item->children);
98+
}
99+
100+
// update the menu root list
101+
$menu->pages()->attach($item->id, ['order'=>$item->order]);
86102
}
87103

104+
// update and trigger events
88105
$menu->update($request->except('saveList'));
89106

90-
/*
91-
* todo "page nest list"
92-
*/
107+
$this->clearCache();
93108

94109
return back();
95110
}
@@ -103,53 +118,10 @@ public function update($id, Request $request)
103118
*/
104119
public function destroy($id)
105120
{
106-
Menu::findOrFail($id)->delete();
121+
Menu::find($id)->delete();
107122

108-
return redirect()->route('admin.menus.index');
109-
}
123+
$this->clearCache();
110124

111-
/**
112-
* get all menu pages for vuejs.
113-
*
114-
* @param Menu $id [description]
115-
*
116-
* @return [type] [description]
117-
*/
118-
public function getMenuPages($id)
119-
{
120-
$pages = Menu::findOrFail($id)->pages()->orderBy('pivot_order', 'asc')->get();
121-
122-
$pages->map(function ($item) {
123-
if (count($childs = $item->getDescendants()->toHierarchy())) {
124-
$item['children'] = $childs;
125-
}
126-
});
127-
128-
$allPages = Page::all()->diff($pages);
129-
130-
$allPages->map(function ($item) {
131-
if (count($childs = $item->getDescendants()->toHierarchy())) {
132-
$item['children'] = $childs;
133-
}
134-
});
135-
136-
return response()->json(compact('pages', 'allPages'));
137-
}
138-
139-
/**
140-
* remove page from menu with ajax.
141-
*
142-
* @param [type] $id [description]
143-
* @param Request $request [description]
144-
*
145-
* @return [type] [description]
146-
*/
147-
public function removePage($id, Request $request)
148-
{
149-
if (Menu::findOrFail($id)->pages()->detach($request->page_id)) {
150-
Menu::find($id)->touch();
151-
152-
return response()->json(['done'=>true]);
153-
}
125+
return redirect()->route('admin.menus.index');
154126
}
155127
}

0 commit comments

Comments
 (0)