jeremykenedy /
laravel-auth
| 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
Loading history...
|
|||
| 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 |