prepare("SELECT c.id, c.pesan, c.created_at, c.dibaca, u.nama_lengkap as dari_nama, u.id as dari_id, r.kode as dari_role, u.rumah_ibadah_id, ri.nama as dari_ri, c.ke_user_id FROM chat c JOIN user u ON u.id=c.dari_user_id JOIN role r ON r.id=u.role_id LEFT JOIN rumah_ibadah ri ON ri.id=u.rumah_ibadah_id WHERE (c.ke_user_id IS NULL OR c.ke_user_id=? OR c.dari_user_id=?) AND c.created_at > ? ORDER BY c.created_at ASC LIMIT 100"); $st->execute([$user['id'], $user['id'], $since]); $msgs = $st->fetchAll(); // tandai sudah dibaca $db->prepare("UPDATE chat SET dibaca=1 WHERE ke_user_id=? AND dibaca=0")->execute([$user['id']]); jsonOk($msgs); break; case 'POST': // hanya pengurus, relawan, superadmin requireRole(['superadmin','pengurus','relawan']); $b = json_decode(file_get_contents('php://input'), true); $pesan = sanitize($b['pesan'] ?? ''); if (!$pesan) jsonErr('Pesan tidak boleh kosong.'); $ke = !empty($b['ke_user_id']) ? (int)$b['ke_user_id'] : null; $db->prepare("INSERT INTO chat (dari_user_id, ke_user_id, pesan) VALUES (?,?,?)") ->execute([$user['id'], $ke, $pesan]); $newId = (int)$db->lastInsertId(); // ambil pesan lengkap untuk response $st = $db->prepare("SELECT c.id, c.pesan, c.created_at, u.nama_lengkap as dari_nama, r.kode as dari_role, ri.nama as dari_ri, c.ke_user_id FROM chat c JOIN user u ON u.id=c.dari_user_id JOIN role r ON r.id=u.role_id LEFT JOIN rumah_ibadah ri ON ri.id=u.rumah_ibadah_id WHERE c.id=?"); $st->execute([$newId]); jsonOk($st->fetch(), 'Pesan terkirim.'); break; default: jsonErr('Method tidak didukung.', 405); }