UAS SIG Proyek WebGis
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in New Issue
Block a user