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

Commit 26a0eb4

Browse files
committed
v2.1.0
- add crud views & controllers - add model observers instead of model noise - update vendor publish - update wiki - update rdme - add extra config “framework” for easier editing
1 parent 77f2d09 commit 26a0eb4

Some content is hidden

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

45 files changed

+1996
-94
lines changed

README.md

+11-12
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727
]
2828
```
2929

30-
- publish the package assets with `php artisan vendor:publish` [Wiki](https://github.com/ctf0/simple-menu/wiki/Publish)
30+
- publish the packages assets with `php artisan vendor:publish`
31+
- for simpleMenu [Wiki](https://github.com/ctf0/simple-menu/wiki/Publish)
32+
- also check the **Dependencies** packages pages for "config/options/migrations".
33+
34+
- check `resources/assets/vendor/SimpleMenu` and add the **component & styles** to your build system.
3135

3236
## Config
3337
**config/simpleMenu.php**
@@ -63,6 +67,9 @@ return [
6367
* pages controller namespace
6468
*/
6569
'pagesControllerNS'=> 'App\Http\Controllers',
70+
71+
// css farmework
72+
'framework'=> 'bulma',
6673
];
6774
```
6875

@@ -85,18 +92,10 @@ Ofcourse you are free to code your app the way you want, but just in-case here a
8592
| route_name | str_slug(Some Title) | some-title |
8693
| action | SomeController\camelCase(Some Title) | someTitle |
8794

