107 lines
3.3 KiB
PHP
107 lines
3.3 KiB
PHP
<?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.");
|
|
}
|
|
}
|