setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "
🔍 TEST API BERITA - DEBUGGING
";
echo "
";
// 1. CEK DATA BERITA
echo "📰 1. DATA BERITA DI DATABASE
";
$stmt = $pdo->query("
SELECT id, id_berita, judul, target_berita, target_kelas, status, created_at
FROM berita
ORDER BY created_at DESC
");
$beritaList = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($beritaList)) {
echo "❌ TIDAK ADA BERITA DI DATABASE!
";
} else {
echo "✅ Total berita: " . count($beritaList) . "
";
echo "";
echo "
| ID |
Judul |
Target |
Target Kelas |
Status |
Tanggal |
";
foreach ($beritaList as $berita) {
$targetKelas = $berita['target_kelas'] ?: '-';
$status = $berita['status'];
$color = $status === 'published' ? 'green' : 'orange';
echo "";
echo "| {$berita['id_berita']} | ";
echo "{$berita['judul']} | ";
echo "{$berita['target_berita']} | ";
echo "{$targetKelas} | ";
echo "{$status} | ";
echo "{$berita['created_at']} | ";
echo "
";
}
echo "
";
}
echo "
";
// 2. CEK DATA SANTRI
echo "👨🎓 2. DATA SANTRI (SAMPLE)
";
$stmt = $pdo->query("
SELECT id_santri, nama_lengkap, kelas, status
FROM santris
WHERE status = 'Aktif'
LIMIT 5
");
$santriList = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($santriList)) {
echo "❌ TIDAK ADA SANTRI AKTIF!
";
} else {
echo "✅ Sample santri aktif:
";
echo "";
echo "
| ID Santri |
Nama |
Kelas |
Status |
";
foreach ($santriList as $santri) {
echo "";
echo "| {$santri['id_santri']} | ";
echo "{$santri['nama_lengkap']} | ";
echo "{$santri['kelas']} | ";
echo "{$santri['status']} | ";
echo "
";
}
echo "
";
}
echo "
";
// 3. CEK PIVOT TABLE berita_santri
echo "🔗 3. PIVOT TABLE (berita_santri)
";
$stmt = $pdo->query("
SELECT bs.*, b.judul, s.nama_lengkap
FROM berita_santri bs
LEFT JOIN berita b ON bs.id_berita = b.id_berita
LEFT JOIN santris s ON bs.id_santri = s.id_santri
LIMIT 10
");
$pivotList = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($pivotList)) {
echo "⚠️ PIVOT TABLE KOSONG (Normal untuk berita 'semua' dan 'kelas_tertentu')
";
} else {
echo "✅ Total relasi: " . count($pivotList) . "
";
echo "";
echo "
| ID Berita |
Judul Berita |
ID Santri |
Nama Santri |
Sudah Dibaca |
";
foreach ($pivotList as $pivot) {
$dibaca = $pivot['sudah_dibaca'] ? '✅ Ya' : '❌ Belum';
echo "";
echo "| {$pivot['id_berita']} | ";
echo "{$pivot['judul']} | ";
echo "{$pivot['id_santri']} | ";
echo "{$pivot['nama_lengkap']} | ";
echo "{$dibaca} | ";
echo "
";
}
echo "
";
}
echo "
";
// 4. CEK DATA USER (WALI)
echo "👤 4. DATA USER/WALI (SAMPLE)
";
$stmt = $pdo->query("
SELECT id, username, role, role_id
FROM users
WHERE role = 'wali'
LIMIT 5
");
$userList = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($userList)) {
echo "❌ TIDAK ADA USER WALI!
";
} else {
echo "✅ Sample user wali:
";
echo "";
echo "
| ID |
Username |
Role |
Role ID (id_santri) |
";
foreach ($userList as $user) {
echo "";
echo "| {$user['id']} | ";
echo "{$user['username']} | ";
echo "{$user['role']} | ";
echo "{$user['role_id']} | ";
echo "
";
}
echo "
";
}
echo "
";
// 5. SIMULASI FILTER BERITA UNTUK SANTRI TERTENTU
if (!empty($santriList)) {
$sampleSantri = $santriList[0];
$idSantri = $sampleSantri['id_santri'];
$kelasSantri = $sampleSantri['kelas'];
echo "🎯 5. SIMULASI FILTER BERITA
";
echo "Untuk Santri: {$sampleSantri['nama_lengkap']} (ID: {$idSantri}, Kelas: {$kelasSantri})
";
// Query sesuai dengan logic di ApiBeritaController
$sql = "
SELECT
b.id,
b.id_berita,
b.judul,
b.target_berita,
b.target_kelas,
b.status
FROM berita b
WHERE b.status = 'published'
AND (
-- 1. Berita untuk SEMUA
b.target_berita = 'semua'
-- 2. Berita untuk KELAS TERTENTU
OR (
b.target_berita = 'kelas_tertentu'
AND JSON_CONTAINS(b.target_kelas, '\"$kelasSantri\"')
)
-- 3. Berita untuk SANTRI TERTENTU
OR (
b.target_berita = 'santri_tertentu'
AND EXISTS (
SELECT 1 FROM berita_santri bs
WHERE bs.id_berita = b.id_berita
AND bs.id_santri = '$idSantri'
)
)
)
ORDER BY b.created_at DESC
";
$stmt = $pdo->query($sql);
$filteredBerita = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($filteredBerita)) {
echo "❌ TIDAK ADA BERITA UNTUK SANTRI INI!
";
echo "💡 Solusi:
";
echo "";
echo "- Buat berita dengan target 'Semua Santri', atau
";
echo "- Buat berita dengan target 'Kelas: {$kelasSantri}', atau
";
echo "- Buat berita dengan target 'Santri Tertentu' dan pilih santri ini
";
echo "
";
} else {
echo "✅ Santri ini berhak melihat " . count($filteredBerita) . " berita
";
echo "";
echo "
| ID |
Judul |
Target |
Target Kelas |
";
foreach ($filteredBerita as $berita) {
$targetKelas = $berita['target_kelas'] ?: '-';
echo "";
echo "| {$berita['id_berita']} | ";
echo "{$berita['judul']} | ";
echo "{$berita['target_berita']} | ";
echo "{$targetKelas} | ";
echo "
";
}
echo "
";
}
}
echo "
";
echo "✅ DEBUGGING SELESAI
";
echo "Langkah selanjutnya:
";
echo "";
echo "- Pastikan ada berita dengan status 'published'
";
echo "- Pastikan target_berita sesuai (semua/kelas_tertentu/santri_tertentu)
";
echo "- Jika target 'kelas_tertentu', pastikan target_kelas berisi kelas yang benar dalam format JSON
";
echo "- Jika target 'santri_tertentu', pastikan ada data di pivot table berita_santri
";
echo "- Test login di mobile dengan user wali yang memiliki role_id sesuai dengan id_santri
";
echo "
";
} catch (PDOException $e) {
echo "❌ ERROR DATABASE
";
echo "{$e->getMessage()}
";
}
?>