is_admin) { abort(403); } $users = User::with('school')->orderBy('last_name')->orderBy('first_name')->get(); return view('admin.users.index', ['users' => $users]); } public function edit(User $user) { if (! Auth::user()->is_admin) { abort(403); } $schools = School::orderBy('name')->get(); return view('admin.users.edit', ['user' => $user, 'schools' => $schools]); } public function create() { if (! Auth::user()->is_admin) { abort(403); } $schools = School::orderBy('name')->get(); return view('admin.users.create', ['schools' => $schools]); } public function update(Request $request, User $user, SetHeadDirector $headSetter) { if (! Auth::user()->is_admin) { abort(403); } $oldEmail = $user->email; $wasAdmin = $user->is_admin; $wasTab = $user->is_tab; $validData = $request->validate([ 'first_name' => ['required'], 'last_name' => ['required'], 'email' => ['required', 'email'], 'cell_phone' => ['required'], 'judging_preference' => ['required'], 'school_id' => ['nullable', 'exists:schools,id'], ]); $validData['is_admin'] = $request->get('is_admin') == 'on' ? 1 : 0; $validData['is_tab'] = $request->get('is_tab') == 'on' ? 1 : 0; $validData['is_head'] = $request->get('is_head') == 'on' ? 1 : 0; $user->update([ 'first_name' => $validData['first_name'], 'last_name' => $validData['last_name'], 'email' => $validData['email'], 'cell_phone' => $validData['cell_phone'], 'judging_preference' => $validData['judging_preference'], 'school_id' => $validData['school_id'], 'is_admin' => $validData['is_admin'], 'is_tab' => $validData['is_tab'], ]); $user->refresh(); $logged_school = $user->school_id ? $user->school->name : 'No School'; $message = 'Updated user #'.$user->id.' - '.$oldEmail .'
Name: '.$user->full_name() .'
Email: '.$user->email .'
Cell Phone: '.$user->cell_phone .'
Judging Pref: '.$user->judging_preference .'
School: '.$logged_school; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => ['users' => [$user->id]], ]); if ($user->is_admin != $wasAdmin) { $messageStart = $user->is_admin ? 'Granted admin privileges to ' : 'Revoked admin privileges from '; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $messageStart.$user->full_name().' - '.$user->email, 'affected' => ['users' => [$user->id]], ]); } if ($user->is_tab != $wasTab) { $messageStart = $user->is_tab ? 'Granted tabulation privileges to ' : 'Revoked tabulation privileges from '; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $messageStart.$user->full_name().' - '.$user->email, 'affected' => ['users' => [$user->id]], ]); } if ($user->hasFlag('head_director') != $validData['is_head'] && ! is_null($user->school_id)) { if ($validData['is_head']) { $headSetter->setHeadDirector($user); } else { $user->removeFlag('head_director'); $logMessage = 'Removed '.$user->full_name().' as head director at '.$user->school->name; $logAffected = ['users' => [$user->id], 'schools' => [$user->school_id]]; auditionLog($logMessage, $logAffected); } } return redirect('/admin/users'); } public function store(Request $request) { $request->validate([ 'first_name' => ['required'], 'last_name' => ['required'], 'email' => ['required', 'email', 'unique:users'], ]); // Generate a random password $randomPassword = Str::random(12); $user = User::make([ 'first_name' => request('first_name'), 'last_name' => request('last_name'), 'email' => request('email'), 'cell_phone' => request('cell_phone'), 'judging_preference' => request('judging_preference'), 'password' => Hash::make($randomPassword), ]); if (! is_null(request('school_id'))) { $request->validate([ 'school_id' => ['exists:schools,id'], ]); } $user->school_id = request('school_id'); $user->save(); $message = 'Created user '.$user->email.' - '.$user->full_name().'
Cell Phone: '.$user->cell_phone.'
Judging Pref: '.$user->judging_preference; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => ['users' => [$user->id]], ]); if ($user->school_id) { $message = 'Set user '.$user->full_name().' ('.$user->email.') as a director at '.$user->school->name.'(#'.$user->school->id.')'; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => [ 'users' => [$user->id], 'schools' => [$user->id], ], ]); } Mail::to($user->email)->send(new NewUserPassword($user, $randomPassword)); return redirect('/admin/users'); } public function destroy(User $user) { if (! Auth::user()->is_admin) { abort(403); } $message = 'Deleted user '.$user->email; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => ['users' => [$user->id]], ]); $user->delete(); return redirect()->route('admin.users.index')->with('success', 'User deleted successfully'); } }