Completed
Push — master ( 0f2de6...e87cc5 )
by Jeremy
03:00
created

UsersManagementController::search()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

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

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

286
        $results = config('laravelusers.defaultUserModel')::where('id', 'like', /** @scrutinizer ignore-type */ $searchTerm.'%')
Loading history...
287
                            ->orWhere('name', 'like', $searchTerm.'%')
288
                            ->orWhere('email', 'like', $searchTerm.'%')->get();
289
290
        // Attach roles to results
291
        foreach ($results as $result) {
292
            $roles = [
293
                'roles' => $result->roles
294
            ];
295
            $result->push($roles);
296
        }
297
298
        return response()->json([
299
            json_encode($results)
300
        ], Response::HTTP_OK);
301
    }
302
303
}
304