query('search', '')); $users = User::query() ->when($search !== '', static function ($query) use ($search): void { $query->where(static function ($query) use ($search): void { $query->where('name', 'like', '%'.$search.'%') ->orWhere('email', 'like', '%'.$search.'%'); }); }) ->orderBy('name') ->paginate(20) ->withQueryString(); return view('modules.user-management.index', compact('users', 'search')); } public function create(): View { return view('modules.user-management.create'); } public function store(Request $request): RedirectResponse { $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'helpdesk_agent' => ['sometimes', 'boolean'], 'helpdesk_admin' => ['sometimes', 'boolean'], ]); $user = User::query()->create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'email_verified_at' => now(), 'helpdesk_agent' => $request->boolean('helpdesk_agent') || $request->boolean('helpdesk_admin'), 'helpdesk_admin' => $request->boolean('helpdesk_admin'), ]); return redirect()->route('user-management.edit', $user) ->with('status', 'User created successfully.'); } public function edit(User $user): View { return view('modules.user-management.edit', compact('user')); } public function update(Request $request, User $user): RedirectResponse { $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], 'password' => ['nullable', 'string', 'min:8', 'confirmed'], 'helpdesk_agent' => ['sometimes', 'boolean'], 'helpdesk_admin' => ['sometimes', 'boolean'], ]); $user->name = $data['name']; $user->email = $data['email']; $user->helpdesk_admin = $request->boolean('helpdesk_admin'); $user->helpdesk_agent = $user->helpdesk_admin || $request->boolean('helpdesk_agent'); if (filled($data['password'] ?? null)) { $user->password = Hash::make($data['password']); } $user->save(); return back()->with('status', 'User updated successfully.'); } public function destroy(Request $request, User $user): RedirectResponse { abort_if((int) $request->user()->id === (int) $user->id, 422, 'You cannot delete your own account.'); if ($user->isHelpdeskAdmin() && User::query()->where('helpdesk_admin', true)->count() <= 1) { return back()->withErrors(['user' => 'The last Helpdesk administrator cannot be deleted.']); } $user->delete(); return redirect()->route('user-management.index')->with('status', 'User deleted.'); } public function roles(): View { $counts = [ 'admins' => User::query()->where('helpdesk_admin', true)->count(), 'agents' => User::query()->where('helpdesk_agent', true)->count(), 'users' => User::query()->count(), ]; return view('modules.user-management.roles', compact('counts')); } }