diff --git a/app/Http/Controllers/Admin/ManajemenAdminController.php b/app/Http/Controllers/Admin/ManajemenAdminController.php index ea9ff26..eb46fb6 100644 --- a/app/Http/Controllers/Admin/ManajemenAdminController.php +++ b/app/Http/Controllers/Admin/ManajemenAdminController.php @@ -4,14 +4,11 @@ use App\Http\Controllers\Controller; use App\Models\User; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Validator; // <--- WAJIB ADA INI -use Illuminate\Routing\Controllers\HasMiddleware; -use Illuminate\Routing\Controllers\Middleware; +use App\Http\Requests\Admin\AdminRequest; // Panggil Request Baru +use Illuminate\Support\Facades\{Auth, Hash}; +use Illuminate\Routing\Controllers\{HasMiddleware, Middleware}; -class ManajemenAdminController extends Controller +class ManajemenAdminController extends Controller implements HasMiddleware { public static function middleware(): array { @@ -24,112 +21,38 @@ public static function middleware(): array }), ]; } + public function index() { - $admin = User::where('role', '!=', 'pemilik') - ->latest() - ->get(); + $admin = User::where('role', '!=', 'pemilik')->latest()->get(); return view('admin.kelola-admin.index', compact('admin')); } - public function store(Request $request) + public function store(AdminRequest $request) { - $validator = Validator::make($request->all(), [ - 'nama' => 'required|string|min:5|max:100', - 'username' => 'required|string|alpha_dash|max:50|unique:users,username', - 'email' => 'required|email:dns|max:255|unique:users,email,', - 'no_wa' => 'required|numeric|digits_between:10,15', - 'role' => 'required|in:admin_foto,admin_buket', - 'alamat' => 'required|string|max:255', - ], [ - 'required' => 'Kolom :attribute wajib diisi.', - 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', - 'min' => ':attribute minimal harus berisi :min karakter.', - 'max' => ':attribute maksimal hanya boleh :max karakter.', - 'numeric' => ':attribute harus berupa angka.', - 'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.', - 'email' => 'Format :attribute tidak valid.', - 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', - 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', - ], [ - 'nama' => 'nama lengkap', - 'username' => 'username', - 'email' => 'alamat email', - 'no_wa' => 'nomor WA', - 'role' => 'peran admin', - 'alamat' => 'alamat lengkap', - ]); - if ($validator->fails()) { - return redirect()->back() - ->withErrors($validator) - ->withInput() - ->with('error_modal', 'create'); - } - User::create([ - 'nama' => $request->nama, - 'username' => $request->username, - 'email' => $request->email, - 'no_wa' => $request->no_wa, - 'role' => $request->role, - 'alamat' => $request->alamat, - 'password' => Hash::make($request->username), - ]); + $data = $request->validated(); + $data['password'] = Hash::make($request->username); + User::create($data); return redirect()->back()->with('success', 'Admin berhasil ditambahkan!'); } - // --- Bagian UPDATE --- - public function update(Request $request, string $id) + public function update(AdminRequest $request, string $id) { $admin = User::findOrFail($id); - $validator = Validator::make($request->all(), [ - 'nama' => 'required|string|min:5|max:100', - 'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $id . ',id_user', - 'email' => 'required|email:dns|max:255|unique:users,email,' . $id . ',id_user', - 'no_wa' => 'required|numeric|digits_between:10,15', - 'role' => 'required|in:admin_foto,admin_buket', - 'alamat' => 'required|string|max:255', - ], [ - 'required' => 'Kolom :attribute wajib diisi.', - 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', - 'min' => ':attribute minimal harus berisi :min karakter.', - 'max' => ':attribute maksimal hanya boleh :max karakter.', - 'numeric' => ':attribute harus berupa angka.', - 'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.', - 'email' => 'Format :attribute tidak valid.', - 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', - 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', - ], [ - 'nama' => 'nama lengkap', - 'username' => 'username', - 'email' => 'alamat email', - 'no_wa' => 'nomor WA', - 'role' => 'peran admin', - 'alamat' => 'alamat lengkap', - ]); - if ($validator->fails()) { - return redirect()->back() - ->withErrors($validator) - ->withInput() - ->with('error_id', $id); - } - $admin->update($request->only(['nama', 'username', 'email', 'no_wa', 'role', 'alamat'])); + $admin->update($request->validated()); return redirect()->back()->with('success', 'Data berhasil diperbarui!'); } public function destroy(string $id) { - // 1. Cari data admin berdasarkan ID $admin = User::findOrFail($id); - // 2. Keamanan tambahan: Jangan biarkan admin menghapus dirinya sendiri (opsional) if (Auth::id() == $admin->id_user) { return redirect()->back()->with('error', 'Anda tidak bisa menghapus akun sendiri!'); } - // 3. Eksekusi hapus $admin->delete(); - // 4. Kembali dengan pesan sukses return redirect()->route('admin.kelola-admin.index') ->with('success', 'Admin berhasil dihapus secara permanen.'); } diff --git a/app/Http/Requests/Admin/AdminRequest.php b/app/Http/Requests/Admin/AdminRequest.php new file mode 100644 index 0000000..184619b --- /dev/null +++ b/app/Http/Requests/Admin/AdminRequest.php @@ -0,0 +1,74 @@ +route('id'); + + return [ + 'nama' => 'required|string|min:5|max:100', + 'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $adminId . ',id_user', + 'email' => 'required|email:dns|max:255|unique:users,email,' . $adminId . ',id_user', + 'no_wa' => 'required|numeric|digits_between:10,15', + 'role' => 'required|in:admin_foto,admin_buket', + 'alamat' => 'required|string|max:255', + ]; + } + + public function messages(): array + { + return [ + 'required' => 'Kolom :attribute wajib diisi.', + 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', + 'min' => ':attribute minimal harus berisi :min karakter.', + 'max' => ':attribute maksimal hanya boleh :max karakter.', + 'numeric' => ':attribute harus berupa angka.', + 'digits_between' => ':attribute harus berjumlah antara :min sampai :max digit.', + 'email' => 'Format :attribute tidak valid.', + 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', + 'in' => ':attribute yang dipilih tidak sesuai pilihan yang tersedia.', + ]; + } + + public function attributes(): array + { + return [ + 'nama' => 'nama lengkap', + 'username' => 'username', + 'email' => 'alamat email', + 'no_wa' => 'nomor WA', + 'role' => 'peran admin', + 'alamat' => 'alamat lengkap', + ]; + } + + /** + * Penanganan khusus agar Modal tetap terbuka saat validasi gagal. + */ + protected function failedValidation(Validator $validator) + { + $redirect = redirect()->back()->withErrors($validator)->withInput(); + + if ($this->isMethod('post')) { + $redirect->with('error_modal', 'create'); + } else { + $redirect->with('error_id', $this->route('id')); + } + + throw new HttpResponseException($redirect); + } +}