TIF_NGANJUK_E41220418/app/Http/Controllers/Admin/ManajemenAdminController.php

152 lines
6.1 KiB
PHP
Executable File

<?php
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()
{
$admin = User::where('role', '!=', 'pemilik')
->latest()
->get();
// 2. Kirim data ($buket) ke view
return view('admin.kelola-admin.index', compact('admin'));
}
// --- 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!');
}
// --- 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!');
}
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.');
}
}