Completed
Push — master ( 45f86d...419882 )
by Ajit
12s
created

AclController::storeRole()   A

Complexity

Conditions 3
Paths 11

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
cc 3
eloc 14
nc 11
nop 1
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use DB;
6
use Auth;
7
use App\Role;
8
use App\User;
9
use App\Role_user;
10
use App\Permission;
11
use App\Permission_role;
12
use Illuminate\Http\Request;
13
14
class AclController extends Controller
15
{
16
    public function __construct()
17
    {
18
        $this->middleware('auth');
19
    }
20
21
    /**
22
     * CRUD functions for Users.
23
     */
24
    public function userIndex()
25
    {
26
        $users = User::excludeArchive()->paginate(10);
27
28
        return view('user.userIndex', compact('users'));
29
    }
30
31
    public function createUser()
32
    {
33
        return view('user.createUser');
34
    }
35
36
    public function storeUser(Request $request)
37
    {
38
        $this->validate($request, ['name' => 'required|max:255',
39
                                   'email' => 'required|email|max:255|unique:mst_users',
40
                                   'password' => 'required|confirmed|min:6', ]);
41
42
        $user = User::create(['name' => $request['name'],
43
                                'email' => $request['email'],
44
                                'password' => bcrypt($request['password']),
45
                              'status'=> $request->status, ]);
46
47
        $user->save();
48
49
        // Adding Photo
50
        if ($request->hasFile('photo')) {
51
            $user->addMedia($request->file('photo'))->usingFileName('staff_'.$user->id.$request->photo->getClientOriginalExtension())->toCollection('staff');
0 ignored issues
show
Bug introduced by
It seems like $request->file('photo') can also be of type array; however, parameter $file of App\User::addMedia() does only seem to accept Symfony\Component\HttpFo...ile\UploadedFile|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

51
            $user->addMedia(/** @scrutinizer ignore-type */ $request->file('photo'))->usingFileName('staff_'.$user->id.$request->photo->getClientOriginalExtension())->toCollection('staff');
Loading history...
52
        }
53
        $user->save();
54
55
        $user->attachRole($request->role_id);
56
57
        flash()->success('User was successfully created');
58
59
        return redirect('user');
60
    }
61
62
    public function editUser($id)
63
    {
64
        $user = User::findOrFail($id);
65
66
        return view('user.editUser', compact('user'));
67
    }
68
69
    public function updateUser($id, Request $request)
70
    {
71
        $user = User::findOrFail($id);
72
73
        $user->name = $request->name;
74
        $user->email = $request->email;
75
76
        if (! empty($request->password)) {
77
            $this->validate($request, ['password' => 'required|string|min:6|confirmed']);
78
            $user->password = bcrypt($request->password);
79
        }
80
81
        $user->status = $request->status;
82
83
        $user->update();
84
85
        if ($request->hasFile('photo')) {
86
            $user->clearMediaCollection('staff');
87
            $user->addMedia($request->file('photo'))->usingFileName('staff_'.$user->id.$request->photo->getClientOriginalExtension())->toCollection('staff');
88
        }
89
        $user->save();
90
91
        if ($user->role_user->role->id != $request->role_id) {
92
            Role_user::where('user_id', $user->id)->where('role_id', $user->role_user->role_id)->delete();
93
            $user->attachRole($request->role_id);
94
        }
95
96
        flash()->success('User details were successfully updated');
97
98
        return redirect('user');
99
    }
100
101
    public function deleteUser($id)
102
    {
103
        DB::beginTransaction();
104
        try {
105
            Role_user::where('user_id', $id)->delete();
106
            $user = User::findOrFail($id);
107
            $user->clearMediaCollection('staff');
108
            $user->status = \constStatus::Archive;
109
            $user->save();
110
111
            DB::commit();
112
            flash()->success('User was successfully deleted');
113
114
            return redirect('user');
115
        } catch (Exception $e) {
0 ignored issues
show
Bug introduced by
The type App\Http\Controllers\Exception was not found. Did you mean Exception? If so, make sure to prefix the type with \.
Loading history...
116
            DB::rollback();
117
            flash()->error('User was not deleted');
118
119
            return redirect('user');
120
        }
121
    }
122
123
    /**
124
     * CRUD functions for Roles.
125
     */
126
    public function roleIndex()
127
    {
128
        $roles = Role::excludeGymie()->get();
129
130
        return view('user.roleIndex', compact('roles'));
131
    }
132
133
    public function createRole()
134
    {
135
        $permissions = Permission::all();
136
137
        return view('user.createRole', compact('permissions'));
138
    }
139
140
    public function storeRole(Request $request)
141
    {
142
        DB::beginTransaction();
143
        try {
144
            $role = Role::create(['name' => $request->name,
145
                                  'display_name' => $request->display_name,
146
                                  'description' => $request->description,
147
                                 ]);
148
149
            if ($request->has('permissions')) {
150
                $role->attachPermissions($request->permissions);
151
            }
152
153
            DB::commit();
154
            flash()->success('Role was successfully created');
155
156
            return redirect('role');
157
        } catch (Exception $e) {
158
            DB::rollback();
159
            flash()->error('Role was not created');
160
161
            return redirect('role');
162
        }
163
    }
164
165
    public function editRole($id)
166
    {
167
        $role = Role::findOrFail($id);
168
        $permissions = Permission::all();
169
        $permission_role = Permission_role::where('role_id', $id)->get();
170
171
        return view('user.editRole', compact('role', 'permissions', 'permission_role'));
172
    }
173
174
    public function updateRole($id, Request $request)
175
    {
176
        DB::beginTransaction();
177
        try {
178
            //Updating Role
179
            $role = Role::findOrFail($id);
180
181
            $role->update(['name' => $request->name,
182
                           'display_name' => $request->display_name,
183
                           'description' => $request->description,
184
                          ]);
185
186
            //Updating permissions for the role
187
            $DBpermissions = Permission_role::where('role_id', $id)->select('permission_id')->lists('permission_id');
188
            $ClientPermissions = collect($request->permissions);
189
190
            $addPermissions = $ClientPermissions->diff($DBpermissions);
191
            $deletePermissions = $DBpermissions->diff($ClientPermissions);
192
193
            if ($addPermissions->count()) {
194
                $role->attachPermissions($addPermissions);
195
            }
196
197
            if ($deletePermissions->count()) {
198
                foreach ($deletePermissions as $deletePermission) {
199
                    Permission_role::where('role_id', $id)->where('permission_id', $deletePermission)->delete();
200
                }
201
            }
202
203
            DB::commit();
204
            flash()->success('Role was successfully updated');
205
206
            return redirect('role');
207
        } catch (Exception $e) {
208
            DB::rollback();
209
            flash()->error('Role was not updated');
210
211
            return redirect('role');
212
        }
213
    }
214
215
    public function deleteRole($id)
216
    {
217
        DB::beginTransaction();
218
        try {
219
            Permission_role::where('role_id', $id)->delete();
220
            Role::where('id', $id)->delete();
221
222
            DB::commit();
223
            flash()->success('Role was successfully deleted');
224
225
            return redirect('role');
226
        } catch (Exception $e) {
227
            DB::rollback();
228
            flash()->error('Role was not deleted');
229
230
            return redirect('role');
231
        }
232
    }
233
234
    /**
235
     * CRUD functions for Permissions.
236
     */
237
    public function permissionIndex()
238
    {
239
        $permissions = Permission::all();
240
241
        return view('user.permissionIndex', compact('permissions'));
242
    }
243
244
    public function createPermission()
245
    {
246
        return view('user.createPermission');
247
    }
248
249
    public function storePermission(Request $request)
250
    {
251
        Permission::create(['name' => $request->name,
252
                            'display_name' => $request->display_name,
253
                            'description' => $request->description,
254
                            'group_key' => $request->group_key,
255
                           ]);
256
257
        flash()->success('Permission was successfully created');
258
259
        return redirect('permission');
260
    }
261
262
    public function editPermission($id)
263
    {
264
        $permission = Permission::findOrFail($id);
265
266
        return view('user.editPermission', compact('permission'));
267
    }
268
269
    public function updatePermission($id, Request $request)
270
    {
271
        $permission = Permission::findOrFail($id);
272
273
        $permission->update(['name' => $request->name,
274
                            'display_name' => $request->display_name,
275
                            'description' => $request->description,
276
                            'group_key' => $request->group_key,
277
                            ]);
278
279
        flash()->success('Permission was successfully updated');
280
281
        return redirect('permission');
282
    }
283
284
    public function deletePermission($id)
285
    {
286
        Permission::findOrFail($id)->delete();
287
288
        flash()->success('Permission was successfully deleted');
289
290
        return redirect('permission');
291
    }
292
}
293