diff --git a/app/Http/Controllers/admin/ManajemenAdminController.php b/app/Http/Controllers/admin/ManajemenAdminController.php index a3e1fe9..b5449d8 100644 --- a/app/Http/Controllers/admin/ManajemenAdminController.php +++ b/app/Http/Controllers/admin/ManajemenAdminController.php @@ -3,63 +3,149 @@ namespace App\Http\Controllers\Admin; 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; class ManajemenAdminController extends Controller { + public static function middleware(): array + { + return [ + new Middleware(function ($request, $next) { + if (Auth::user()->role !== 'pemilik') { + abort(403); + } + return $next($request); + }), + ]; + } /** * Display a listing of the resource. */ public function index() { - return view('admin.kelola-admin'); + $admin = User::where('role', '!=', 'pemilik') + ->latest() + ->get(); + // 2. Kirim data ($buket) ke view + return view('admin.kelola-admin.index', compact('admin')); } - /** - * Show the form for creating a new resource. - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - */ + // --- Bagian STORE --- public function store(Request $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', + ], [ + // Detail Pesan Menggunakan :attribute + '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.', + ], [ + // Alias untuk :attribute agar pesan lebih rapi dibaca + '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), + ]); + + return redirect()->back()->with('success', 'Admin berhasil ditambahkan!'); } - /** - * Display the specified resource. - */ - public function show(string $id) - { - // - } - - /** - * Show the form for editing the specified resource. - */ - public function edit(string $id) - { - // - } - - /** - * Update the specified resource in storage. - */ + // --- Bagian UPDATE --- public function update(Request $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', + ], [ + // Detail Pesan Menggunakan :attribute + '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.', + ], [ + // Alias untuk :attribute agar pesan lebih rapi dibaca + '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); + } + + // Menggunakan update hanya pada kolom yang diizinkan (mencegah injeksi role owner) + $admin->update($request->only(['nama', 'username', 'email', 'no_wa', 'role', 'alamat'])); + + return redirect()->back()->with('success', 'Data berhasil diperbarui!'); } - /** - * Remove the specified resource from storage. - */ 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/resources/views/admin/kelola-admin/index.blade.php b/resources/views/admin/kelola-admin/index.blade.php index 656b7a2..130b83a 100644 --- a/resources/views/admin/kelola-admin/index.blade.php +++ b/resources/views/admin/kelola-admin/index.blade.php @@ -15,38 +15,57 @@
| No. | -Nama Lengkap | -Nomor WA | -Peran | -Aksi | +No. | +Nama Lengkap | +Nomor WA | +Peran | +Aksi | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Graiden | -076 4820 8838 | -Offenburg | -Offenburg | -- Selesai - | -- - - - - - - - - - | -||||||
| {{ $loop->iteration }} | +{{ $a->nama }} | +{{ $a->no_wa }} | +{{ $a->email }} | ++ + {{ str_replace('_', ' ', $a->role) }} + + | ++ + + + + + + + + + + + | +||||||
|
+
+ Belum ada data paket foto.
+
+ |
+ |||||||||||