diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index d0cd80d..eb556a1 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -3,22 +3,22 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; -use App\Models\User; // Model User Asli -use App\Models\MasterInduk; // Model Whitelist +use App\Models\User; +use App\Models\MasterInduk; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; class UserController extends Controller { public function index() { $users = User::orderBy('created_at', 'desc')->paginate(10); - $whitelists = MasterInduk::orderBy('created_at', 'desc')->get(); return view('admin.pengguna.index', [ 'pageTitle' => 'Daftar Pengguna', - 'users' => $users, - 'whitelists' => $whitelists + 'users' => $users, + 'whitelists' => $whitelists ]); } @@ -27,6 +27,63 @@ public function create() return view('admin.pengguna.create', ['pageTitle' => 'Tambah Pengguna Baru']); } + public function store(Request $request) + { + $request->validate([ + 'nama_lengkap' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email', + 'role' => 'required|in:siswa,guru,penjaga perpus', + 'no_hp' => 'nullable|string|max:20', + 'password' => 'required|min:6|confirmed', + 'nomor_induk' => [ + 'required', + function ($attribute, $value, $fail) use ($request) { + $label = $request->role == 'siswa' ? 'NISN' : 'NIP/NIK'; + + // Cek Nisn/Nip sudah dipakai di tabel users + $sudahDipakai = User::where('nisn', $value)->orWhere('nip', $value)->exists(); + if ($sudahDipakai) { + $fail("{$label} ini sudah digunakan oleh akun lain."); + return; + } + + if (in_array($request->role, ['siswa', 'guru'])) { + $terdaftar = MasterInduk::where('nomor_induk', $value) + ->where('role', $request->role) + ->exists(); + if (!$terdaftar) { + $fail("{$label} tidak terdaftar di data sekolah. Hubungi admin."); + } + } + }, + ], + ], [ + 'role.in' => 'Pilih role yang valid.', + 'email.unique' => 'Email sudah terdaftar.', + 'password.confirmed' => 'Konfirmasi password tidak cocok.' + ]); + + $user = new User(); + $user->name = $request->nama_lengkap; + $user->email = $request->email; + $user->role = $request->role; + $user->password = Hash::make($request->password); + $user->no_hp = $request->no_hp; + + // Validasi NISN dan NIP berdasarkan Role + if ($request->role == 'siswa') { + $user->nisn = $request->nomor_induk; + $user->kelas = $request->kelas; + $user->golongan = $request->golongan; + } else { + $user->nip = $request->nomor_induk; + } + + $user->save(); + + return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil ditambahkan.'); + } + public function edit($id) { $pengguna = User::findOrFail($id); @@ -36,6 +93,71 @@ public function edit($id) ]); } + public function update(Request $request, $id) + { + $request->validate([ + 'nama_lengkap' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email,' . $id, + 'role' => 'required|in:siswa,guru,penjaga perpus', + 'no_hp' => 'nullable|string|max:20', + 'password' => 'nullable|min:6|confirmed', + 'nomor_induk' => [ + 'required', + function ($attribute, $value, $fail) use ($request, $id) { + $label = $request->role == 'siswa' ? 'NISN' : 'NIP/NIK'; + + // cek nisn/nip sudah dipakai di tabel users (kecuali oleh dirinya sendiri) + $sudahDipakai = User::where(function ($query) use ($value) { + $query->where('nisn', $value)->orWhere('nip', $value); + })->where('id', '!=', $id)->exists(); + + if ($sudahDipakai) { + $fail("{$label} ini sudah digunakan oleh akun lain."); + return; + } + + if (in_array($request->role, ['siswa', 'guru'])) { + $terdaftar = MasterInduk::where('nomor_induk', $value) + ->where('role', $request->role) + ->exists(); + if (!$terdaftar) { + $fail("{$label} tidak terdaftar di data sekolah. Hubungi admin."); + } + } + }, + ], + ]); + + $user = User::findOrFail($id); + $user->name = $request->nama_lengkap; + $user->email = $request->email; + $user->role = $request->role; + $user->no_hp = $request->no_hp; + + // Jika password diisi, maka update. Jika kosong, biarkan password lama. + if ($request->filled('password')) { + $user->password = \Illuminate\Support\Facades\Hash::make($request->password); + } + + $user->nisn = null; + $user->nip = null; + $user->kelas = null; + $user->golongan = null; + + // Masukkan kembali sesuai role + if ($request->role == 'siswa') { + $user->nisn = $request->nomor_induk; + $user->kelas = $request->kelas; + $user->golongan = $request->golongan; + } else { + $user->nip = $request->nomor_induk; + } + + $user->save(); + + return redirect()->route('admin.pengguna.index')->with('success', 'Data pengguna berhasil diperbarui.'); + } + public function destroy($id) { User::findOrFail($id)->delete(); diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php index 6db1882..2e24fd0 100644 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -20,7 +20,8 @@ public function up(): void $table->string('role')->default('siswa'); $table->string('nisn')->nullable(); $table->string('nip')->nullable(); - $table->string('nomor_hp')->nullable(); + $table->string('no_hp')->nullable(); + $table->string('golongan')->nullable(); $table->string('kelas')->nullable(); $table->rememberToken(); $table->timestamps(); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4bb7441..71f06f8 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -18,7 +18,6 @@ public function run() MasterInduk::truncate(); DB::statement('SET FOREIGN_KEY_CHECKS=1;'); - // 1. ISI DATA INDUK (WHITELIST) $whitelist = [ ['nomor_induk' => '1234567890', 'role' => 'siswa', 'nama_pemilik' => 'Silvi Rahmawati'], ['nomor_induk' => '9988776655', 'role' => 'siswa', 'nama_pemilik' => 'Siti Nurhaliza'], @@ -30,18 +29,19 @@ public function run() MasterInduk::create($w); } - // 2. ISI USER ASLI (ID USER DISAMAKAN DENGAN DUMMY) + // ISI USER ASLI // ID 1: Silvi (Siswa) User::create([ 'id' => 1, - 'name' => 'Silvi Rahmawati', // Pakai 'name' saja, 'nama_lengkap' dihapus + 'name' => 'Silvi Rahmawati', 'email' => 'silvi.rahmawati@smkn1perpus.sch.id', 'password' => Hash::make('password'), 'role' => 'siswa', 'nisn' => '1234567890', - 'nomor_hp' => '08123456789', - 'kelas' => 'XII RPL' + 'no_hp' => '08123456789', + 'kelas' => 'XII RPL', + 'golongan' => 'A' ]); // ID 2: Budi (Admin/Penjaga) @@ -62,8 +62,9 @@ public function run() 'password' => Hash::make('password'), 'role' => 'siswa', 'nisn' => '9988776655', - 'nomor_hp' => '081998877665', - 'kelas' => 'XII RPL A' + 'no_hp' => '081998877665', + 'kelas' => 'XII RPL', + 'golongan' => 'B' ]); // ID 4: Andi (Siswa) @@ -74,8 +75,9 @@ public function run() 'password' => Hash::make('password'), 'role' => 'siswa', 'nisn' => '5566778899', - 'nomor_hp' => '081556677889', - 'kelas' => 'XII RPL A' + 'no_hp' => '081556677889', + 'kelas' => 'XII RPL', + 'golongan' => 'C' ]); // ID 5: Rina (Guru) diff --git a/resources/views/admin/pengguna/create.blade.php b/resources/views/admin/pengguna/create.blade.php index e284779..a8020dc 100644 --- a/resources/views/admin/pengguna/create.blade.php +++ b/resources/views/admin/pengguna/create.blade.php @@ -11,48 +11,171 @@
| No | Nama Lengkap | -Kontak (Email & HP) | Role | -Nomor Induk | -Aksi | +NISN / NIP | +Kelas / Golongan | +Aksi | |
|---|---|---|---|---|---|---|---|---|---|
| {{ $index + 1 }} | -{{ $user->name }} | -{{ $user->email }} | -- - {{ ucfirst($user->role) }} - - | -- {{ $user->nisn ?? $user->nip ?? '-' }} - | -- - Edit - - - | -||||
| {{ $users->firstItem() + $index }} | +{{ $user->name }} | +
+ {{ $user->email }}
+ {{ $user->no_hp ?? '-' }}
+ |
+ + @if($user->role == 'guru') + Guru + @elseif($user->role == 'siswa') + Siswa + @else + Petugas + @endif + | ++ {{ $user->nisn ?? ($user->nip ?? '-') }} + | ++ @if($user->role == 'siswa') + Kelas: {{ $user->kelas ?? '-' }} / {{ $user->golongan ?? '-' }} + @else + - + @endif + | ++ + Edit + + + | +|||
| Belum ada pengguna terdaftar. | -|||||||||
| Belum ada pengguna terdaftar. | +|||||||||
Daftar NIP/NISN yang diizinkan untuk mendaftar.