with('flags')->orderBy('last_name')->orderBy('first_name')->get(); return view('admin.users.index', ['users' => $users]); } public function edit(User $user) { $schools = School::orderBy('name')->get(); $logEntries = AuditLogEntry::whereJsonContains('affected->users', $user->id)->orderBy('created_at', 'desc')->get(); $userActions = AuditLogEntry::where('user', $user->email)->orderBy('created_at', 'desc')->get(); return view('admin.users.edit', compact('user', 'schools', 'logEntries', 'userActions')); } public function create() { $schools = School::orderBy('name')->get(); return view('admin.users.create', ['schools' => $schools]); } public function update( Request $request, User $user, SetHeadDirector $headSetter, UpdateUserProfileInformation $profileUpdater, AssignUserToSchool $schoolAssigner, UpdateUserPrivileges $privilegesUpdater ) { // Update basic profile data $profileData = [ 'first_name' => $request->get('first_name'), 'last_name' => $request->get('last_name'), 'email' => $request->get('email'), 'cell_phone' => $request->get('cell_phone'), 'judging_preference' => $request->get('judging_preference'), ]; $profileUpdater->update($user, $profileData); // Deal with school assignment dump($request->get('school_id')); if ($user->school_id != $request->get('school_id')) { $schoolAssigner($user, $request->get('school_id')); } // Deal with the head director flag if ($request->has('head_director')) { $headSetter($user); } else { $user->removeFlag('head_director'); } // Deal with privileges if ($request->has('is_admin')) { $privilegesUpdater($user, 'grant', 'admin'); } else { $privilegesUpdater($user, 'revoke', 'admin'); } if ($request->has('is_tab')) { $privilegesUpdater($user, 'grant', 'tab'); } else { $privilegesUpdater($user, 'revoke', 'tab'); } return redirect('/admin/users'); } public function store(Request $request) { $userCreator = app(CreateNewUser::class); $randomPassword = Str::random(12); $data = request()->all(); $data['password'] = $randomPassword; $data['password_confirmation'] = $randomPassword; $newDirector = $userCreator->create($data); $newDirector->update([ 'school_id' => $request->get('school_id') ?? null, ]); Mail::to($newDirector->email)->send(new NewUserPassword($newDirector, $randomPassword)); return redirect(route('admin.users.index'))->with('success', 'Director added'); } public function destroy(User $user) { $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'); } }