183 lines
6.9 KiB
PHP
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']);
|
|
?>
|