56 lines
2.5 KiB
PHP
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);
|
|
}
|