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 @@ + + @section('page-title', $pageTitle) +
+
+ +
Formulir Rekomendasi Baru
+
+
+
+
+
+
+
+
+
+
+
+ @push('scripts') + + + @endpush +
\ No newline at end of file diff --git a/resources/views/admin/rekomendasi/edit.blade.php b/resources/views/admin/rekomendasi/edit.blade.php new file mode 100644 index 0000000..2552305 --- /dev/null +++ b/resources/views/admin/rekomendasi/edit.blade.php @@ -0,0 +1,24 @@ + + @section('page-title', $pageTitle) +
+
+ +
Formulir Edit Rekomendasi
+
+
+
+
+
+
+
+
+
+
+
+ @push('scripts') + + + @endpush +
\ No newline at end of file diff --git a/resources/views/admin/rekomendasi/index.blade.php b/resources/views/admin/rekomendasi/index.blade.php new file mode 100644 index 0000000..aa11efd --- /dev/null +++ b/resources/views/admin/rekomendasi/index.blade.php @@ -0,0 +1,29 @@ + + @section('page-title', $pageTitle) +
+
+
Kelola Rekomendasi Pembelajaran
+ Buat Rekomendasi +
+
+
+ + + + @foreach($semuaRekomendasi as $item) + + + + + + + + @endforeach + +
NoThumbnailJudulKategoriAksi
{{ $loop->iteration }}Thumbnail{{ $item['judul'] }}{{ $item['kategori'] }} + +
+
+
+
+
\ No newline at end of file diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 11cbe97..410b396 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,6 +1,6 @@ @section('page-title', 'Dashboard') - + {{-- -
- @forelse($bukuPinjamOffline as $buku) -
- -
- - Sisa: {{ $buku['sisa_hari'] }} hari -
-
-
- @empty -
-
- -

Tidak ada buku yang sedang dipinjam secara offline.

+ @endif +
+
+
+ @forelse($bukuPinjamOffline as $buku) +
+ +
+ + Sisa: {{ $buku['sisa_hari'] }} hari
-
- @endforelse -
-
- -
-
-
-
- -
-
Baca Buku Online
+
- -
-
- @forelse($bacaBukuOnline as $buku) -
- - -
-
- Progress - {{ $buku['progress'] }}% -
-
-
-
-
-
-
- + @empty + {{-- Jika tidak ada buku, akan menampilkan pesan ini di dalam card-body --}} +
+
+ +

Tidak ada buku yang sedang dipinjam secara offline.

- @empty -
-
- -

Tidak ada buku yang sedang dibaca secara online.

-
-
- @endforelse -
+
+ @endforelse
+ +
+
+
+ Baca Buku Online +
+ @if (count($bacaBukuOnline) > 3) +
+ +
+ @endif +
+
+
+ @forelse($bacaBukuOnline as $buku) +
+ +
+
+ Progress + {{ $buku['progress'] }}% +
+
+
+
+
+
+
+ @empty + {{-- Jika tidak ada buku, akan menampilkan pesan ini di dalam card-body --}} +
+
+ +

Tidak ada buku yang sedang dibaca secara online.

+
+
+ @endforelse +
+
+
- + + @if (Auth::user()->role == 'guru') +
+
+
+ Rekomendasi Pembelajaran +
+ +
+
+ @forelse($rekomendasiPembelajaran->take(3) as $item) + + Thumbnail +
+
{{ $item['judul'] }}
+ {{ $item['kategori'] }} +
+
+ @if (!$loop->last) +
+ @endif + @empty +

Belum ada rekomendasi.

+ @endforelse +
+
+ @endif + + + + + + +