MIF_E31230680/app/Http/Controllers/UserController.php

145 lines
4.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
// $users = User::paginate(10);
// Pagination default 10 per halaman
public function index(Request $request)
{
// Tangkap request 'per_page', default-nya 10, bisa dipilih 10, 25, 50, atau 100
$perPage = $request->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');
}
}