Files
UAS_WEBGIS_MuhammadFarras_D…/WebGIS_PovertyMap/api_masjid.php
T
2026-06-09 19:02:22 +07:00

183 lines
6.9 KiB
PHP

<?php
// ============================================================
// API DATA RUMAH IBADAH (Point / Marker + Radius Buffer)
// File: api_masjid.php
// Fields: nama_masjid, jenis, pic_masjid, alamat, radius_m (100-5000), latitude, longitude
// ============================================================
require_once 'config.php';
$method = $_SERVER['REQUEST_METHOD'];
$id = isset($_GET['id']) ? (int)$_GET['id'] : null;
// ---- GET: Ambil semua data atau satu data ----
if ($method === 'GET') {
$db = getDB();
if ($id) {
$stmt = $db->prepare("SELECT id, nama_masjid, jenis, pic_masjid, alamat, radius_m, latitude, longitude FROM data_masjid WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
$result['radius_m'] = (int)$result['radius_m'];
$result['latitude'] = (float)$result['latitude'];
$result['longitude'] = (float)$result['longitude'];
echo json_encode($result);
} else {
http_response_code(404);
echo json_encode(['error' => 'Data masjid tidak ditemukan']);
}
} else {
$result = $db->query("SELECT id, nama_masjid, jenis, pic_masjid, alamat, radius_m, latitude, longitude FROM data_masjid ORDER BY id DESC");
$rows = [];
while ($row = $result->fetch_assoc()) {
$row['radius_m'] = (int)$row['radius_m'];
$row['latitude'] = (float)$row['latitude'];
$row['longitude'] = (float)$row['longitude'];
$rows[] = $row;
}
echo json_encode($rows);
}
$db->close();
exit();
}
// ---- POST: Tambah masjid baru ----
if ($method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
if (empty($input['nama_masjid']) || empty($input['pic_masjid']) || empty($input['alamat'])
|| !isset($input['latitude']) || !isset($input['longitude'])) {
http_response_code(400);
echo json_encode(['error' => 'Data tidak lengkap. Field wajib: nama_masjid, jenis, pic_masjid, alamat, latitude, longitude']);
exit();
}
$nama_masjid = trim($input['nama_masjid']);
$jenis = isset($input['jenis']) ? trim($input['jenis']) : 'Masjid';
$pic_masjid = trim($input['pic_masjid']);
$alamat = trim($input['alamat']);
$radius_m = isset($input['radius_m']) ? max(100, min(5000, (int)$input['radius_m'])) : 500;
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$valid_jenis = ['Masjid','Gereja','Pura','Vihara','Klenteng'];
if (!in_array($jenis, $valid_jenis)) $jenis = 'Masjid';
$db = getDB();
$stmt = $db->prepare("INSERT INTO data_masjid (nama_masjid, jenis, pic_masjid, alamat, radius_m, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('ssssidd', $nama_masjid, $jenis, $pic_masjid, $alamat, $radius_m, $latitude, $longitude);
if ($stmt->execute()) {
$new_id = $db->insert_id;
http_response_code(201);
echo json_encode([
'message' => 'Data ibadah berhasil disimpan',
'id' => $new_id,
'nama_masjid' => $nama_masjid,
'jenis' => $jenis,
'pic_masjid' => $pic_masjid,
'alamat' => $alamat,
'radius_m' => $radius_m,
'latitude' => $latitude,
'longitude' => $longitude
]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal menyimpan data: ' . $stmt->error]);
}
$db->close();
exit();
}
// ---- PUT: Update masjid ----
if ($method === 'PUT') {
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID diperlukan untuk update']);
exit();
}
$input = json_decode(file_get_contents('php://input'), true);
$db = getDB();
// Update posisi saja (drag marker)
if (isset($input['latitude']) && isset($input['longitude'])
&& !isset($input['nama_masjid']) && !isset($input['radius_m'])) {
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$stmt = $db->prepare("UPDATE data_masjid SET latitude = ?, longitude = ? WHERE id = ?");
$stmt->bind_param('ddi', $latitude, $longitude, $id);
// Update radius saja (dari slider tanpa simpan form)
} elseif (isset($input['radius_m']) && !isset($input['nama_masjid'])) {
$radius_m = max(100, min(5000, (int)$input['radius_m']));
$stmt = $db->prepare("UPDATE data_masjid SET radius_m = ? WHERE id = ?");
$stmt->bind_param('ii', $radius_m, $id);
} else {
// Full update
$nama_masjid = trim($input['nama_masjid'] ?? '');
$jenis = trim($input['jenis'] ?? 'Masjid');
$pic_masjid = trim($input['pic_masjid'] ?? '');
$alamat = trim($input['alamat'] ?? '');
$radius_m = isset($input['radius_m']) ? max(100, min(5000, (int)$input['radius_m'])) : 500;
$latitude = (float)($input['latitude'] ?? 0);
$longitude = (float)($input['longitude'] ?? 0);
$valid_jenis = ['Masjid','Gereja','Pura','Vihara','Klenteng'];
if (!in_array($jenis, $valid_jenis)) $jenis = 'Masjid';
if (empty($nama_masjid) || empty($pic_masjid) || empty($alamat)) {
http_response_code(400);
echo json_encode(['error' => 'nama_masjid, pic_masjid, dan alamat wajib diisi']);
exit();
}
$stmt = $db->prepare("UPDATE data_masjid SET nama_masjid = ?, jenis = ?, pic_masjid = ?, alamat = ?, radius_m = ?, latitude = ?, longitude = ? WHERE id = ?");
$stmt->bind_param('sssiddi', $nama_masjid, $jenis, $pic_masjid, $alamat, $radius_m, $latitude, $longitude, $id);
}
if ($stmt->execute()) {
echo json_encode(['message' => 'Data masjid berhasil diperbarui', 'id' => $id]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal memperbarui data: ' . $stmt->error]);
}
$db->close();
exit();
}
// ---- DELETE: Hapus masjid ----
if ($method === 'DELETE') {
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID diperlukan untuk hapus']);
exit();
}
$db = getDB();
$stmt = $db->prepare("DELETE FROM data_masjid WHERE id = ?");
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
if ($stmt->affected_rows > 0) {
echo json_encode(['message' => 'Data masjid berhasil dihapus', 'id' => $id]);
} else {
http_response_code(404);
echo json_encode(['error' => 'Data tidak ditemukan']);
}
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal menghapus data: ' . $stmt->error]);
}
$db->close();
exit();
}
// Method tidak dikenal
http_response_code(405);
echo json_encode(['error' => 'Method tidak diizinkan']);
?>