Passed
Push — dev ( c55b95...34fb50 )
by Darko
06:54
created

AdminRoleController   F

Complexity

Total Complexity 66

Size/Duplication

Total Lines 243
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 66
eloc 135
dl 0
loc 243
rs 3.12
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A destroy() 0 7 2
F edit() 0 116 49
F create() 0 78 14
A index() 0 16 1

How to fix   Complexity   

Complex Class

Complex classes like AdminRoleController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use AdminRoleController, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\Http\Controllers\BasePageController;
6
use Illuminate\Http\Request;
7
use Spatie\Permission\Models\Role;
8
9
class AdminRoleController extends BasePageController
10
{
11
    /**
12
     * @throws \Exception
13
     */
14
    public function index()
15
    {
16
        $this->setAdminPrefs();
17
18
        $meta_title = $title = 'User Role List';
19
20
        //get the user roles
21
        $userroles = Role::cursor()->remember();
22
23
        $this->smarty->assign('userroles', $userroles);
0 ignored issues
show
Bug introduced by
The method assign() does not exist on Illuminate\Foundation\Application. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

23
        $this->smarty->/** @scrutinizer ignore-call */ 
24
                       assign('userroles', $userroles);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
24
25
        $content = $this->smarty->fetch('role-list.tpl');
0 ignored issues
show
Bug introduced by
The method fetch() does not exist on Illuminate\Foundation\Application. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

25
        /** @scrutinizer ignore-call */ 
26
        $content = $this->smarty->fetch('role-list.tpl');

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
26
27
        $this->smarty->assign(compact('title', 'meta_title', 'content'));
28
29
        $this->adminrender();
30
    }
31
32
    /**
33
     * @param \Illuminate\Http\Request $request
34
     *
35
     * @throws \Exception
36
     */
37
    public function create(Request $request): void
38
    {
39
        $this->setAdminPrefs();
40
41
        switch ($request->input('action') ?? 'view') {
42
            case 'submit':
43
                $meta_title = $title = 'Add User Role';
44
                    $role = Role::create([
45
                        'name' => $request->input('name'),
46
                        'apirequests' => $request->input('apirequests'),
47
                        'downloadrequests' => $request->input('downloadrequests'),
48
                        'defaultinvites' => $request->input('defaultinvites'),
49
                        'donation' => $request->input('donation') ?? 0,
50
                        'addyears' => $request->input('addyears') ?? 0,
51
                        'rate_limit' => $request->input('rate_limit'),
52
                    ]);
53
                    if ((int) $request->input('canpreview') === 1) {
54
                        $role->givePermissionTo('preview');
55
                    }
56
57
                    if ((int) $request->input('hideads') === 1) {
58
                        $role->givePermissionTo('hideads');
59
                    }
60
61
                    if ((int) $request->input('editrelease') === 1) {
62
                        $role->givePermissionTo('edit release');
63
                    }
64
65
                    if ((int) $request->input('viewconsole') === 1) {
66
                        $role->givePermissionTo('view console');
67
                    }
68
69
                    if ((int) $request->input('viewmovies') === 1) {
70
                        $role->givePermissionTo('view movies');
71
                    }
72
73
                    if ((int) $request->input('viewaudio') === 1) {
74
                        $role->givePermissionTo('view audio');
75
                    }
76
77
                    if ((int) $request->input('viewpc') === 1) {
78
                        $role->givePermissionTo('view pc');
79
                    }
80
81
                    if ((int) $request->input('viewtv') === 1) {
82
                        $role->givePermissionTo('view tv');
83
                    }
84
85
                    if ((int) $request->input('viewadult') === 1) {
86
                        $role->givePermissionTo('view adult');
87
                    }
88
89
                    if ((int) $request->input('viewbooks') === 1) {
90
                        $role->givePermissionTo('view books');
91
                    }
92
93
                    if ((int) $request->input('viewother') === 1) {
94
                        $role->givePermissionTo('view other');
95
                    }
96
                redirect()->to('admin/role-list')->sendHeaders();
97
                break;
98
            case 'view':
99
            default:
100
            $meta_title = $title = 'Add User Role';
101
            $role = [
102
            ];
103
104
            break;
105
        }
106
107
        $this->smarty->assign('yesno_ids', [1, 0]);
108
        $this->smarty->assign('yesno_names', ['Yes', 'No']);
109
110
        $content = $this->smarty->fetch('role-add.tpl');
111
112
        $this->smarty->assign(compact('title', 'meta_title', 'content', 'role'));
113
114
        $this->adminrender();
115
    }
116
117
    /**
118
     * @param \Illuminate\Http\Request $request
119
     *
120
     * @throws \Exception
121
     */
122
    public function edit(Request $request): void
123
    {
124
        $this->setAdminPrefs();
125
126
        $meta_title = $title = 'User Roles';
127
128
        // Get the user roles.
129
        $userRoles = Role::cursor()->remember();
130
        $roles = [];
131
        foreach ($userRoles as $userRole) {
132
            $roles[$userRole->id] = $userRole->name;
133
        }
134
135
        switch ($request->input('action') ?? 'view') {
136
            case 'submit':
137
                    $meta_title = $title = 'Update User Role';
138
                    $role = Role::find($request->input('id'));
139
                    $role->update([
140
                        'name' => $request->input('name'),
141
                        'apirequests' => $request->input('apirequests'),
142
                        'downloadrequests' => $request->input('downloadrequests'),
143
                        'defaultinvites' => $request->input('defaultinvites'),
144
                        'isdefault' => $request->input('isdefault'),
145
                        'donation' => $request->input('donation'),
146
                        'addyears' => $request->input('addyears'),
147
                        'rate_limit' => $request->input('rate_limit'),
148
                    ]);
149
150
                    if ((int) $request->input('canpreview') === 1 && $role->hasPermissionTo('preview') === false) {
151
                        $role->givePermissionTo('preview');
152
                    } elseif ((int) $request->input('canpreview') === 0 && $role->hasPermissionTo('preview') === true) {
153
                        $role->revokePermissionTo('preview');
154
                    }
155
156
                    if ((int) $request->input('hideads') === 1 && $role->hasPermissionTo('hideads') === false) {
157
                        $role->givePermissionTo('hideads');
158
                    } elseif ((int) $request->input('hideads') === 0 && $role->hasPermissionTo('hideads') === true) {
159
                        $role->revokePermissionTo('hideads');
160
                    }
161
162
                    if ((int) $request->input('editrelease') === 1 && $role->hasPermissionTo('edit release') === false) {
163
                        $role->givePermissionTo('edit release');
164
                    } elseif ((int) $request->input('editrelease') === 0 && $role->hasPermissionTo('edit release') === true) {
165
                        $role->revokePermissionTo('edit release');
166
                    }
167
168
                    if ((int) $request->input('viewconsole') === 1 && $role->hasPermissionTo('view console') === false) {
169
                        $role->givePermissionTo('view console');
170
                    } elseif ((int) $request->input('viewconsole') === 0 && $role->hasPermissionTo('view console') === true) {
171
                        $role->revokePermissionTo('view console');
172
                    }
173
174
                    if ((int) $request->input('viewmovies') === 1 && $role->hasPermissionTo('view movies') === false) {
175
                        $role->givePermissionTo('view movies');
176
                    } elseif ((int) $request->input('viewmovies') === 0 && $role->hasPermissionTo('view movies') === true) {
177
                        $role->revokePermissionTo('view movies');
178
                    }
179
180
                    if ((int) $request->input('viewaudio') === 1 && $role->hasPermissionTo('view audio') === false) {
181
                        $role->givePermissionTo('view audio');
182
                    } elseif ((int) $request->input('viewaudio') === 0 && $role->hasPermissionTo('view audio') === true) {
183
                        $role->revokePermissionTo('view audio');
184
                    }
185
186
                    if ((int) $request->input('viewpc') === 1 && $role->hasPermissionTo('view pc') === false) {
187
                        $role->givePermissionTo('view pc');
188
                    } elseif ((int) $request->input('viewpc') === 0 && $role->hasPermissionTo('view pc') === true) {
189
                        $role->revokePermissionTo('view pc');
190
                    }
191
192
                    if ((int) $request->input('viewtv') === 1 && $role->hasPermissionTo('view tv') === false) {
193
                        $role->givePermissionTo('view tv');
194
                    } elseif ((int) $request->input('viewtv') === 0 && $role->hasPermissionTo('view tv') === true) {
195
                        $role->revokePermissionTo('view tv');
196
                    }
197
198
                    if ((int) $request->input('viewadult') === 1 && $role->hasPermissionTo('view adult') === false) {
199
                        $role->givePermissionTo('view adult');
200
                    } elseif ((int) $request->input('viewadult') === 0 && $role->hasPermissionTo('view adult') === true) {
201
                        $role->revokePermissionTo('view adult');
202
                    }
203
204
                    if ((int) $request->input('viewbooks') === 1 && $role->hasPermissionTo('view books') === false) {
205
                        $role->givePermissionTo('view books');
206
                    } elseif ((int) $request->input('viewbooks') === 0 && $role->hasPermissionTo('view books') === true) {
207
                        $role->revokePermissionTo('view books');
208
                    }
209
210
                    if ((int) $request->input('viewother') === 1 && $role->hasPermissionTo('view other') === false) {
211
                        $role->givePermissionTo('view other');
212
                    } elseif ((int) $request->input('viewother') === 0 && $role->hasPermissionTo('view other') === true) {
213
                        $role->revokePermissionTo('view other');
214
                    }
215
216
                $this->smarty->assign('role', $role);
217
                redirect()->to('admin/role-list')->sendHeaders();
218
                break;
219
220
            case 'view':
221
            default:
222
                if ($request->has('id')) {
223
                    $meta_title = $title = 'User Roles Edit';
224
                    $role = Role::findById($request->input('id'));
225
                    $this->smarty->assign('role', $role);
226
                }
227
                break;
228
        }
229
230
        $this->smarty->assign('yesno_ids', [1, 0]);
231
        $this->smarty->assign('yesno_names', ['Yes', 'No']);
232
233
        $content = $this->smarty->fetch('role-edit.tpl');
234
235
        $this->smarty->assign(compact('title', 'meta_title', 'content'));
236
237
        $this->adminrender();
238
    }
239
240
    /**
241
     * @param \Illuminate\Http\Request $request
242
     *
243
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
244
     */
245
    public function destroy(Request $request)
246
    {
247
        if ($request->has('id')) {
248
            Role::query()->where('id', $request->input('id'))->delete();
249
        }
250
251
        return redirect($request->server('HTTP_REFERER'));
0 ignored issues
show
Bug introduced by
It seems like $request->server('HTTP_REFERER') can also be of type array; however, parameter $to of redirect() does only seem to accept null|string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

251
        return redirect(/** @scrutinizer ignore-type */ $request->server('HTTP_REFERER'));
Loading history...
252
    }
253
}
254