Files
2026-06-09 19:02:22 +07:00

198 lines
6.3 KiB
PHP

<?php
// ============================================================
// API DATA SPBU (Point / Marker)
// File: api_spbu.php
// Fields: nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude
// ============================================================
require_once 'config.php';
try {
$method = $_SERVER['REQUEST_METHOD'];
$rawInput = file_get_contents('php://input');
$jsonInput = $rawInput ? json_decode($rawInput, true) : null;
if (!is_array($jsonInput)) {
$jsonInput = [];
}
// Fallback jika server memblokir method DELETE/PUT
if ($method === 'POST' && isset($_GET['_method'])) {
$method = strtoupper($_GET['_method']);
} elseif ($method === 'POST' && !empty($jsonInput['_method'])) {
$method = strtoupper($jsonInput['_method']);
}
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if (!$id && !empty($jsonInput['id'])) {
$id = (int)$jsonInput['id'];
}
if ($method === 'GET') {
$db = getDB();
ensureSpbuSchema($db);
if ($id) {
$stmt = $db->prepare(
"SELECT id, nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude
FROM data_spbu WHERE id = ?"
);
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
$result['latitude'] = (float)$result['latitude'];
$result['longitude'] = (float)$result['longitude'];
echo json_encode($result);
} else {
http_response_code(404);
echo json_encode(['error' => 'Data SPBU tidak ditemukan']);
}
} else {
$result = $db->query(
"SELECT id, nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude
FROM data_spbu ORDER BY id ASC"
);
if (!$result) {
jsonError('Query gagal: ' . $db->error);
}
$rows = [];
while ($row = $result->fetch_assoc()) {
$row['latitude'] = (float)$row['latitude'];
$row['longitude'] = (float)$row['longitude'];
$rows[] = $row;
}
echo json_encode($rows, JSON_UNESCAPED_UNICODE);
}
$db->close();
exit();
}
if ($method === 'POST') {
$input = $jsonInput;
if (empty($input['nama_spbu']) || empty($input['alamat']) || empty($input['no_wa'])
|| !isset($input['latitude']) || !isset($input['longitude'])) {
http_response_code(400);
echo json_encode(['error' => 'Data tidak lengkap. Field wajib: nama_spbu, alamat, no_wa, latitude, longitude']);
exit();
}
$nama_spbu = trim($input['nama_spbu']);
$alamat = trim($input['alamat']);
$no_wa = trim($input['no_wa']);
$buka_24_jam = isset($input['buka_24_jam']) && $input['buka_24_jam'] === 'Ya' ? 'Ya' : 'Tidak';
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$db = getDB();
ensureSpbuSchema($db);
$stmt = $db->prepare(
"INSERT INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude)
VALUES (?, ?, ?, ?, ?, ?)"
);
$stmt->bind_param('ssssdd', $nama_spbu, $alamat, $no_wa, $buka_24_jam, $latitude, $longitude);
if ($stmt->execute()) {
http_response_code(201);
echo json_encode([
'message' => 'Data SPBU berhasil disimpan',
'id' => $db->insert_id,
'nama_spbu' => $nama_spbu,
'alamat' => $alamat,
'no_wa' => $no_wa,
'buka_24_jam' => $buka_24_jam,
'latitude' => $latitude,
'longitude' => $longitude
]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal menyimpan data: ' . $stmt->error]);
}
$db->close();
exit();
}
if ($method === 'PUT') {
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID diperlukan untuk update']);
exit();
}
$input = $jsonInput;
$db = getDB();
ensureSpbuSchema($db);
if (isset($input['latitude']) && isset($input['longitude'])
&& !isset($input['nama_spbu'])) {
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$stmt = $db->prepare("UPDATE data_spbu SET latitude = ?, longitude = ? WHERE id = ?");
$stmt->bind_param('ddi', $latitude, $longitude, $id);
} else {
$nama_spbu = trim($input['nama_spbu'] ?? '');
$alamat = trim($input['alamat'] ?? '');
$no_wa = trim($input['no_wa'] ?? '');
$buka_24_jam = isset($input['buka_24_jam']) && $input['buka_24_jam'] === 'Ya' ? 'Ya' : 'Tidak';
$latitude = (float)($input['latitude'] ?? 0);
$longitude = (float)($input['longitude'] ?? 0);
if (empty($nama_spbu) || empty($alamat) || empty($no_wa)) {
http_response_code(400);
echo json_encode(['error' => 'nama_spbu, alamat, dan no_wa wajib diisi']);
exit();
}
$stmt = $db->prepare(
"UPDATE data_spbu
SET nama_spbu = ?, alamat = ?, no_wa = ?, buka_24_jam = ?, latitude = ?, longitude = ?
WHERE id = ?"
);
$stmt->bind_param('ssssddi', $nama_spbu, $alamat, $no_wa, $buka_24_jam, $latitude, $longitude, $id);
}
if ($stmt->execute()) {
echo json_encode(['message' => 'Data SPBU berhasil diperbarui', 'id' => $id]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal memperbarui data: ' . $stmt->error]);
}
$db->close();
exit();
}
if ($method === 'DELETE') {
if (!$id) {
jsonError('ID diperlukan untuk hapus', 400);
}
$db = getDB();
ensureSpbuSchema($db);
$stmt = $db->prepare("DELETE FROM data_spbu WHERE id = ?");
if (!$stmt) {
jsonError('Gagal menyiapkan query hapus: ' . $db->error);
}
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
if ($stmt->affected_rows > 0) {
echo json_encode(['message' => 'Data SPBU berhasil dihapus', 'id' => $id], JSON_UNESCAPED_UNICODE);
} else {
jsonError('Data SPBU tidak ditemukan', 404);
}
} else {
jsonError('Gagal menghapus data: ' . $stmt->error);
}
$stmt->close();
$db->close();
exit();
}
jsonError('Method tidak diizinkan', 405);
} catch (Throwable $e) {
jsonError('Server error: ' . $e->getMessage());
}