diff --git a/README.md b/README.md index 7d822e4..2fffb82 100644 --- a/README.md +++ b/README.md @@ -149,9 +149,14 @@ ## 🔑 Informasi Login (Dummy Data) * **NISN**: `1234567890` * **Password**: `password` +Gunakan kredensial berikut untuk masuk sebagai guru: + +* **email**: `rina.marlina@smkn1perpus.sch.id` +* **Password**: `password` + Gunakan kredensial berikut untuk masuk sebagai penjaga perpus: -* **NISN**: `2233445566` +* **email**: `budi.santoso@smkn1perpus.sch.id` * **Password**: `password` --- diff --git a/app/Http/Controllers/Admin/AdminRekomendasiController.php b/app/Http/Controllers/Admin/AdminRekomendasiController.php new file mode 100644 index 0000000..e06c688 --- /dev/null +++ b/app/Http/Controllers/Admin/AdminRekomendasiController.php @@ -0,0 +1,52 @@ +map(function ($item) { + $videoId = $this->extractYouTubeId($item['youtube_link']); + if ($videoId) { + $item['thumbnail'] = "https://img.youtube.com/vi/{$videoId}/hqdefault.jpg"; + } else { + $item['thumbnail'] = 'https://via.placeholder.com/150?text=No+Preview'; + } + return $item; + }); + + return view('admin.rekomendasi.index', [ + 'pageTitle' => 'Manajemen Rekomendasi', + 'semuaRekomendasi' => $semuaRekomendasi + ]); + } + + public function create() + { + return view('admin.rekomendasi.create', ['pageTitle' => 'Tambah Rekomendasi']); + } + + public function edit($id) + { + $rekomendasi = DummyDataService::getRekomendasiPembelajaran()->firstWhere('id', (int)$id); + abort_if(!$rekomendasi, 404); + return view('admin.rekomendasi.edit', ['pageTitle' => 'Edit Rekomendasi', 'rekomendasi' => $rekomendasi]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 9de1b68..129d09f 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -18,6 +18,18 @@ public function index() $statistikBulanan = DummyDataService::getStatistikBulanan(); $bukuPinjamOffline = DummyDataService::getBukuPinjamOffline($user); $bacaBukuOnline = DummyDataService::getBacaBukuOnline($user); + $rekomendasiPembelajaran = DummyDataService::getRekomendasiPembelajaran(); + + // Menambahkan thumbnail YouTube ke setiap rekomendasi + $rekomendasiPembelajaran = DummyDataService::getRekomendasiPembelajaran()->map(function ($item) { + $videoId = $this->extractYouTubeId($item['youtube_link']); + if ($videoId) { + $item['thumbnail'] = "https://img.youtube.com/vi/{$videoId}/hqdefault.jpg"; + } else { + $item['thumbnail'] = 'https://via.placeholder.com/150?text=No+Preview'; + } + return $item; + }); $hour = date('H'); $greeting = "Selamat Pagi"; @@ -39,6 +51,16 @@ public function index() 'bukuPinjamOffline', 'bacaBukuOnline', 'greeting', + 'rekomendasiPembelajaran' )); } + + /** + * Helper function untuk mengekstrak ID video dari URL YouTube. + */ + private function extractYouTubeId(string $url): ?string + { + preg_match('/(v=|vi=|youtu.be\/|embed\/|\/v\/|\?v=|\&v=)(.+?)\b/i', $url, $matches); + return $matches[2] ?? null; + } } diff --git a/app/Http/Controllers/RekomendasiController.php b/app/Http/Controllers/RekomendasiController.php new file mode 100644 index 0000000..6d91141 --- /dev/null +++ b/app/Http/Controllers/RekomendasiController.php @@ -0,0 +1,36 @@ +firstWhere('id', (int)$id); + abort_if(!$rekomendasi, 404); + + // Menambahkan thumbnail YouTube ke setiap rekomendasi + $embedLink = null; + $videoId = $this->extractYouTubeId($rekomendasi['youtube_link']); + if ($videoId) { + $embedLink = "https://www.youtube.com/embed/" . $videoId; + } + $rekomendasi['youtube_embed_link'] = $embedLink; + + return view('rekomendasiShow', [ + 'pageTitle' => $rekomendasi['judul'], + 'rekomendasi' => $rekomendasi, + ]); + } +} \ No newline at end of file diff --git a/app/Services/DummyDataService.php b/app/Services/DummyDataService.php index cd00f5f..1cb127e 100644 --- a/app/Services/DummyDataService.php +++ b/app/Services/DummyDataService.php @@ -24,7 +24,7 @@ public static function getAllSiswa(): array [ 'id' => 2, 'nama_lengkap' => 'Budi Santoso', - 'email' => 'budi.santoso@smkn1perpus.sch.id', + 'email' => 'budi.santoso@smkn1perpus.sch.id', 'password' => 'password', 'role' => 'penjaga perpus', ], @@ -53,7 +53,7 @@ public static function getAllSiswa(): array [ 'id' => 5, 'nama_lengkap' => 'Rina Marlina', - 'email' => 'rina.marlina@smkn1perpus.sch.id', + 'email' => 'rina.marlina@smkn1perpus.sch.id', 'password' => 'password', 'role' => 'guru', ], @@ -71,6 +71,85 @@ public static function getAktivitasMingguan(): array ]; } + /** + *Data Dummy untuk fitur Rekomendasi Pembelajaran. + */ + public static function getRekomendasiPembelajaran(): \Illuminate\Support\Collection + { + return collect([ + [ + 'id' => 1, + 'judul' => 'Sistem Tata Surya - Rangkuman Materi IPA Terpadu', + 'kategori' => 'IPA', + 'youtube_link' => 'https://www.youtube.com/watch?v=libKVRa01L8', + 'deskripsi' => '
Video animasi seru yang menjelaskan tentang planet-planet di tata surya kita...
', + ], + [ + 'id' => 2, + 'judul' => 'Macam-macam Zat dan Perubahannya - IPA Kelas 7', + 'kategori' => 'IPA', + 'youtube_link' => 'https://www.youtube.com/watch?v=CfwPsKdC5w8', + 'deskripsi' => 'Zat (materi) adalah sesuatu yang menempati ruang dan mempunyai massa...
', + ], + [ + 'id' => 3, + 'judul' => 'Sejarah Kerajaan Majapahit, Kerajaan Terbesar di Nusantara', + 'kategori' => 'IPS', + 'youtube_link' => 'https://www.youtube.com/watch?v=2Z9hqVqPY_s', + 'deskripsi' => 'Pelajari sejarah salah satu kerajaan terbesar di Indonesia...
', + ], + [ + 'id' => 4, + 'judul' => 'Belajar HTML dari NOL untuk Pemula', + 'kategori' => 'Informatika', + 'youtube_link' => 'https://www.youtube.com/watch?v=NBZ9Ro6UKV8', + 'deskripsi' => 'Ingin belajar membuat website? Mulai dari sini!...
', + ], + [ + 'id' => 5, + 'judul' => 'Rumus Cepat Teorema Pythagoras', + 'kategori' => 'Matematika', + 'youtube_link' => 'https://youtu.be/JJaptwjRbxc?si=XRxkrAf5G76iJ5CG', + 'deskripsi' => 'Jangan takut lagi dengan soal Pythagoras!...
', + ], + [ + 'id' => 6, + 'judul' => 'Cara Menggambar Perspektif 1 Titik Hilang', + 'kategori' => 'Seni Budaya', + 'youtube_link' => 'https://youtu.be/SS7dLGDWUSs?si=lVw8jBkaWT---7ch', + 'deskripsi' => 'Buat gambarmu terlihat lebih hidup dan realistis!...
', + ], + [ + 'id' => 7, + 'judul' => 'Sistem Peredaran Darah pada Manusia', + 'kategori' => 'IPA', + 'youtube_link' => 'https://youtu.be/QLoqMruGbkc?si=KiP5VZ4ByKSdFJK9', + 'deskripsi' => 'Pahami bagaimana jantung memompa darah ke seluruh tubuh...
', + ], + [ + 'id' => 8, + 'judul' => 'Unsur-Unsur Intrinsik Cerpen', + 'kategori' => 'Bahasa Indonesia', + 'youtube_link' => 'https://youtu.be/PQNuvyQZYvI?si=Lr9AeTO_k6vY21ei', + 'deskripsi' => 'Analisis sebuah cerita pendek menjadi lebih mudah...
', + ], + [ + 'id' => 9, + 'judul' => 'Apa itu Pemanasan Global?', + 'kategori' => 'IPS', + 'youtube_link' => 'https://youtu.be/pVjXm340tbw?si=GeMhYK1FSOGtV86X', + 'deskripsi' => 'Mengapa suhu bumi semakin panas? Pelajari tentang penyebabnya...
', + ], + [ + 'id' => 10, + 'judul' => 'APA ITU LUBANG HITAM?', + 'kategori' => 'Sains', + 'youtube_link' => 'https://youtu.be/Tx87wEaDtxo?si=fNORkTYOeLiH9_xh', + 'deskripsi' => 'Jelajahi salah satu objek paling misterius di alam semesta...
', + ], + ]); + } + /** * Data dummy untuk menampilkan 10 siswa paling aktif di laporan guru. */ @@ -111,8 +190,9 @@ public static function getLaporanMinatBaca(): array ]; } - - + /** + * Data dummy untuk Halaman Dashboard Statistik Petugas Perpus + */ public static function getAdminDashboardStats(): array { $allBooks = self::getAllBooks(); @@ -432,7 +512,6 @@ public static function getBacaBukuOnline($user): array /** * Mengambil daftar buku untuk katalog dengan filter. */ - // app/Services/DummyDataService.php public static function getKatalogBuku(array $filters = []): \Illuminate\Support\Collection { diff --git a/resources/views/admin/rekomendasi/create.blade.php b/resources/views/admin/rekomendasi/create.blade.php new file mode 100644 index 0000000..14ad250 --- /dev/null +++ b/resources/views/admin/rekomendasi/create.blade.php @@ -0,0 +1,24 @@ +