RolesController   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 117
Duplicated Lines 23.08 %

Coupling/Cohesion

Components 2
Dependencies 8

Importance

Changes 0
Metric Value
dl 27
loc 117
rs 10
c 0
b 0
f 0
wmc 9
lcom 2
cbo 8

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A index() 0 4 1
A create() 0 8 1
A edit() 0 6 1
A update() 0 14 1
A destroy() 14 14 3
A store() 13 13 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Yajra\CMS\Http\Controllers;
4
5
use Yajra\CMS\DataTables\RolesDataTable;
6
use Illuminate\Database\QueryException;
7
use Illuminate\Http\Request;
8
use Yajra\Acl\Models\Permission;
9
use Yajra\Acl\Models\Role;
10
11
class RolesController extends Controller
12
{
13
    /**
14
     * @var \Illuminate\Http\Request
15
     */
16
    protected $request;
17
18
    /**
19
     * RolesController constructor.
20
     *
21
     * @param \Illuminate\Http\Request $request
22
     */
23
    public function __construct(Request $request)
0 ignored issues
show
Bug introduced by
You have injected the Request via parameter $request. This is generally not recommended as there might be multiple instances during a request cycle (f.e. when using sub-requests). Instead, it is recommended to inject the RequestStack and retrieve the current request each time you need it via getCurrentRequest().
Loading history...
24
    {
25
        $this->request = $request;
26
        $this->authorizePermissionResource('role');
27
    }
28
29
    /**
30
     * Display list of roles.
31
     *
32
     * @param \Yajra\CMS\DataTables\RolesDataTable $dataTable
33
     * @return \Illuminate\Http\JsonResponse|\Illuminate\View\View
34
     */
35
    public function index(RolesDataTable $dataTable)
36
    {
37
        return $dataTable->render('administrator.roles.index');
38
    }
39
40
    /**
41
     * Show role form.
42
     *
43
     * @return \Illuminate\View\View
44
     */
45
    public function create()
46
    {
47
        $role                = new Role;
48
        $permissions         = Permission::all();
49
        $selectedPermissions = $this->request->old('permissions', []);
50
51
        return view('administrator.roles.create', compact('role', 'permissions', 'selectedPermissions'));
52
    }
53
54
    /**
55
     * Store a newly created role.
56
     *
57
     * @return \Illuminate\Http\RedirectResponse
58
     */
59 View Code Duplication
    public function store()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
60
    {
61
        $this->validate($this->request, [
62
            'name' => 'required',
63
            'slug' => 'required|unique:roles,slug',
64
        ]);
65
66
        $role = Role::create($this->request->all());
67
        $role->syncPermissions($this->request->get('permissions', []));
68
        flash()->success('Role ' . $role->name . ' successfully created!');
69
70
        return redirect()->route('administrator.roles.index');
71
    }
72
73
    /**
74
     * Show and edit selected role.
75
     *
76
     * @param \Yajra\Acl\Models\Role $role
77
     * @return \Illuminate\View\View
78
     */
79
    public function edit(Role $role)
80
    {
81
        $permissions = Permission::all();
82
83
        return view('administrator.roles.edit', compact('role', 'permissions'));
84
    }
85
86
    /**
87
     * Update role permission.
88
     *
89
     * @param \Yajra\Acl\Models\Role $role
90
     * @return \Illuminate\Http\RedirectResponse
91
     */
92
    public function update(Role $role)
93
    {
94
        $this->validate($this->request, [
95
            'name'        => 'required',
96
            'slug'        => 'required|unique:roles,slug,' . $role->id,
97
            'permissions' => 'required',
98
        ]);
99
100
        $role->update($this->request->all());
101
        $role->syncPermissions($this->request->get('permissions', []));
102
        flash()->success('Role ' . $role->name . ' successfully updated!');
103
104
        return redirect()->route('administrator.roles.index');
105
    }
106
107
    /**
108
     * Remove selected role.
109
     *
110
     * @param \Yajra\Acl\Models\Role $role
111
     * @return \Illuminate\Http\RedirectResponse
112
     */
113 View Code Duplication
    public function destroy(Role $role)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
114
    {
115
        if (! $role->system) {
116
            try {
117
                $role->delete();
118
119
                return $this->notifySuccess('Role successfully deleted!');
120
            } catch (QueryException $e) {
121
                return $this->notifyError($e->getMessage());
122
            }
123
        }
124
125
        return $this->notifyError('Role is protected and cannot be deleted!');
126
    }
127
}
128