'', 'status' => '', 'role' => '', 'subscription' => '', ]; public $showModal = false; public $editingUser = null; public $form = [ 'name' => '', 'email' => '', 'password' => '', 'company' => '', 'status' => 'active', 'roles' => [], 'notes' => '', ]; public function mount() { // } public function render() { $users = User::query() ->when($this->filters['search'], function ($query) { $query->where(function ($q) { $q->where('name', 'like', '%' . $this->filters['search'] . '%') ->orWhere('email', 'like', '%' . $this->filters['search'] . '%'); }); }) ->when($this->filters['status'], function ($query) { $query->where('status', $this->filters['status']); }) ->when($this->filters['role'], function ($query) { $query->role($this->filters['role']); }) ->when($this->filters['subscription'], function ($query) { if ($this->filters['subscription'] === 'active') { $query->whereHas('activeSubscription'); } elseif ($this->filters['subscription'] === 'expired') { $query->whereHas('subscriptions', function ($q) { $q->where('status', 'expired'); }); } elseif ($this->filters['subscription'] === 'none') { $query->whereDoesntHave('subscriptions'); } }) ->with(['roles', 'activeSubscription']) ->paginate(15); $roles = Role::all(); return view('livewire.user-management', [ 'users' => $users, 'roles' => $roles, ]); } public function editUser($userId) { $this->editingUser = User::with('roles')->find($userId); $this->form = [ 'name' => $this->editingUser->name, 'email' => $this->editingUser->email, 'password' => '', 'company' => $this->editingUser->company, 'status' => $this->editingUser->status, 'roles' => $this->editingUser->roles->pluck('name')->toArray(), 'notes' => $this->editingUser->notes, ]; $this->showModal = true; } public function openCreateModal() { $this->resetForm(); $this->editingUser = null; $this->showModal = true; } private function resetForm() { $this->form = [ 'name' => '', 'email' => '', 'password' => '', 'company' => '', 'status' => 'active', 'roles' => [], 'notes' => '' ]; } public function createUser() { $this->validate([ 'form.name' => 'required|string|max:255', 'form.email' => 'required|email|unique:users,email', 'form.password' => 'required|string|min:8', 'form.company' => 'nullable|string|max:255', 'form.status' => 'required|in:active,inactive,suspended', 'form.notes' => 'nullable|string', ]); $user = User::create([ 'name' => $this->form['name'], 'email' => $this->form['email'], 'password' => bcrypt($this->form['password']), 'company' => $this->form['company'], 'status' => $this->form['status'], 'notes' => $this->form['notes'], ]); if (!empty($this->form['roles'])) { $user->assignRole($this->form['roles']); } $this->closeModal(); session()->flash('message', 'User created successfully.'); } public function updateUser() { $this->validate([ 'form.name' => 'required|string|max:255', 'form.email' => 'required|email|unique:users,email,' . $this->editingUser->id, 'form.password' => 'nullable|string|min:8', 'form.company' => 'nullable|string|max:255', 'form.status' => 'required|in:active,inactive,suspended', 'form.notes' => 'nullable|string', ]); $this->editingUser->update([ 'name' => $this->form['name'], 'email' => $this->form['email'], 'company' => $this->form['company'], 'status' => $this->form['status'], 'notes' => $this->form['notes'], ]); if (!empty($this->form['password'])) { $this->editingUser->update(['password' => bcrypt($this->form['password'])]); } $this->editingUser->syncRoles($this->form['roles']); $this->closeModal(); session()->flash('message', 'User updated successfully.'); } public function suspendUser($userId) { User::find($userId)->update(['status' => 'suspended']); session()->flash('message', 'User suspended successfully.'); } public function activateUser($userId) { User::find($userId)->update(['status' => 'active']); session()->flash('message', 'User activated successfully.'); } public function deleteUser($userId) { // Prevent deleting the current user if ($userId == auth()->id()) { session()->flash('error', 'You cannot delete your own account.'); return; } $user = User::find($userId); if ($user) { // Remove all roles before deleting $user->syncRoles([]); $user->delete(); session()->flash('message', 'User deleted successfully.'); } } public function closeModal() { $this->showModal = false; $this->editingUser = null; $this->reset('form'); } public function updatingFilters() { $this->resetPage(); } }