TIF_NGANJUK_E41220778/app/Services/DummyDataService.php

381 lines
13 KiB
PHP

<?php
namespace App\Services;
class DummyDataService
{
public static function getAllSiswa(): array
{
return [
[
'id' => 1,
'nisn' => '1234567890',
'nama_lengkap' => 'Silvi Rahmawati',
'email' => 'silvi.rahmawati@smkn1perpus.sch.id',
'nomor_hp' => '08123456789',
'password' => 'password',
'role' => 'siswa',
'kelas' => 'XII RPL',
'golongan' => 'A',
],
[
'id' => 2,
'nisn' => '1122334455',
'nama_lengkap' => 'Budi Santoso',
'email' => 'budi.santoso@smkn1perpus.sch.id',
'nomor_hp' => '081122334455',
'password' => 'password',
'role' => 'guru',
],
[
'id' => 3,
'nisn' => '9988776655',
'nama_lengkap' => 'Siti Nurhaliza',
'email' => 'siti.nurhaliza@smkn1perpus.sch.id',
'nomor_hp' => '081998877665',
'password' => 'password',
'role' => 'siswa',
'kelas' => 'XII RPL A',
'golongan' => 'A',
],
[
'id' => 4,
'nisn' => '5566778899',
'nama_lengkap' => 'Andi Pratama',
'email' => 'andi.pratama@smkn1perpus.sch.id',
'nomor_hp' => '081556677889',
'password' => 'password',
'role' => 'siswa',
'kelas' => 'XII RPL A',
'golongan' => 'A',
],
[
'id' => 5,
'nisn' => '2233445566',
'nama_lengkap' => 'Rina Marlina',
'email' => 'rina.marlina@smkn1perpus.sch.id',
'nomor_hp' => '081223344556',
'password' => 'password',
'role' => 'guru',
],
];
}
/**
* Data untuk 4 kartu statistik
*/
public static function getDashboardStats(): array
{
return [
['label' => 'Buku yang dipinjam', 'value' => 3, 'icon' => 'bi-book-half', 'color' => 'primary'],
['label' => 'Tenggat Waktu', 'value' => '2', 'icon' => 'bi-clock-history', 'color' => 'warning'],
['label' => 'Buku dikembalikan', 'value' => 12, 'icon' => 'bi-check-circle', 'color' => 'success'],
['label' => 'History Baca', 'value' => 15, 'icon' => 'bi-hourglass-split', 'color' => 'info'],
];
}
/**
* Data untuk pengumuman
*/
public static function getPengumuman(): array
{
$pengumuman = [
['type' => 'warning', 'icon' => 'bi-exclamation-triangle-fill', 'title' => 'Perpustakaan Tutup', 'content' => 'Perpustakaan akan tutup pada tanggal 25 Desember untuk perayaan Natal.'],
['type' => 'info', 'icon' => 'bi-info-circle-fill', 'title' => 'Buku Baru Tersedia', 'content' => 'Edisi baru telah ditambahkan ke koleksi perpustakaan digital.'],
];
// Buat 30 data dummy tambahan
for ($i = 1; $i <= 30; $i++) {
$pengumuman[] = ['type' => 'secondary', 'icon' => 'bi-megaphone-fill', 'title' => "Pengumuman Biasa #{$i}", 'content' => "Ini adalah isi dari pengumuman rutin nomor {$i}."];
}
return $pengumuman;
}
/**
* Data untuk pemberitahuan
*/
public static function getPemberitahuan(): array
{
$pemberitahuan = [
['type' => 'danger', 'icon' => 'bi-exclamation-octagon', 'title' => 'Buku Akan Jatuh Tempo Besok', 'content' => 'Sejarah Indonesia Modern', 'badge' => 'Segera!'],
['type' => 'success', 'icon' => 'bi-check2-circle', 'title' => 'Peminjaman Berhasil', 'content' => 'Buku Kimia Dasar Berhasil Dipinjam', 'badge' => 'Baru'],
];
// Buat 20 data dummy tambahan
for ($i = 1; $i <= 20; $i++) {
$pemberitahuan[] = ['type' => 'info', 'icon' => 'bi-bell-fill', 'title' => "Notifikasi Sistem #{$i}", 'content' => "Pemberitahuan sistem terjadwal nomor {$i}.", 'badge' => 'Info'];
}
return $pemberitahuan;
}
/**
* Data untuk progress membaca (donut chart)
*/
public static function getProgressMembaca(): array
{
return ['selesai' => 70, 'sisa' => 30];
}
/**
* Data untuk statistik bulanan (bar chart)
*/
public static function getStatistikBulanan(): array
{
return [
'labels' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul'],
'data' => [10, 15, 8, 20, 18, 25, 22],
];
}
/**
* Master list untuk semua buku
* @return \Illuminate\Support\Collection
*/
private static function getAllBooks()
{
return collect([
[
'id' => 1,
'judul' => 'Modul Ajar IPAS',
'penulis' => 'Tim Kemdikbud Ristek',
'cover' => 'images/covers/ipas.jpg',
'kategori' => 'Sains',
'tahun' => 2022,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => ['online','offline'],
'file_pdf'=>'ipas.pdf',
'progress' => 75,
'sisa_hari' => 14,
'user_id' => 1,
],
[
'id' => 2,
'judul' => 'Modul Ajar Pendidikan Pancasila',
'penulis' => 'Tim Guru Pancasila',
'cover' => 'images/covers/pancasila.jpg',
'kategori' => 'Pendidikan',
'tahun' => 2023,
'status' => 'Tersedia',
'is_new' => false,
'tipe_akses' => 'offline',
'sisa_hari' => 3,
'progress' => 100,
'user_id' => [3, 1],
],
[
'id' => 3,
'judul' => 'Modul Belajar Sosiologi',
'penulis' => 'Tim Cendekia',
'cover' => 'images/covers/sosiologi.jpg',
'kategori' => 'Sosial',
'tahun' => 2021,
'status' => 'Dipinjam',
'is_new' => false,
'tipe_akses' => 'offline',
'sisa_hari' => 8,
'user_id' => 3,
],
[
'id' => 4,
'judul' => 'Modul Pembelajaran Seni Budaya',
'penulis' => 'Cahya Wulan, S.Pd.',
'cover' => 'images/covers/senbud.jpg',
'kategori' => 'Seni',
'tahun' => 2022,
'status' => 'Dipinjam',
'is_new' => false,
'tipe_akses' => 'offline',
'sisa_hari' => 14,
'user_id' => [1, 3],
],
[
'id' => 5,
'judul' => 'Si Anak Pintar',
'penulis' => 'Tere Liye',
'cover' => 'images/covers/sianakpintar.jpg',
'kategori' => 'Fiksi',
'tahun' => 2018,
'status' => 'Dipinjam',
'is_new' => true,
'tipe_akses' => 'offline',
'sisa_hari' => 5,
'user_id' => 1,
],
[
'id' => 6,
'judul' => 'Matematika Dasar',
'penulis' => 'Prof. Dr. Matematikus',
'cover' => 'images/covers/mtk.jpg',
'kategori' => 'Pendidikan',
'tahun' => 2023,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => ['online','offline'],
'file_pdf'=>'mtk.pdf',
'sisa_hari' => 7,
'progress' => 40,
'user_id' => [1, 4, 5],
],
[
'id' => 7,
'judul' => 'The Last Spell Breather',
'penulis' => 'Julie Pike',
'cover' => 'images/covers/thelastspellbreather.jpg',
'kategori' => 'Fantasi',
'tahun' => 2024,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => 'offline',
'sisa_hari' => 4,
'progress' => 0,
'user_id' => [3, 1]
],
[
'id' => 8,
'judul' => 'Ayah',
'penulis' => 'Andrea Hirata',
'cover' => 'images/covers/ayah.png',
'kategori' => 'Novel',
'tahun' => 2015,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => 'online',
'file_pdf' => 'ayah.pdf',
'progress' => 0,
'user_id' => [1, 2, 3],
],
[
'id' => 9,
'judul' => 'Senja, Hujan, & Cerita yang Telah Usai',
'penulis' => 'Boy Candra',
'cover' => 'images/covers/senja.png',
'kategori' => 'Novel',
'tahun' => 2015,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => ['online','offline'],
'file_pdf' => 'senja.pdf',
'progress' => 0,
'sisa_hari' => 14,
'user_id' => [1, 3],
],
[
'id' => 10,
'judul' => 'Hijrah itu Cinta',
'penulis' => 'Abay Adhitya',
'cover' => 'images/covers/hijrah.png',
'kategori' => 'Religi',
'tahun' => 2018,
'status' => 'Tersedia',
'is_new' => true,
'tipe_akses' => 'online',
'file_pdf' => 'hijrah.pdf',
'progress' => 0,
'user_id' => [2, 3],
]
]);
}
/**
* Data untuk buku pinjam offline
*/
public static function getBukuPinjamOffline($user): array
{
return self::getAllBooks()
->where('tipe_akses', 'offline')
->filter(function ($buku) use ($user) {
if (!isset($buku['user_id'])) return false;
if (is_array($buku['user_id'])) {
return in_array($user->id, $buku['user_id']);
}
return $buku['user_id'] == $user->id;
})
->map(fn($buku) => [
'judul' => $buku['judul'],
'penulis' => $buku['penulis'],
'sisa_hari' => $buku['sisa_hari'],
'cover' => $buku['cover'],
])
->values()
->all();
}
/**
* Data untuk baca buku online
*/
public static function getBacaBukuOnline($user): array
{
return self::getAllBooks()
->where('tipe_akses', 'online')
->filter(function ($buku) use ($user) {
if (!isset($buku['user_id'])) return false;
if (is_array($buku['user_id'])) {
return in_array($user->id, $buku['user_id']);
}
return $buku['user_id'] == $user->id;
})
->map(fn($buku) => [
'judul' => $buku['judul'],
'penulis' => $buku['penulis'],
'progress' => $buku['progress'],
'cover' => $buku['cover'],
])
->values()
->all();
}
/**
* Mengambil daftar buku untuk katalog dengan filter.
*/
// app/Services/DummyDataService.php
public static function getKatalogBuku(array $filters = []): \Illuminate\Support\Collection
{
$buku = self::getAllBooks();
$buku = $buku->when($filters['search'] ?? null, function ($query, $search) {
return $query->filter(fn($item) => str_contains(strtolower($item['judul']), strtolower($search)));
})->when($filters['kategori'] ?? null, function ($query, $kategori) {
return $query->where('kategori', $kategori);
})->when($filters['tahun'] ?? null, function ($query, $tahun) {
return $query->where('tahun', $tahun);
})->when($filters['penulis'] ?? null, function ($query, $penulis) {
return $query->where('penulis', $penulis);
})
->when($filters['tipe_akses'] ?? null, function ($query, $tipe) {
if ($tipe === 'offline') {
return $query->filter(function ($buku) {
return $buku['tipe_akses'] === 'offline' || (is_array($buku['tipe_akses']) && in_array('offline', $buku['tipe_akses']));
});
}
if ($tipe === 'online') {
return $query->filter(function ($buku) {
return $buku['tipe_akses'] === 'online' || (is_array($buku['tipe_akses']) && in_array('online', $buku['tipe_akses']));
});
}
return $query;
})
->sortByDesc('status');
return $buku;
}
/**
* Method baru untuk mengambil daftar unik untuk dropdown filter
*/
public static function getFilterOptions(): array
{
$buku = self::getAllBooks();
return [
'kategori' => $buku->pluck('kategori')->unique()->sort()->values(),
'tahun' => $buku->pluck('tahun')->unique()->sortDesc()->values(),
'penulis' => $buku->pluck('penulis')->unique()->sort()->values(),
];
}
}