UsersManagementController   A
last analyzed

Complexity

Total Complexity 31

Size/Duplication

Total Lines 292
Duplicated Lines 0 %

Importance

Changes 10
Bugs 0 Features 0
Metric Value
wmc 31
eloc 126
c 10
b 0
f 0
dl 0
loc 292
rs 9.92

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 4
A index() 0 16 2
A create() 0 14 2
B update() 0 47 9
A search() 0 35 3
A edit() 0 25 4
A show() 0 5 1
A store() 0 43 4
A destroy() 0 12 2
1
<?php
2
3
namespace jeremykenedy\laravelusers\App\Http\Controllers;
4
5
use Auth;
6
use Illuminate\Http\Request;
7
use Illuminate\Http\Response;
8
use Illuminate\Routing\Controller;
9
use Illuminate\Support\Facades\Hash;
10
use Validator;
11
12
class UsersManagementController extends Controller
13
{
14
    private $_authEnabled;
15
    private $_rolesEnabled;
16
    private $_rolesMiddlware;
17
    private $_rolesMiddleWareEnabled;
18
19
    /**
20
     * Create a new controller instance.
21
     *
22
     * @return void
23
     */
24
    public function __construct()
25
    {
26
        $this->_authEnabled = config('laravelusers.authEnabled');
27
        $this->_rolesEnabled = config('laravelusers.rolesEnabled');
28
        $this->_rolesMiddlware = config('laravelusers.rolesMiddlware');
29
        $this->_rolesMiddleWareEnabled = config('laravelusers.rolesMiddlwareEnabled');
30
31
        if ($this->_authEnabled) {
32
            $this->middleware('auth');
33
        }
34
35
        if ($this->_rolesEnabled && $this->_rolesMiddleWareEnabled) {
36
            $this->middleware($this->_rolesMiddlware);
37
        }
38
    }
39
40
    /**
41
     * Display a listing of the resource.
42
     *
43
     * @return \Illuminate\Http\Response
44
     */
45
    public function index()
46
    {
47
        $pagintaionEnabled = config('laravelusers.enablePagination');
48
49
        if ($pagintaionEnabled) {
50
            $users = config('laravelusers.defaultUserModel')::paginate(config('laravelusers.paginateListSize'));
51
        } else {
52
            $users = config('laravelusers.defaultUserModel')::all();
53
        }
54
55
        $data = [
56
            'users'             => $users,
57
            'pagintaionEnabled' => $pagintaionEnabled,
58
        ];
59
60
        return view(config('laravelusers.showUsersBlade'), $data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view(config('lara...howUsersBlade'), $data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
61
    }
62
63
    /**
64
     * Show the form for creating a new resource.
65
     *
66
     * @return \Illuminate\Http\Response
67
     */
68
    public function create()
69
    {
70
        $roles = [];
71
72
        if ($this->_rolesEnabled) {
73
            $roles = config('laravelusers.roleModel')::all();
74
        }
75
76
        $data = [
77
            'rolesEnabled'  => $this->_rolesEnabled,
78
            'roles'         => $roles,
79
        ];
80
81
        return view(config('laravelusers.createUserBlade'))->with($data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view(config('lara...erBlade'))->with($data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
82
    }
83
84
    /**
85
     * Store a newly created resource in storage.
86
     *
87
     * @param \Illuminate\Http\Request $request
88
     *
89
     * @return \Illuminate\Http\Response
90
     */
91
    public function store(Request $request)
92
    {
93
        $rules = [
94
            'name'                  => 'required|string|max:255|unique:users|alpha_dash',
95
            'email'                 => 'required|email|max:255|unique:users',
96
            'password'              => 'required|string|confirmed|min:6',
97
            'password_confirmation' => 'required|string|same:password',
98
        ];
99
100
        if ($this->_rolesEnabled) {
101
            $rules['role'] = 'required';
102
        }
103
104
        $messages = [
105
            'name.unique'         => trans('laravelusers::laravelusers.messages.userNameTaken'),
106
            'name.required'       => trans('laravelusers::laravelusers.messages.userNameRequired'),
107
            'name'                => trans('laravelusers::laravelusers.messages.userNameInvalid'),
108
            'email.required'      => trans('laravelusers::laravelusers.messages.emailRequired'),
109
            'email.email'         => trans('laravelusers::laravelusers.messages.emailInvalid'),
110
            'password.required'   => trans('laravelusers::laravelusers.messages.passwordRequired'),
111
            'password.min'        => trans('laravelusers::laravelusers.messages.PasswordMin'),
112
            'password.max'        => trans('laravelusers::laravelusers.messages.PasswordMax'),
113
            'role.required'       => trans('laravelusers::laravelusers.messages.roleRequired'),
114
        ];
115
116
        $validator = Validator::make($request->all(), $rules, $messages);
117
118
        if ($validator->fails()) {
119
            return back()->withErrors($validator)->withInput();
0 ignored issues
show
Bug Best Practice introduced by
The expression return back()->withError...validator)->withInput() returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
120
        }
121
122
        $user = config('laravelusers.defaultUserModel')::create([
123
            'name'             => strip_tags($request->input('name')),
124
            'email'            => $request->input('email'),
125
            'password'         => Hash::make($request->input('password')),
126
        ]);
127
128
        if ($this->_rolesEnabled) {
129
            $user->attachRole($request->input('role'));
130
            $user->save();
131
        }
132
133
        return redirect('users')->with('success', trans('laravelusers::laravelusers.messages.user-creation-success'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect('users')...ser-creation-success')) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
134
    }
135
136
    /**
137
     * Display the specified resource.
138
     *
139
     * @param int $id
140
     *
141
     * @return \Illuminate\Http\Response
142
     */
143
    public function show($id)
144
    {
145
        $user = config('laravelusers.defaultUserModel')::find($id);
146
147
        return view(config('laravelusers.showIndividualUserBlade'))->withUser($user);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view(config('lara...ade'))->withUser($user) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
148
    }
149
150
    /**
151
     * Show the form for editing the specified resource.
152
     *
153
     * @param int $id
154
     *
155
     * @return \Illuminate\Http\Response
156
     */
157
    public function edit($id)
158
    {
159
        $user = config('laravelusers.defaultUserModel')::findOrFail($id);
160
        $roles = [];
161
        $currentRole = [];
162
163
        if ($this->_rolesEnabled) {
164
            $roles = config('laravelusers.roleModel')::all();
165
166
            foreach ($user->roles as $user_role) {
167
                $currentRole[] = $user_role->id;
168
            }
169
        }
170
171
        $data = [
172
            'user'          => $user,
173
            'rolesEnabled'  => $this->_rolesEnabled,
174
        ];
175
176
        if ($this->_rolesEnabled) {
177
            $data['roles'] = $roles;
178
            $data['currentRole'] = $currentRole;
179
        }
180
181
        return view(config('laravelusers.editIndividualUserBlade'))->with($data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view(config('lara...erBlade'))->with($data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
182
    }
183
184
    /**
185
     * Update the specified resource in storage.
186
     *
187
     * @param \Illuminate\Http\Request $request
188
     * @param int                      $id
189
     *
190
     * @return \Illuminate\Http\Response
191
     */
192
    public function update(Request $request, $id)
193
    {
194
        $user = config('laravelusers.defaultUserModel')::find($id);
195
        $emailCheck = ($request->input('email') != '') && ($request->input('email') != $user->email);
196
        $passwordCheck = $request->input('password') != null;
197
198
        $rules = [
199
            'name' => 'required|max:255',
200
        ];
201
202
        if ($emailCheck) {
203
            $rules['email'] = 'required|email|max:255|unique:users|alpha_dash';
204
        }
205
206
        if ($passwordCheck) {
207
            $rules['password'] = 'required|string|min:6|max:20|confirmed';
208
            $rules['password_confirmation'] = 'required|string|same:password';
209
        }
210
211
        if ($this->_rolesEnabled) {
212
            $rules['role'] = 'required';
213
        }
214
215
        $validator = Validator::make($request->all(), $rules);
216
217
        if ($validator->fails()) {
218
            return back()->withErrors($validator)->withInput();
0 ignored issues
show
Bug Best Practice introduced by
The expression return back()->withError...validator)->withInput() returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
219
        }
220
221
        $user->name = strip_tags($request->input('name'));
222
223
        if ($emailCheck) {
224
            $user->email = $request->input('email');
225
        }
226
227
        if ($passwordCheck) {
228
            $user->password = Hash::make($request->input('password'));
229
        }
230
231
        if ($this->_rolesEnabled) {
232
            $user->detachAllRoles();
233
            $user->attachRole($request->input('role'));
234
        }
235
236
        $user->save();
237
238
        return back()->with('success', trans('laravelusers::laravelusers.messages.update-user-success'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return back()->with('suc....update-user-success')) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
239
    }
240
241
    /**
242
     * Remove the specified resource from storage.
243
     *
244
     * @param int $id
245
     *
246
     * @return \Illuminate\Http\Response
247
     */
248
    public function destroy($id)
249
    {
250
        $currentUser = Auth::user();
251
        $user = config('laravelusers.defaultUserModel')::findOrFail($id);
252
253
        if ($currentUser->id != $user->id) {
254
            $user->delete();
255
256
            return redirect('users')->with('success', trans('laravelusers::laravelusers.messages.delete-success'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect('users')...sages.delete-success')) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
257
        }
258
259
        return back()->with('error', trans('laravelusers::laravelusers.messages.cannot-delete-yourself'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return back()->with('err...nnot-delete-yourself')) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
260
    }
261
262
    /**
263
     * Method to search the users.
264
     *
265
     * @param Request $request
266
     *
267
     * @return \Illuminate\Http\Response
268
     */
269
    public function search(Request $request)
270
    {
271
        $searchTerm = $request->input('user_search_box');
272
        $searchRules = [
273
            'user_search_box' => 'required|string|max:255',
274
        ];
275
        $searchMessages = [
276
            'user_search_box.required' => 'Search term is required',
277
            'user_search_box.string'   => 'Search term has invalid characters',
278
            'user_search_box.max'      => 'Search term has too many characters - 255 allowed',
279
        ];
280
281
        $validator = Validator::make($request->all(), $searchRules, $searchMessages);
282
283
        if ($validator->fails()) {
284
            return response()->json([
0 ignored issues
show
Bug Best Practice introduced by
The expression return response()->json(...P_UNPROCESSABLE_ENTITY) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
285
                json_encode($validator),
286
            ], Response::HTTP_UNPROCESSABLE_ENTITY);
287
        }
288
289
        $results = config('laravelusers.defaultUserModel')::where('id', 'like', $searchTerm.'%')
290
                            ->orWhere('name', 'like', $searchTerm.'%')
291
                            ->orWhere('email', 'like', $searchTerm.'%')->get();
292
293
        // Attach roles to results
294
        foreach ($results as $result) {
295
            $roles = [
296
                'roles' => $result->roles,
297
            ];
298
            $result->push($roles);
299
        }
300
301
        return response()->json([
0 ignored issues
show
Bug Best Practice introduced by
The expression return response()->json(...Http\Response::HTTP_OK) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
302
            json_encode($results),
303
        ], Response::HTTP_OK);
304
    }
305
}
306