198 lines
6.3 KiB
PHP
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());
|
|
}
|