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