88-
## Notes
89-
- you can get any page params like (**template, title, body, desc, breadCrump**) by using `extract(SimpleMenu::getRouteData('the-route-name'));`
90-
91-
<u>**or**</u>
92-
93-
- if you followed the naming convention above and you are inside the `page action method`, you can instead use `extract(SimpleMenu::getRouteData(kebab_case('theCurrentMethodName')));`
94-
95-
| method name | format | output = route_name |
96-
|-------------|-------------------------|---------------------|
97-
| contactUs | kebab_case('contactUs') | contact-us |
95+
### Crud Views
96+
[Wiki](https://github.com/ctf0/SimpleMenu/wiki/Crud-Views)
9897

9998
# ToDo
10099

101-
* [ ] CRUD Views for (roles/perms/pages/menus).
102100
* [ ] Clear cache through pivot table events.
101+
* [ ] Assign Pages to Menus with Drag & Drop.
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace ctf0\SimpleMenu\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
7+
class AdminController extends Controller
8+
{
9+
/**
10+
* home.
11+
*
12+
* @return [type] [description]
13+
*/
14+
public function index()
15+
{
16+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.admin')->with([
17+
'title' => 'DashBoard',
18+
'desc' => 'Admin Description',
19+
]);
20+
}
21+
}
+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
namespace ctf0\SimpleMenu\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use ctf0\SimpleMenu\Models\Menu;
7+
use Illuminate\Http\Request;
8+
9+
class MenusController extends Controller
10+
{
11+
/**
12+
* Display a listing of Permission.
13+
*
14+
* @return \Illuminate\Http\Response
15+
*/
16+
public function index()
17+
{
18+
$menus = Menu::all();
19+
20+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.menus.index', compact('menus'));
21+
}
22+
23+
/**
24+
* Show the form for creating new Permission.
25+
*
26+
* @return \Illuminate\Http\Response
27+
*/
28+
public function create()
29+
{
30+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.menus.create');
31+
}
32+
33+
/**
34+
* Store a newly created Permission in storage.
35+
*
36+
* @param \App\Http\Requests\StoreMenusRequest $request
37+
*
38+
* @return \Illuminate\Http\Response
39+
*/
40+
public function store(Request $request)
41+
{
42+
$this->validate($request, [
43+
'name' => 'required',
44+
]);
45+
46+
Menu::create($request->all());
47+
48+
return redirect()->route('admin.menus.index');
49+
}
50+
51+
/**
52+
* Show the form for editing Permission.
53+
*
54+
* @param int $id
55+
*
56+
* @return \Illuminate\Http\Response
57+
*/
58+
public function edit($id)
59+
{
60+
$menu = Menu::findOrFail($id);
61+
62+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.menus.edit', compact('menu'));
63+
}
64+
65+
/**
66+
* Update Permission in storage.
67+
*
68+
* @param \App\Http\Requests\UpdateMenusRequest $request
69+
* @param int $id
70+
*
71+
* @return \Illuminate\Http\Response
72+
*/
73+
public function update(Request $request, $id)
74+
{
75+
$this->validate($request, [
76+
'name' => 'required',
77+
]);
78+
79+
Menu::findOrFail($id)->update($request->all());
80+
81+
return redirect()->route('admin.menus.index');
82+
}
83+
84+
/**
85+
* Remove Permission from storage.
86+
*
87+
* @param int $id
88+
*
89+
* @return \Illuminate\Http\Response
90+
*/
91+
public function destroy($id)
92+
{
93+
Menu::findOrFail($id)->delete();
94+
95+
return redirect()->route('admin.menus.index');
96+
}
97+
}
+211
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
<?php
2+
3+
namespace ctf0\SimpleMenu\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use ctf0\SimpleMenu\Models\Page;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\DB;
9+
use Illuminate\Support\Facades\Validator;
10+
use Illuminate\Validation\ValidationException;
11+
use Spatie\Permission\Models\Permission;
12+
use Spatie\Permission\Models\Role;
13+
14+
class PagesController extends Controller
15+
{
16+
/**
17+
* Display a listing of Page.
18+
*
19+
* @return \Illuminate\Http\Response
20+
*/
21+
public function index()
22+
{
23+
$pages = Page::where('title->'.app()->getLocale(), '!=', '')->get();
24+
25+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.pages.index', compact('pages'));
26+
}
27+
28+
/**
29+
* Show the form for creating new Page.
30+
*
31+
* @return \Illuminate\Http\Response
32+
*/
33+
public function create()
34+
{
35+
$roles = Role::get()->pluck('name', 'name');
36+
$permissions = Permission::get()->pluck('name', 'name');
37+
38+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.pages.create', compact('roles', 'permissions'));
39+
}
40+
41+
/**
42+
* Store a newly created Page in storage.
43+
*
44+
* @param \App\Http\Requests\StorePagesRequest $request
45+
*
46+
* @return \Illuminate\Http\Response
47+
*/
48+
public function store(Request $request)
49+
{
50+
$this->storeValidation($request);
51+
52+
$page = Page::create($this->cleanEmptyTrans($request));
53+
$roles = $request->input('roles') ?: [];
54+
$permissions = $request->input('permissions') ?: [];
55+
56+
$page->assignRole($roles);
57+
$page->givePermissionTo($permissions);
58+
59+
return redirect()->route('admin.pages.index');
60+
}
61+
62+
/**
63+
* Show the form for editing Page.
64+
*
65+
* @param int $id
66+
*
67+
* @return \Illuminate\Http\Response
68+
*/
69+
public function edit($id)
70+
{
71+
$page = Page::findOrFail($id);
72+
$roles = Role::get()->pluck('name', 'name');
73+
$permissions = Permission::get()->pluck('name', 'name');
74+
75+
return view('SimpleMenu::pages.'.config('simpleMenu.framework').'.pages.edit', compact('page', 'roles', 'permissions'));
76+
}
77+
78+
/**
79+
* Update Page in storage.
80+
*
81+
* @param \App\Http\Requests\UpdatePagesRequest $request
82+
* @param int $id
83+
*
84+
* @return \Illuminate\Http\Response
85+
*/
86+
public function update(Request $request, $id)
87+
{
88+
$this->updateValidation($request, $id);
89+
90+
$page = Page::findOrFail($id);
91+
$roles = $request->input('roles') ?: [];
92+
$permissions = $request->input('permissions') ?: [];
93+
94+
$page->update($this->cleanEmptyTrans($request));
95+
$page->syncRoles($roles);
96+
$page->syncPermissions($permissions);
97+
98+
return redirect()->route('admin.pages.index');
99+
}
100+
101+
/**
102+
* Remove Page from storage.
103+
*
104+
* @param int $id
105+
*
106+
* @return \Illuminate\Http\Response
107+
*/
108+
public function destroy($id)
109+
{
110+
Page::findOrFail($id)->delete();
111+
DB::table('model_has_roles')->where('model_id', $id)->delete();
112+
DB::table('model_has_permissions')->where('model_id', $id)->delete();
113+
114+
return redirect()->route('admin.pages.index');
115+
}
116+
117+
/**
118+
* [storeValidation description].
119+
*
120+
* @param [type] $request [description]
121+
*
122+
* @return [type] [description]
123+
*/
124+
protected function storeValidation($request)
125+
{
126+
$validator = Validator::make($request->all(), [
127+
'route_name' => 'required|unique:pages,route_name',
128+
'template' => 'required_without:action',
129+
'roles' => 'required',
130+
'permissions' => 'required',
131+
]);
132+
133+
// because laravel is pretty fucked up when it comes to showing input array error
134+
$validator->after(function ($validator) use ($request) {
135+
if (!array_filter($request->url)) {
136+
$validator->errors()->add('url', 'The Url is required');
137+
}
138+
139+
if (!array_filter($request->title)) {
140+
$validator->errors()->add('title', 'The Title is required');
141+
}
142+
});
143+
144+
if ($validator->fails()) {
145+
throw new ValidationException($validator, $this->buildFailedValidationResponse(
146+
$request, $this->formatValidationErrors($validator)
147+
));
148+
}
149+
}
150+
151+
/**
152+
* [updateValidation description].
153+
*
154+
* @param [type] $request [description]
155+
* @param [type] $id [description]
156+
*
157+
* @return [type] [description]
158+
*/
159+
protected function updateValidation($request, $id)
160+
{
161+
$validator = Validator::make($request->all(), [
162+
'route_name' => 'required|unique:pages,route_name,'.$id,
163+
'template' => 'required_without:action',
164+
'roles' => 'required',
165+
'permissions' => 'required',
166+
]);
167+
168+
// because laravel is pretty fucked up when it comes to showing input array error
169+
$validator->after(function ($validator) use ($request) {
170+
if (!array_filter($request->url)) {
171+
$validator->errors()->add('url', 'Url is required');
172+
}
173+
174+
if (!array_filter($request->title)) {
175+
$validator->errors()->add('title', 'The Title is required');
176+
}
177+
});
178+
179+
if ($validator->fails()) {
180+
throw new ValidationException($validator, $this->buildFailedValidationResponse(
181+
$request, $this->formatValidationErrors($validator)
182+
));
183+
}
184+
}
185+
186+
/**
187+
* [cleanEmptyTrans description].
188+
*
189+
* @param [type] $request [description]
190+
*
191+
* @return [type] [description]
192+
*/
193+
protected function cleanEmptyTrans($request)
194+
{
195+
$result = $request->except(['roles', 'permissions']);
196+
foreach ($result as $k =>$v) {
197+
if ($v == null) {
198+
unset($result[$k]);
199+
}
200+
if (is_array($v)) {
201+
if (empty(array_filter($v))) {
202+
unset($result[$k]);
203+
} else {
204+
$result[$k] = array_filter($v);
205+
}
206+
}
207+
}
208+
209+
return $result;
210+
}
211+
}

0 commit comments

Comments
 (0)