input('per_page', 10); // Pagination dengan nilai dinamis, dan tambahkan 'appends' agar parameter di URL tidak hilang saat pindah halaman $users = User::query()->paginate($perPage)->appends($request->query()); return view('admin.index', compact('users', 'perPage')); } public function create() { return view('admin.create'); } public function store(Request $request) { $request->validate([ 'nama_lengkap' => 'required', 'username' => 'required|unique:users', 'password' => 'required|min:6', 'alamat' => 'required', 'role' => 'required' ]); User::create([ 'nama_lengkap' => $request->nama_lengkap, 'username' => $request->username, 'password' => Hash::make($request->password), 'alamat' => $request->alamat, 'role' => $request->role, 'status' => 'aktif', ]); return redirect()->route('users.index')->with('success', 'User berhasil ditambahkan'); } public function edit(User $user) { return view('admin.edit', compact('user')); } public function update(Request $request, User $user) { $request->validate([ 'nama_lengkap' => 'required', 'username' => 'required|unique:users,username,'.$user->id, 'alamat' => 'required', 'role' => 'required' ]); $data = [ 'nama_lengkap' => $request->nama_lengkap, 'username' => $request->username, 'alamat' => $request->alamat, 'role' => $request->role, ]; // Update password hanya jika diisi if ($request->filled('password')) { $data['password'] = Hash::make($request->password); } $user->update($data); return redirect()->route('users.index')->with('success', 'User berhasil diperbarui'); } public function toggleStatus(User $user) { // 1. Cegah matikan akun sendiri if (Auth::id() === $user->id) { return back()->with('error', 'Anda tidak dapat menonaktifkan akun Anda sendiri!'); } // 2. Cegah mematikan Admin terakhir if ($user->role === 'admin' && $user->status === 'aktif') { $jumlahAdminAktif = User::where('role', 'admin')->where('status', 'aktif')->count(); if ($jumlahAdminAktif <= 1) { return back()->with('error', 'Sistem menolak! Harus tersisa minimal 1 akun Admin yang aktif.'); } } // Balikkan status $statusBaru = $user->status === 'aktif' ? 'nonaktif' : 'aktif'; $user->update(['status' => $statusBaru]); $pesan = $statusBaru === 'aktif' ? "Akun {$user->username} berhasil diaktifkan!" : "Akun {$user->username} berhasil dinonaktifkan!"; return back()->with('success', $pesan); } public function destroy(User $user) { // 1. Cegah hapus akun sendiri if (Auth::id() === $user->id) { return back()->with('error', 'Anda tidak dapat menghapus akun Anda sendiri!'); } // 2. Cegah hapus Admin terakhir if ($user->role === 'admin') { $jumlahAdmin = User::where('role', 'admin')->count(); if ($jumlahAdmin <= 1) { return back()->with('error', 'Sistem menolak! Harus tersisa minimal 1 akun Admin di dalam database.'); } } $user->delete(); return back()->with('success', 'Data pengguna berhasil dihapus!'); } // FUNGSI BARU: Mereset Password public function resetPassword(User $user) { // Proteksi ganda: Pastikan hanya admin yang bisa melakukan eksekusi ini if (Auth::user()->role !== 'admin') { return redirect()->back()->with('error', 'Anda tidak memiliki akses untuk reset password.'); } // Set password kembali ke default: '123456' $user->update([ 'password' => Hash::make('123456') ]); return redirect()->route('users.index')->with('success', 'Password pengguna ' . $user->username . ' berhasil direset menjadi: 123456'); } }