diff --git a/app/Http/Controllers/Admin/AdminPeminjamanController.php b/app/Http/Controllers/Admin/AdminPeminjamanController.php index bb17f7c..2b12e54 100644 --- a/app/Http/Controllers/Admin/AdminPeminjamanController.php +++ b/app/Http/Controllers/Admin/AdminPeminjamanController.php @@ -22,7 +22,7 @@ public function index(Request $request) $peminjamanAktif = $groupedLoans->map(function ($userLoans, $userId) { $user = $userLoans->first()->user; $firstLoan = $userLoans->first(); - + return [ 'id_peminjaman' => 'PIN-ADM-' . sprintf('%03d', $userId), 'user_id' => $userId, @@ -43,7 +43,7 @@ public function index(Request $request) $daftarPeminjam = $peminjamanAktif->pluck('peminjam')->unique(); return view('admin.peminjaman.index', [ - 'pageTitle' => 'Manajemen Peminjaman & Denda', + 'pageTitle' => 'Manajemen Peminjaman', 'peminjamanAktif' => $peminjamanAktif, 'daftarPeminjam' => $daftarPeminjam, ]); @@ -52,7 +52,7 @@ public function index(Request $request) public function create() { $users = User::whereIn('role', ['siswa', 'guru'])->get(); - + $groupedUsers = $users->map(function ($user) { $jumlahPinjam = Loan::where('user_id', $user->id) ->whereIn('status', ['Dipinjam', 'Terlambat']) @@ -98,7 +98,7 @@ public function store(Request $request) try { foreach ($validated['buku_ids'] as $bookId) { $book = Book::findOrFail($bookId); - + // Check if book is available if ($book->status !== 'Tersedia') { throw new \Exception("Buku '{$book->judul}' tidak tersedia."); @@ -129,14 +129,14 @@ public function store(Request $request) public function dendaIndex() { $now = Carbon::now(); - + // Fetch all loans that are overdue or users that are banned $loans = Loan::with(['user', 'book']) - ->where(function($query) use ($now) { + ->where(function ($query) use ($now) { $query->where('due_at', '<', $now) - ->whereIn('status', ['Dipinjam', 'Terlambat']); + ->whereIn('status', ['Dipinjam', 'Terlambat']); }) - ->orWhereHas('user', function($query) { + ->orWhereHas('user', function ($query) { $query->where('is_banned', true); }) ->get(); @@ -146,10 +146,10 @@ public function dendaIndex() $siswaTelat = $groupedLoans->map(function ($userLoans, $userId) use ($now) { $user = $userLoans->first()->user; $firstLoan = $userLoans->first(); - + $tenggat = Carbon::parse($firstLoan->due_at); $hariTelat = $now->greaterThan($tenggat) ? (int) $tenggat->diffInDays($now) : 0; - + $isGuru = $user->role === 'guru'; $totalDenda = $isGuru ? 0 : ($hariTelat * 1000); @@ -158,15 +158,15 @@ public function dendaIndex() $waLink = '#'; if ($hp) { if (substr($hp, 0, 1) == '0') $hp = '62' . substr($hp, 1); - + if ($isGuru && $hariTelat > 0) { $pesan = "Halo Bapak/Ibu {$user->nama_lengkap}, anda terlambat pengembalian buku selama {$hariTelat} hari. Mohon segera dikembalikan ke perpustakaan. Terima kasih."; } else { - $pesan = $hariTelat > 0 + $pesan = $hariTelat > 0 ? "Halo {$user->nama_lengkap}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($totalDenda, 0, ',', '.') : "Halo {$user->nama_lengkap}, akun anda sedang dinonaktifkan sementara. Mohon hubungi petugas."; } - + $waLink = "https://wa.me/{$hp}?text=" . urlencode($pesan); } @@ -257,4 +257,4 @@ public function kembalikan(Request $request) return response()->json(['status' => 'error', 'message' => $e->getMessage()], 500); } } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 9ddca0b..d527355 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -7,12 +7,22 @@ use App\Models\MasterInduk; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; +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); + $query = User::orderBy('created_at', 'desc'); + + if (request()->has('role') && request('role') != '') { + $query->where('role', request('role')); + } + + $users = $query->paginate(10)->appends(request()->query()); $whitelists = MasterInduk::orderBy('created_at', 'desc')->get(); @@ -23,29 +33,148 @@ public function index() ]); } - /** - * Menampilkan form untuk membuat pengguna baru. - */ public function create() { - return view('admin.pengguna.create', [ - 'pageTitle' => 'Tambah Pengguna Baru', - ]); + 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.'); } - /** - * Menampilkan form untuk mengedit pengguna yang ada. - */ public function edit($id) { $pengguna = User::findOrFail($id); - return view('admin.pengguna.edit', [ 'pageTitle' => 'Edit Pengguna: ' . $pengguna->nama_lengkap, 'pengguna' => $pengguna, ]); } + 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(); + return back()->with('success', 'Pengguna berhasil dihapus.'); + } + public function store(Request $request) { $validated = $request->validate([ @@ -100,4 +229,4 @@ public function destroy($id) return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil dihapus.'); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Auth/AdminLoginController.php b/app/Http/Controllers/Auth/AdminLoginController.php index 9f41832..3d4e140 100644 --- a/app/Http/Controllers/Auth/AdminLoginController.php +++ b/app/Http/Controllers/Auth/AdminLoginController.php @@ -19,7 +19,7 @@ public function create(): View // Memproses login admin public function store(LoginRequest $request): RedirectResponse { - $request->authenticate(); // Menjalankan logika ketat di LoginRequest + $request->authenticate(); $request->session()->regenerate(); return redirect()->route('admin.dashboard'); } diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index df2717e..b4a33f1 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -4,39 +4,35 @@ use App\Http\Controllers\Controller; use App\Models\User; +use App\Models\MasterInduk; use Illuminate\Auth\Events\Registered; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; +use Illuminate\Validation\ValidationException; use Illuminate\View\View; class RegisteredUserController extends Controller { - /** - * Menampilkan halaman registrasi. - */ public function create(Request $request): View { - // Bagian Pengambilan Role dari URL - $role = $request->query('role', 'siswa'); // Ambil 'role' dari URL, default ke 'siswa' - - // Kirim $role ke view + $role = $request->query('role', 'siswa'); return view('auth.register', ['role' => $role]); } - /** - * Menangani permintaan registrasi yang masuk. - */ public function store(Request $request): RedirectResponse { $role = $request->input('role'); + $rules = [ 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'confirmed', Rules\Password::defaults()], 'role' => ['required', 'in:siswa,guru'], + 'role' => ['required', 'in:siswa,guru'], ]; if ($role === 'siswa') { @@ -47,13 +43,27 @@ public function store(Request $request): RedirectResponse $request->validate($rules); + + $nomorInduk = ($role === 'siswa') ? $request->nisn : $request->nip; + + $isWhitelisted = MasterInduk::where('nomor_induk', $nomorInduk) + ->where('role', $role) + ->exists(); + + if (!$isWhitelisted) { + throw ValidationException::withMessages([ + ($role === 'siswa' ? 'nisn' : 'nip') => ['Nomor induk tidak terdaftar di Data Sekolah. Hubungi petugas.'], + ]); + } + + $user = User::create([ 'name' => $request->name, - 'nama_lengkap' => $request->name, - 'email' => ($request->nisn ?: $request->nip) . '@smkn1perpus.sch.id', + 'email' => $request->email, 'password' => Hash::make($request->password), - 'role' => $request->role, - 'nomor_induk' => $request->nisn ?: $request->nip, + 'role' => $role, + 'nisn' => ($role === 'siswa') ? $nomorInduk : null, + 'nip' => ($role === 'guru') ? $nomorInduk : null, ]); event(new Registered($user)); @@ -66,4 +76,4 @@ public function store(Request $request): RedirectResponse return redirect()->route('dashboard'); } } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 32c6e2d..2b027da 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -16,9 +16,9 @@ class ProfileController extends Controller { /** - * Menampilkan halaman utama profil pengguna secara dinamis berdasarkan role. + * Tampilkan halaman profil user. */ - public function index(): RedirectResponse|View + public function index(Request $request): View { $user = Auth::user(); if (!$user) { @@ -27,7 +27,6 @@ public function index(): RedirectResponse|View $viewData = ['user' => $user]; - // Menyiapkan data berdasarkan role pengguna if ($user->role === 'penjaga perpus') { // Data untuk Penjaga Perpus: Statistik global & aktivitas terkini $viewData['statistik'] = [ @@ -43,11 +42,10 @@ public function index(): RedirectResponse|View 'waktu' => $loan->created_at->diffForHumans(), 'status' => $loan->status, ]); - } elseif ($user->role === 'guru') { // Data untuk Guru $loans = Loan::with('book')->where('user_id', $user->id)->whereIn('status', ['Dipinjam', 'Terlambat'])->get(); - + $viewData['bukuOffline'] = $loans->map(fn($loan) => [ 'judul' => $loan->book->judul, 'penulis' => $loan->book->penulis, @@ -67,11 +65,10 @@ public function index(): RedirectResponse|View 'buku_terpopuler' => Book::withCount('loans')->orderBy('loans_count', 'desc')->take(3)->get(), 'insight' => 'Siswa aktif meminjam buku kategori Sains.' ]; - } else { // Data untuk Siswa $loans = Loan::with('book')->where('user_id', $user->id)->whereIn('status', ['Dipinjam', 'Terlambat'])->get(); - + $viewData['bukuOffline'] = $loans->map(fn($loan) => [ 'judul' => $loan->book->judul, 'penulis' => $loan->book->penulis, @@ -98,7 +95,7 @@ public function index(): RedirectResponse|View } /** - * Menampilkan form untuk mengedit profil. + * Tampilkan form edit profil. */ public function edit(Request $request): View { @@ -108,9 +105,9 @@ public function edit(Request $request): View } /** - * Memperbarui informasi profil pengguna. + * Update data profil ke Database MySQL. */ - public function update(ProfileUpdateRequest $request): RedirectResponse + public function update(Request $request): RedirectResponse { $user = $request->user(); $user->fill($request->validated()); @@ -120,13 +117,14 @@ public function update(ProfileUpdateRequest $request): RedirectResponse $user->email_verified_at = null; } + $user->save(); $user->save(); return Redirect::route('profile.edit')->with('status', 'profile-updated'); } /** - * Menghapus akun pengguna. + * Hapus akun user. */ public function destroy(Request $request): RedirectResponse { diff --git a/app/Http/Controllers/RiwayatController.php b/app/Http/Controllers/RiwayatController.php index 18b014f..2ab38b9 100644 --- a/app/Http/Controllers/RiwayatController.php +++ b/app/Http/Controllers/RiwayatController.php @@ -5,13 +5,14 @@ use App\Models\Loan; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Auth; class RiwayatController extends Controller { public function offlineIndex() { $user = Auth::user(); - + $loans = Loan::with('book.category') ->where('user_id', $user->id) ->whereIn('status', ['Dipinjam', 'Dikembalikan', 'Terlambat']) @@ -80,4 +81,4 @@ public function onlineIndex() 'riwayatOnline' => $riwayatOnline, ]); } -} \ No newline at end of file +} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index 133504c..7c84280 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -2,54 +2,27 @@ namespace App\Http\Requests\Auth; -use App\Models\User; -use App\Services\DummyDataService; +use Illuminate\Auth\Events\Lockout; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; -use Illuminate\Auth\Events\Lockout; class LoginRequest extends FormRequest { - /** - * Menentukan apakah pengguna diizinkan untuk membuat request ini. - * Selalu true karena semua orang boleh mencoba login. - */ public function authorize(): bool { return true; } - /** - * Mendapatkan aturan validasi yang berlaku untuk request ini. - * Aturan ini dinamis, berubah tergantung pada 'role' yang dikirim dari form. - */ public function rules(): array { - // Jika form mengirim 'role' dengan nilai 'siswa'... - if ($this->input('role') === 'siswa') { - // ...maka validasi input 'nisn' dan 'password'. - return [ - 'nisn' => ['required', 'string'], - 'password' => ['required', 'string'], - ]; - } - - // Jika tidak (untuk 'guru' dan 'penjaga perpus') return [ - 'nip' => ['required', 'string'], 'password' => ['required', 'string'], ]; } - /** - * Mencoba untuk mengautentikasi kredensial dari request. - * Ini adalah "otak" dari proses login yang berisi logika paling penting. - * - * @throws \Illuminate\Validation\ValidationException - */ public function authenticate(): void { $this->ensureIsNotRateLimited(); @@ -98,19 +71,15 @@ public function authenticate(): void RateLimiter::clear($this->throttleKey()); } - /** - * Memastikan request login tidak dibatasi karena terlalu banyak percobaan. - */ public function ensureIsNotRateLimited(): void { - // Jika percobaan belum melebihi 5 kali, lanjutkan. - if (!RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { return; } - // Jika sudah lebih dari 5 kali, lemparkan error 'throttle'. event(new Lockout($this)); $seconds = RateLimiter::availableIn($this->throttleKey()); + throw ValidationException::withMessages([ 'email' => trans('auth.throttle', [ 'seconds' => $seconds, @@ -119,14 +88,9 @@ public function ensureIsNotRateLimited(): void ]); } - /** - * Mendapatkan kunci throttle untuk request ini. - * Kunci ini unik untuk setiap pengguna (berdasarkan nisn/email) dan alamat IP. - */ public function throttleKey(): string { - // Gunakan 'nisn' jika ada, jika tidak, gunakan 'email' sebagai identitas. - $loginIdentifier = $this->input('nisn') ?: $this->input('nip'); - return Str::transliterate(Str::lower($loginIdentifier) . '|' . $this->ip()); + $field = $this->input('email') ?? $this->input('nisn') ?? $this->input('nip') ?? 'unknown'; + return Str::transliterate(Str::lower($field) . '|' . $this->ip()); } -} \ No newline at end of file +} diff --git a/app/Models/User.php b/app/Models/User.php index 164d8f1..80a0e58 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -53,4 +53,9 @@ protected function casts(): array 'password' => 'hashed', ]; } + + public function getNamaLengkapAttribute() + { + return $this->name; + } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index bdfbd30..3581d83 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,16 +2,14 @@ namespace App\Providers; -use App\Auth\DummyUserProvider; -use Illuminate\Support\Facades\Auth; +// use App\Auth\DummyUserProvider; // Hapus atau Komen baris ini +use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { /** * The model to policy mappings for the application. - * - * @var array */ protected $policies = [ // @@ -24,4 +22,4 @@ public function boot(): void { // } -} \ No newline at end of file +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 403030f..dc9f3eb 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,26 +2,92 @@ namespace Database\Seeders; -use App\Models\User; -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use App\Models\User; +use App\Models\MasterInduk; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\DB; class DatabaseSeeder extends Seeder { - /** - * Seed the application's database. - */ - public function run(): void + public function run() { - // User seeder is already handled or skipped as per user request - - $this->call([ - UserSeeder::class, - CategorySeeder::class, - BookSeeder::class, - RecommendationSeeder::class, - AnnouncementSeeder::class, - LoanSeeder::class, + // Bersihkan data lama + DB::statement('SET FOREIGN_KEY_CHECKS=0;'); + User::truncate(); + MasterInduk::truncate(); + DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + + $whitelist = [ + ['nomor_induk' => '1234567890', 'role' => 'siswa', 'nama_pemilik' => 'Silvi Rahmawati'], + ['nomor_induk' => '9988776655', 'role' => 'siswa', 'nama_pemilik' => 'Siti Nurhaliza'], + ['nomor_induk' => '5566778899', 'role' => 'siswa', 'nama_pemilik' => 'Andi Pratama'], + ['nomor_induk' => '198506152010012', 'role' => 'guru', 'nama_pemilik' => 'Rina Marlina'], + ]; + + foreach ($whitelist as $w) { + MasterInduk::create($w); + } + + // ISI USER ASLI + + // ID 1: Silvi (Siswa) + User::create([ + 'id' => 1, + 'name' => 'Silvi Rahmawati', + 'email' => 'silvi.rahmawati@smkn1perpus.sch.id', + 'password' => Hash::make('password'), + 'role' => 'siswa', + 'nisn' => '1234567890', + 'no_hp' => '08123456789', + 'kelas' => 'XII RPL', + 'golongan' => 'A' + ]); + + // ID 2: Budi (Admin/Penjaga) + User::create([ + 'id' => 2, + 'name' => 'Budi Santoso', + 'email' => 'budi.santoso@smkn1perpus.sch.id', + 'password' => Hash::make('password'), + 'role' => 'penjaga perpus', + 'nip' => '197812312005011', + ]); + + // ID 3: Siti (Siswa) + User::create([ + 'id' => 3, + 'name' => 'Siti Nurhaliza', + 'email' => 'siti.nurhaliza@smkn1perpus.sch.id', + 'password' => Hash::make('password'), + 'role' => 'siswa', + 'nisn' => '9988776655', + 'no_hp' => '081998877665', + 'kelas' => 'XII RPL', + 'golongan' => 'B' + ]); + + // ID 4: Andi (Siswa) + User::create([ + 'id' => 4, + 'name' => 'Andi Pratama', + 'email' => 'andi.pratama@smkn1perpus.sch.id', + 'password' => Hash::make('password'), + 'role' => 'siswa', + 'nisn' => '5566778899', + 'no_hp' => '081556677889', + 'kelas' => 'XII RPL', + 'golongan' => 'C' + ]); + + // ID 5: Rina (Guru) + User::create([ + 'id' => 5, + 'name' => 'Rina Marlina', + 'email' => 'rina.marlina@smkn1perpus.sch.id', + 'password' => Hash::make('password'), + 'role' => 'guru', + 'nip' => '198506152010012', ]); } } diff --git a/resources/views/admin/buku/create.blade.php b/resources/views/admin/buku/create.blade.php index 2b96f7f..28f6534 100644 --- a/resources/views/admin/buku/create.blade.php +++ b/resources/views/admin/buku/create.blade.php @@ -33,7 +33,7 @@ @@ -48,8 +48,12 @@ placeholder="Contoh: 330"> -
- +
+ + {{-- TIPE AKSES --}} +
+ +
-
-
- -
- +
+
+ +
+ - z - + + + @push('scripts') + + @endpush + \ No newline at end of file diff --git a/resources/views/admin/buku/edit.blade.php b/resources/views/admin/buku/edit.blade.php index bce3589..4d4cad3 100644 --- a/resources/views/admin/buku/edit.blade.php +++ b/resources/views/admin/buku/edit.blade.php @@ -33,9 +33,9 @@ @@ -45,12 +45,12 @@ value="{{ old('tahun', $buku->tahun) }}" required> - + @php - $tipe_akses = is_array($buku->tipe_akses) - ? $buku->tipe_akses - : [$buku->tipe_akses]; - $isOffline = in_array('offline', $tipe_akses); + $tipe_akses = is_array($buku->tipe_akses) + ? $buku->tipe_akses + : [$buku->tipe_akses]; + $isOffline = in_array('offline', $tipe_akses); @endphp {{-- Field Kode Buku - Hanya untuk Buku Offline --}} @@ -99,4 +99,28 @@ class="img-thumbnail mt-2" width="150"> + + @push('scripts') + + @endpush \ No newline at end of file diff --git a/resources/views/admin/buku/index.blade.php b/resources/views/admin/buku/index.blade.php index 22a2fea..697367e 100644 --- a/resources/views/admin/buku/index.blade.php +++ b/resources/views/admin/buku/index.blade.php @@ -9,225 +9,379 @@
+ {{-- NAV TABS --}}
- {{-- TAB UNTUK BUKU OFFLINE --}} + + {{-- BUKU OFFLINE --}}
- - +
+ + - + @forelse($bukuOffline as $buku) - - - - - - - - - - @empty - - - - @endforelse - -
No Cover Judul Kode Buku PenulisStok StatusAksiAksi
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }}{{ $buku['kode_buku'] }}{{ $buku['penulis'] }} - @if ($buku['status'] == 'Tersedia') - Tersedia - @else - Dipinjam - @endif - - -
Tidak ada data buku offline.
-
-
- - {{-- TAB UNTUK BUKU ONLINE --}} -
-
- - - - - - - - - - - - @forelse($bukuOnline as $buku) - - - - - - - - - @empty - - - - @endforelse - -
NoCoverJudulPenulisFile PDFAksi
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }}{{ $buku['penulis'] }}{{ $buku['file_pdf'] ?? 'N/A' }} - - -
Tidak ada data buku online.
+ {{ $loop->iteration }} + {{ $buku['judul'] }} + {{ $buku['judul'] }} + {{ $buku['kode_buku'] }} + {{ $buku['penulis'] }} + + @if ($buku['status'] == 'Tersedia') + Tersedia + @else + Dipinjam + @endif + + + +
+ + + @empty + + Tidak ada data buku offline. + + + @endforelse + +
+ + {{-- BUKU ONLINE --}} +
+
+ + + + + + + + + + + + + @forelse($bukuOnline as $buku) + + + + + + + + + @empty + + + + @endforelse + +
NoCoverJudulPenulisFile PDFAksi
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }}{{ $buku['penulis'] }}{{ $buku['file_pdf'] ?? 'N/A' }} + + + + +
Tidak ada data buku online.
+
+ + {{-- ARSIP --}} +
+
+ + + + + + + + + + + + + + + + +
NoCoverJudulPenulisTipe AsalAksi
+ + Belum ada buku yang diarsipkan. +
+
+
+ +
+ + {{-- MODAL DETAIL BUKU --}}