first
This commit is contained in:
106
app/Http/Controllers/Admin/UserController.php
Normal file
106
app/Http/Controllers/Admin/UserController.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Actions\ActivateUserAction;
|
||||
use App\Actions\ChangeUserEmailAction;
|
||||
use App\Actions\CreateUserAction;
|
||||
use App\Actions\DeactivateUserAction;
|
||||
use App\Actions\DeleteUserAction;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\CreateUserRequest;
|
||||
use App\Http\Requests\Admin\UpdateUserEmailRequest;
|
||||
use App\Models\Department;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$this->authorize('viewAny', User::class);
|
||||
|
||||
$users = User::with('department')
|
||||
->where('role', 'user')
|
||||
->when($request->search, fn ($q, $s) =>
|
||||
$q->where('name', 'like', "%{$s}%")
|
||||
->orWhere('email', 'like', "%{$s}%")
|
||||
)
|
||||
->when($request->status, fn ($q, $s) =>
|
||||
$q->where('is_active', $s === 'active')
|
||||
)
|
||||
->orderBy('name')
|
||||
->paginate(20)
|
||||
->withQueryString();
|
||||
|
||||
return view('admin.users.index', compact('users'));
|
||||
}
|
||||
|
||||
public function create(): View
|
||||
{
|
||||
$this->authorize('create', User::class);
|
||||
|
||||
$departments = Department::where('is_active', true)->orderBy('name')->get();
|
||||
|
||||
return view('admin.users.create', compact('departments'));
|
||||
}
|
||||
|
||||
public function store(CreateUserRequest $request, CreateUserAction $action): RedirectResponse
|
||||
{
|
||||
$action->execute($request->validated());
|
||||
|
||||
return redirect()->route('admin.users.index')
|
||||
->with('success', 'Pengguna berjaya didaftarkan.');
|
||||
}
|
||||
|
||||
public function edit(User $user): View
|
||||
{
|
||||
$this->authorize('changeEmail', $user);
|
||||
|
||||
$departments = Department::where('is_active', true)->orderBy('name')->get();
|
||||
|
||||
return view('admin.users.edit', compact('user', 'departments'));
|
||||
}
|
||||
|
||||
public function updateEmail(UpdateUserEmailRequest $request, User $user, ChangeUserEmailAction $action): RedirectResponse
|
||||
{
|
||||
$this->authorize('changeEmail', $user);
|
||||
|
||||
$action->execute($user, $request->email, $request->justification);
|
||||
|
||||
return redirect()->route('admin.users.index')
|
||||
->with('success', "E-mel pengguna {$user->name} berjaya dikemaskini.");
|
||||
}
|
||||
|
||||
public function activate(Request $request, User $user, ActivateUserAction $action): RedirectResponse
|
||||
{
|
||||
$this->authorize('activate', $user);
|
||||
|
||||
$action->execute($user);
|
||||
|
||||
return redirect()->route('admin.users.index')
|
||||
->with('success', "Akaun {$user->name} berjaya diaktifkan.");
|
||||
}
|
||||
|
||||
public function deactivate(Request $request, User $user, DeactivateUserAction $action): RedirectResponse
|
||||
{
|
||||
$this->authorize('deactivate', $user);
|
||||
|
||||
$action->execute($user, $request->justification);
|
||||
|
||||
return redirect()->route('admin.users.index')
|
||||
->with('success', "Akaun {$user->name} berjaya dinyahaktifkan.");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, User $user, DeleteUserAction $action): RedirectResponse
|
||||
{
|
||||
$this->authorize('delete', $user);
|
||||
|
||||
$action->execute($user, $request->justification);
|
||||
|
||||
return redirect()->route('admin.users.index')
|
||||
->with('success', "Pengguna {$user->name} berjaya dipadam.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user