setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "

๐Ÿงช TEST QUERY BERITA

"; echo "
"; // Ambil sample santri $stmt = $pdo->query("SELECT id_santri, nama_lengkap, kelas FROM santris WHERE status = 'Aktif' LIMIT 1"); $santri = $stmt->fetch(PDO::FETCH_ASSOC); if (!$santri) { die("

โŒ Tidak ada santri aktif di database!

"); } $idSantri = $santri['id_santri']; $kelasSantri = $santri['kelas']; echo "

๐Ÿ‘จโ€๐ŸŽ“ Testing dengan Santri:

"; echo "

ID: {$idSantri}

"; echo "

Nama: {$santri['nama_lengkap']}

"; echo "

Kelas: {$kelasSantri}

"; echo "
"; // Test Query 1: Berita untuk SEMUA echo "

1๏ธโƒฃ Berita untuk SEMUA SANTRI

"; $sql = "SELECT id_berita, judul FROM berita WHERE status = 'published' AND target_berita = 'semua'"; $stmt = $pdo->query($sql); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "

Jumlah: " . count($result) . "

"; foreach ($result as $row) { echo "- {$row['id_berita']}: {$row['judul']}
"; } echo "
"; // Test Query 2: Berita untuk KELAS TERTENTU echo "

2๏ธโƒฃ Berita untuk KELAS TERTENTU (Kelas: {$kelasSantri})

"; $sql = "SELECT id_berita, judul, target_kelas FROM berita WHERE status = 'published' AND target_berita = 'kelas_tertentu' AND JSON_CONTAINS(target_kelas, '\"{$kelasSantri}\"')"; $stmt = $pdo->query($sql); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "

Jumlah: " . count($result) . "

"; foreach ($result as $row) { echo "- {$row['id_berita']}: {$row['judul']} (Target Kelas: {$row['target_kelas']})
"; } echo "
"; // Test Query 3: Berita untuk SANTRI TERTENTU (FIX VERSION) echo "

3๏ธโƒฃ Berita untuk SANTRI TERTENTU (ID: {$idSantri})

"; // Versi yang BENAR - menggunakan prepared statement untuk menghindari SQL injection $sql = "SELECT b.id_berita, b.judul FROM berita b WHERE b.status = 'published' AND b.target_berita = 'santri_tertentu' AND EXISTS ( SELECT 1 FROM berita_santri bs WHERE bs.id_berita = b.id_berita AND bs.id_santri = :id_santri )"; $stmt = $pdo->prepare($sql); $stmt->execute(['id_santri' => $idSantri]); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "

Jumlah: " . count($result) . "

"; foreach ($result as $row) { echo "- {$row['id_berita']}: {$row['judul']}
"; } // Cek pivot table echo "

๐Ÿ“‹ Data di Pivot Table untuk Santri ini:

"; $sql = "SELECT bs.id_berita, b.judul, bs.sudah_dibaca FROM berita_santri bs LEFT JOIN berita b ON bs.id_berita = b.id_berita WHERE bs.id_santri = :id_santri"; $stmt = $pdo->prepare($sql); $stmt->execute(['id_santri' => $idSantri]); $pivot = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($pivot)) { echo "

โš ๏ธ Tidak ada data di pivot table untuk santri ini

"; } else { foreach ($pivot as $row) { $status = $row['sudah_dibaca'] ? 'โœ… Sudah dibaca' : 'โŒ Belum dibaca'; echo "- {$row['id_berita']}: {$row['judul']} ({$status})
"; } } echo "
"; // Test Query GABUNGAN (seperti di API) echo "

๐ŸŽฏ QUERY GABUNGAN (Seperti di API)

"; $sql = "SELECT b.id_berita, b.judul, b.target_berita FROM berita b WHERE b.status = 'published' AND ( -- SEMUA b.target_berita = 'semua' -- KELAS TERTENTU OR ( b.target_berita = 'kelas_tertentu' AND JSON_CONTAINS(b.target_kelas, '\"{$kelasSantri}\"') ) -- 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 = :id_santri ) ) ) ORDER BY b.created_at DESC"; $stmt = $pdo->prepare($sql); $stmt->execute(['id_santri' => $idSantri]); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "

TOTAL BERITA YANG BISA DILIHAT SANTRI INI: " . count($result) . "

"; if (empty($result)) { echo "

โŒ TIDAK ADA BERITA!

"; echo "

๐Ÿ’ก Solusi:

"; echo ""; } else { echo ""; echo ""; foreach ($result as $row) { echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
IDJudulTarget
{$row['id_berita']}{$row['judul']}{$row['target_berita']}
"; } echo "
"; echo "

โœ… TEST SELESAI

"; echo "

Jika query gabungan menampilkan berita, berarti API seharusnya juga akan menampilkan berita yang sama.

"; } catch (PDOException $e) { echo "

โŒ ERROR

"; echo "

{$e->getMessage()}

"; } ?>