Files
WebGis_Final_Project/05/api/chat.php
T
2026-06-10 18:32:52 +07:00

56 lines
2.5 KiB
PHP

<?php
require_once __DIR__ . '/../config.php';
$user = requireLogin();
$method = $_SERVER['REQUEST_METHOD'];
$db = getDB();
switch ($method) {
case 'GET':
$since = $_GET['since'] ?? '1970-01-01 00:00:00';
// ambil pesan broadcast + pesan ke/dari user ini
$st = $db->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);
}