Skip to content

Commit b46ec75

Browse files
author
Povilas Korop
committed
Merge branch 'GiedriusQ-master'
2 parents e84ec6d + e92eb53 commit b46ec75

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

+592
-244
lines changed

src/Commands/QuickAdminInstall.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public function copyInitial()
6363
database_path('migrations' . DIRECTORY_SEPARATOR . '2015_10_10_000000_create_menus_table.php'));
6464
copy(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . '2015_12_11_000000_create_users_logs_table',
6565
database_path('migrations' . DIRECTORY_SEPARATOR . '2015_12_11_000000_create_users_logs_table.php'));
66+
copy(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Migrations' . DIRECTORY_SEPARATOR . '2016_03_14_000000_update_menus_table',
67+
database_path('migrations' . DIRECTORY_SEPARATOR . '2016_03_14_000000_update_menus_table.php'));
6668
copy(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'publish' . DIRECTORY_SEPARATOR . 'User',
6769
app_path('User.php'));
6870
$this->info('Migrations were transferred successfully');
@@ -99,10 +101,17 @@ public function createUser()
99101
*/
100102
public function copyMasterTemplate()
101103
{
102-
Menu::create([
103-
'name' => 'User',
104-
'title' => 'User',
105-
'menu_type' => 0
104+
Menu::insert([
105+
[
106+
'name' => 'User',
107+
'title' => 'User',
108+
'menu_type' => 0
109+
],
110+
[
111+
'name' => 'Role',
112+
'title' => 'Role',
113+
'menu_type' => 0
114+
]
106115
]);
107116
$this->callSilent('vendor:publish', [
108117
'--tag' => ['quickadmin'],
@@ -111,3 +120,4 @@ public function copyMasterTemplate()
111120
$this->info('Master template was transferred successfully');
112121
}
113122
}
123+

src/Controllers/QuickadminMenuController.php

Lines changed: 17 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function createCrud()
7575
$defaultValuesCbox = FieldsDescriber::default_cbox();
7676
$menusSelect = Menu::whereNotIn('menu_type', [2, 3])->lists('title', 'id');
7777
$roles = Role::all();
78-
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', 'null');
78+
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', null);
7979
// Get columns for relationship
8080
$models = [];
8181
foreach (Menu::whereNotIn('menu_type', [2, 3])->get() as $menu) {
@@ -166,27 +166,15 @@ public function insertCrud(Request $request)
166166
$cached['name'] = $request->name;
167167
$cached['soft_delete'] = $request->soft;
168168
$cache->put('fieldsinfo', $cached);
169-
$roles = Role::all();
170-
$rolesInsert = '';
171-
$first = true;
172-
foreach ($roles as $role) {
173-
if ($request->{'role-' . $role->id} == 1) {
174-
if ($first != true) {
175-
$rolesInsert .= ',';
176-
}
177-
$rolesInsert .= $role->id;
178-
$first = false;
179-
}
180-
}
181169
// Create menu entry
182-
Menu::create([
170+
$menu = Menu::create([
183171
'position' => 0,
184172
'icon' => $request->icon != '' ? $request->icon : 'fa-database',
185173
'name' => $request->name,
186174
'title' => $request->title,
187-
'parent_id' => $request->parent_id != 0 ? $request->parent_id : null,
188-
'roles' => $rolesInsert
175+
'parent_id' => $request->parent_id ? : null,
189176
]);
177+
$menu->roles()->sync($request->input('roles', []));
190178
// Create migrations
191179
$migrationBuilder = new MigrationBuilder();
192180
$migrationBuilder->build();
@@ -238,27 +226,15 @@ public function insertParent(Request $request)
238226
if ($validation->fails()) {
239227
return redirect()->back()->withInput()->withErrors($validation);
240228
}
241-
$roles = Role::all();
242-
$rolesInsert = '';
243-
$first = true;
244-
foreach ($roles as $role) {
245-
if ($request->{'role-' . $role->id} == 1) {
246-
if ($first != true) {
247-
$rolesInsert .= ',';
248-
}
249-
$rolesInsert .= $role->id;
250-
$first = false;
251-
}
252-
}
253-
Menu::create([
229+
$menu = Menu::create([
254230
'position' => 0,
255231
'menu_type' => 2,
256232
'icon' => $request->icon != '' ? $request->icon : 'fa-database',
257233
'name' => ucfirst(camel_case($request->title)),
258234
'title' => $request->title,
259235
'parent_id' => null,
260-
'roles' => $rolesInsert
261236
]);
237+
$menu->roles()->sync($request->input('roles', []));
262238

263239
return redirect()->route('menu');
264240
}
@@ -269,7 +245,7 @@ public function insertParent(Request $request)
269245
*/
270246
public function createCustom()
271247
{
272-
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', 'null');
248+
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', null);
273249
$roles = Role::all();
274250

275251
return view('qa::menus.createCustom', compact('parentsSelect', 'roles'));
@@ -299,62 +275,38 @@ public function insertCustom(Request $request)
299275
$viewsBuilder = new ViewsBuilder();
300276
$viewsBuilder->buildCustom($request->name);
301277

302-
$roles = Role::all();
303-
$rolesInsert = '';
304-
$first = true;
305-
foreach ($roles as $role) {
306-
if ($request->{'role-' . $role->id} == 1) {
307-
if ($first != true) {
308-
$rolesInsert .= ',';
309-
}
310-
$rolesInsert .= $role->id;
311-
$first = false;
312-
}
313-
}
314-
Menu::create([
278+
$menu = Menu::create([
315279
'position' => 0,
316280
'menu_type' => 3,
317281
'icon' => $request->icon != '' ? $request->icon : 'fa-database',
318282
'name' => $request->name,
319283
'title' => $request->title,
320-
'parent_id' => $request->parent_id != 0 ? $request->parent_id : null,
321-
'roles' => $rolesInsert
284+
'parent_id' => $request->parent_id ? : null,
322285
]);
286+
$menu->roles()->sync($request->input('roles', []));
323287

324288
return redirect()->route('menu');
325289
}
326290

327291
public function edit($id)
328292
{
329293
$menu = Menu::findOrFail($id);
330-
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', 'null');
294+
$parentsSelect = Menu::where('menu_type', 2)->lists('title', 'id')->prepend('-- no parent --', null);
331295
$roles = Role::all();
332296

333297
return view('qa::menus.edit', compact('menu', 'parentsSelect', 'roles'));
334298
}
335299

336300
public function update(Request $request, $id)
337301
{
338-
$roles = Role::all();
339-
$rolesInsert = '';
340-
$first = true;
341-
foreach ($roles as $role) {
342-
if ($request->{'role-' . $role->id} == 1) {
343-
if ($first != true) {
344-
$rolesInsert .= ',';
345-
}
346-
$rolesInsert .= $role->id;
347-
$first = false;
348-
}
349-
}
350-
$requestArray = $request->all();
351-
if (!isset($requestArray['parent_id'])) {
352-
$requestArray['parent_id'] = null;
353-
}
354-
$requestArray['roles'] = $rolesInsert;
355-
$menu = Menu::findOrFail($id);
302+
$requestArray = $request->all();
303+
$requestArray['parent_id'] = $requestArray['parent_id'] ? : null;
304+
$menu = Menu::findOrFail($id);
356305
$menu->update($requestArray);
306+
$menu->roles()->sync($request->input('roles', []));
357307

358308
return redirect()->route('menu');
359309
}
360310
}
311+
312+

src/Controllers/publish/FileUploadTrait

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<?php namespace App\Http\Controllers\Traits;
1+
<?php
2+
3+
namespace App\Http\Controllers\Traits;
24

35
use Illuminate\Http\Request;
46
use Intervention\Image\Facades\Image;
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Role;
6+
use Illuminate\Http\Request;
7+
8+
class RolesController extends Controller
9+
{
10+
/**
11+
* @var Role
12+
*/
13+
protected $roles;
14+
15+
public function __construct(Role $roles)
16+
{
17+
$this->roles = $roles;
18+
}
19+
20+
/**
21+
* Show a list of roles
22+
* @return \Illuminate\View\View
23+
*/
24+
public function index()
25+
{
26+
$roles = $this->roles->get();
27+
28+
return view('admin.roles.index', compact('roles'));
29+
}
30+
31+
/**
32+
* Show a page of user creation
33+
* @return \Illuminate\View\View
34+
*/
35+
public function create()
36+
{
37+
return view('admin.roles.create');
38+
}
39+
40+
/**
41+
* Insert new role into the system
42+
*
43+
* @param Request $request
44+
*
45+
* @return \Illuminate\Http\RedirectResponse
46+
*/
47+
public function store(Request $request)
48+
{
49+
$this->roles->create($request->only('title'));
50+
51+
return redirect()->route('roles.index')->withMessage(trans('quickadmin::admin.roles-controller-successfully_created'));
52+
}
53+
54+
/**
55+
* Show a role edit page
56+
*
57+
* @param $id
58+
*
59+
* @return \Illuminate\View\View
60+
*/
61+
public function edit($id)
62+
{
63+
$role = $this->roles->findOrFail($id);
64+
65+
return view('admin.roles.edit', compact('role'));
66+
}
67+
68+
/**
69+
* Update our role information
70+
*
71+
* @param Request $request
72+
* @param $id
73+
*
74+
* @return \Illuminate\Http\RedirectResponse
75+
*/
76+
public function update(Request $request, $id)
77+
{
78+
$this->roles->findOrFail($id)->update($request->only('title'));
79+
80+
return redirect()->route('roles.index')->withMessage(trans('quickadmin::admin.roles-controller-successfully_updated'));
81+
}
82+
83+
/**
84+
* Destroy specific role
85+
*
86+
* @param $id
87+
*
88+
* @return \Illuminate\Http\RedirectResponse
89+
*/
90+
public function destroy($id)
91+
{
92+
$this->roles->findOrFail($id)->delete();
93+
94+
return redirect()->route('roles.index')->withMessage(trans('quickadmin::admin.roles-controller-successfully_deleted'));
95+
}
96+
}
97+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
6+
class UpdateMenusTable extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
Schema::table('menus', function (Blueprint $table) {
16+
$table->dropColumn('roles')->nullable();
17+
});
18+
Schema::create('menu_role', function (Blueprint $table) {
19+
$table->integer('menu_id')->unsigned()->index();
20+
$table->foreign('menu_id')->references('id')->on('menus')->onDelete('cascade');
21+
$table->integer('role_id')->unsigned()->index();
22+
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
23+
$table->unique(['menu_id', 'role_id']);
24+
});
25+
}
26+
27+
/**
28+
* Reverse the migrations.
29+
*
30+
* @return void
31+
*/
32+
public function down()
33+
{
34+
Schema::drop('menu_role');
35+
Schema::table('menus', function (Blueprint $table) {
36+
$table->string('roles')->nullable()->after('parent_id');
37+
});
38+
}
39+
}

src/Models/Menu.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Laraveldaily\Quickadmin\Models;
34

45
use Illuminate\Database\Eloquent\Model;
@@ -13,9 +14,10 @@ class Menu extends Model
1314
'name',
1415
'title',
1516
'parent_id',
16-
'roles'
1717
];
1818

19+
public $relation_ids = [];
20+
1921
/**
2022
* Convert name to ucfirst() and camelCase
2123
*
@@ -34,4 +36,22 @@ public function children()
3436
{
3537
return $this->hasMany('Laraveldaily\Quickadmin\Models\Menu', 'parent_id', 'id')->orderBy('position');
3638
}
37-
}
39+
40+
public function roles()
41+
{
42+
return $this->belongsToMany(Role::class);
43+
}
44+
45+
public function availableForRole($role)
46+
{
47+
if ($role instanceof Role) {
48+
$role = $role->id;
49+
}
50+
51+
if (! isset($this->relation_ids['roles'])) {
52+
$this->relation_ids['roles'] = $this->roles()->pluck('id')->flip()->all();
53+
}
54+
55+
return isset($this->relation_ids['roles'][$role]);
56+
}
57+
}

0 commit comments

Comments
 (0)