132 lines
4.7 KiB
PHP
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);
|
|
}
|