Files
UAS_WEBGIS_MichelleOlivia_D…/sig-kemiskinan/api/rumah_ibadah.php
T
2026-06-10 21:46:56 +07:00

132 lines
4.7 KiB
PHP

<?php
// api/rumah_ibadah.php
// CRUD API untuk Rumah Ibadah
require_once __DIR__ . '/../includes/config.php';
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
$method = $_SERVER['REQUEST_METHOD'];
$db = getDB();
switch ($method) {
// ── GET semua rumah ibadah + summary penduduk
case 'GET':
$id = $_GET['id'] ?? null;
if ($id) {
$stmt = $db->prepare("
SELECT ri.*,
COUNT(pm.id) as jumlah_kk,
COALESCE(SUM(pm.jumlah_anggota), 0) as total_jiwa
FROM rumah_ibadah ri
LEFT JOIN penduduk_miskin pm ON pm.rumah_ibadah_id = ri.id
WHERE ri.id = ?
GROUP BY ri.id
");
$stmt->execute([$id]);
$row = $stmt->fetch();
if ($row) jsonResponse(['success' => true, 'data' => $row]);
else jsonResponse(['success' => false, 'error' => 'Not found'], 404);
}
$rows = $db->query("
SELECT ri.*,
COUNT(pm.id) as jumlah_kk,
COALESCE(SUM(pm.jumlah_anggota), 0) as total_jiwa
FROM rumah_ibadah ri
LEFT JOIN penduduk_miskin pm ON pm.rumah_ibadah_id = ri.id
GROUP BY ri.id
ORDER BY ri.nama ASC
")->fetchAll();
jsonResponse(['success' => true, 'data' => $rows]);
break;
// ── POST buat rumah ibadah baru
case 'POST':
$input = getInput();
$required = ['nama', 'lat', 'lng'];
foreach ($required as $field) {
if (empty($input[$field])) {
jsonResponse(['success' => false, 'error' => "Field '$field' wajib diisi"], 400);
}
}
$stmt = $db->prepare("
INSERT INTO rumah_ibadah (nama, jenis, alamat, pic, no_wa, lat, lng, radius)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
");
$stmt->execute([
trim($input['nama']),
$input['jenis'] ?? 'masjid',
$input['alamat'] ?? '',
$input['pic'] ?? '',
$input['no_wa'] ?? '',
(float)$input['lat'],
(float)$input['lng'],
(int)($input['radius'] ?? 500),
]);
$newId = (int)$db->lastInsertId();
reassignAll();
$stmt2 = $db->prepare("SELECT * FROM rumah_ibadah WHERE id = ?");
$stmt2->execute([$newId]);
jsonResponse(['success' => true, 'data' => $stmt2->fetch(), 'message' => 'Rumah ibadah berhasil ditambahkan']);
break;
// ── PUT update rumah ibadah
case 'PUT':
$input = getInput();
$id = $input['id'] ?? $_GET['id'] ?? null;
if (!$id) jsonResponse(['success' => false, 'error' => 'ID diperlukan'], 400);
$fields = [];
$values = [];
$allowed = ['nama', 'jenis', 'alamat', 'pic', 'no_wa', 'lat', 'lng', 'radius'];
foreach ($allowed as $f) {
if (isset($input[$f])) {
$fields[] = "$f = ?";
$values[] = ($f === 'lat' || $f === 'lng') ? (float)$input[$f] :
($f === 'radius' ? (int)$input[$f] : trim($input[$f]));
}
}
if (empty($fields)) jsonResponse(['success' => false, 'error' => 'Tidak ada data yang diupdate'], 400);
$values[] = $id;
$db->prepare("UPDATE rumah_ibadah SET " . implode(', ', $fields) . " WHERE id = ?")->execute($values);
// Radius berubah → reassign semua
if (isset($input['radius']) || isset($input['lat']) || isset($input['lng'])) {
reassignAll();
}
$stmt = $db->prepare("SELECT * FROM rumah_ibadah WHERE id = ?");
$stmt->execute([$id]);
jsonResponse(['success' => true, 'data' => $stmt->fetch(), 'message' => 'Berhasil diupdate']);
break;
// ── DELETE hapus rumah ibadah
case 'DELETE':
$id = $_GET['id'] ?? getInput()['id'] ?? null;
if (!$id) jsonResponse(['success' => false, 'error' => 'ID diperlukan'], 400);
// Lepas referensi penduduk
$db->prepare("UPDATE penduduk_miskin SET rumah_ibadah_id = NULL, jarak_ke_ibadah = NULL WHERE rumah_ibadah_id = ?")
->execute([$id]);
$db->prepare("DELETE FROM rumah_ibadah WHERE id = ?")->execute([$id]);
reassignAll();
jsonResponse(['success' => true, 'message' => 'Berhasil dihapus']);
break;
default:
jsonResponse(['success' => false, 'error' => 'Method tidak diizinkan'], 405);
}