Deploy WebGIS 01-05 dengan Docker
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.3
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: localhost:3306
|
||||
-- Generation Time: Jun 11, 2026 at 11:13 AM
|
||||
-- Server version: 8.4.3
|
||||
-- PHP Version: 8.3.30
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `02_spbudb`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `polygon`
|
||||
--
|
||||
|
||||
CREATE TABLE `polygon` (
|
||||
`id` int NOT NULL,
|
||||
`nama_polygon` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`keterangan` text COLLATE utf8mb4_unicode_ci,
|
||||
`warna` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '#22c55e',
|
||||
`koordinat` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `polygon`
|
||||
--
|
||||
|
||||
INSERT INTO `polygon` (`id`, `nama_polygon`, `keterangan`, `warna`, `koordinat`, `created_at`, `updated_at`) VALUES
|
||||
(1, 'Rumah A', 'Rumah A di tepi jalan imbon', '#c42170', '[[-0.04619857363388995,109.35349255800249],[-0.04609122197957324,109.35370445251466],[-0.046228095338798736,109.35379564762117],[-0.04634349836696752,109.35357302427295]]', '2026-06-08 09:59:46', '2026-06-08 09:59:46');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `polyline`
|
||||
--
|
||||
|
||||
CREATE TABLE `polyline` (
|
||||
`id` int NOT NULL,
|
||||
`nama_line` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`keterangan` text COLLATE utf8mb4_unicode_ci,
|
||||
`warna` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '#3b82f6',
|
||||
`koordinat` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `polyline`
|
||||
--
|
||||
|
||||
INSERT INTO `polyline` (`id`, `nama_line`, `keterangan`, `warna`, `koordinat`, `created_at`, `updated_at`) VALUES
|
||||
(1, 'Jl Tanjung Sari', 'Jalan tembusan \'TanSar\", dari mulut di ImBon dan dari mulut Jl. Jend. Ayani', '#3b82f6', '[[-0.052839376622127024,109.34751927852632],[-0.05137402667155636,109.34858143329622],[-0.050509845915652725,109.34916079044343],[-0.04923236129902831,109.35004591941835],[-0.04847016458323742,109.35060918331146],[-0.04772943818927965,109.35115635395051],[-0.04757377829389879,109.35129046440126],[-0.047589881041730155,109.35139775276186],[-0.04771333544149917,109.35161232948305],[-0.04650562934709907,109.3523955345154],[-0.045646816111789314,109.35296952724458],[-0.0457756380977098,109.35312509536745]]', '2026-06-08 10:03:20', '2026-06-08 10:03:20');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `spbu`
|
||||
--
|
||||
|
||||
CREATE TABLE `spbu` (
|
||||
`id` int NOT NULL,
|
||||
`nama_spbu` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`status_ramai` enum('ramai','tidak_ramai') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'tidak_ramai',
|
||||
`buka_24_jam` enum('ya','tidak') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'tidak',
|
||||
`status_operasional` enum('buka','tutup') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'buka',
|
||||
`nomor_hp` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||
`latitude` double NOT NULL,
|
||||
`longitude` double NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `spbu`
|
||||
--
|
||||
|
||||
INSERT INTO `spbu` (`id`, `nama_spbu`, `status_ramai`, `buka_24_jam`, `status_operasional`, `nomor_hp`, `latitude`, `longitude`, `created_at`, `updated_at`) VALUES
|
||||
(4, 'SPBU Imbon', 'ramai', 'ya', 'buka', '0812345678913', -0.046981865484009226, 109.35455471277238, '2026-06-08 09:58:55', '2026-06-08 09:58:55');
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `polygon`
|
||||
--
|
||||
ALTER TABLE `polygon`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- Indexes for table `polyline`
|
||||
--
|
||||
ALTER TABLE `polyline`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- Indexes for table `spbu`
|
||||
--
|
||||
ALTER TABLE `spbu`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `polygon`
|
||||
--
|
||||
ALTER TABLE `polygon`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `polyline`
|
||||
--
|
||||
ALTER TABLE `polyline`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT for table `spbu`
|
||||
--
|
||||
ALTER TABLE `spbu`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* ambil_data.php
|
||||
* Mengambil semua data SPBU, polyline, dan polygon dari database.
|
||||
* Response dalam format JSON.
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
require_once 'koneksi.php';
|
||||
|
||||
$result = [
|
||||
'status' => 'success',
|
||||
'spbu' => [],
|
||||
'polyline' => [],
|
||||
'polygon' => [],
|
||||
];
|
||||
|
||||
// ─── Ambil data SPBU ─────────────────────────────────────────────────────────
|
||||
$query_spbu = "SELECT id, nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude FROM spbu ORDER BY id ASC";
|
||||
$res = $koneksi->query($query_spbu);
|
||||
if ($res) {
|
||||
while ($row = $res->fetch_assoc()) {
|
||||
// Cast tipe data numerik
|
||||
$row['id'] = (int)$row['id'];
|
||||
$row['latitude'] = (float)$row['latitude'];
|
||||
$row['longitude'] = (float)$row['longitude'];
|
||||
$result['spbu'][] = $row;
|
||||
}
|
||||
$res->free();
|
||||
} else {
|
||||
$result['status'] = 'partial_error';
|
||||
$result['error_spbu'] = $koneksi->error;
|
||||
}
|
||||
|
||||
// ─── Ambil data Polyline ──────────────────────────────────────────────────────
|
||||
$query_poly = "SELECT id, nama_line, keterangan, warna, koordinat FROM polyline ORDER BY id ASC";
|
||||
$res = $koneksi->query($query_poly);
|
||||
if ($res) {
|
||||
while ($row = $res->fetch_assoc()) {
|
||||
$row['id'] = (int)$row['id'];
|
||||
// Decode koordinat JSON → array, kembalikan sebagai array PHP (akan di-encode ulang ke JSON)
|
||||
$row['koordinat'] = json_decode($row['koordinat'], true);
|
||||
$result['polyline'][] = $row;
|
||||
}
|
||||
$res->free();
|
||||
} else {
|
||||
$result['status'] = 'partial_error';
|
||||
$result['error_polyline'] = $koneksi->error;
|
||||
}
|
||||
|
||||
// ─── Ambil data Polygon ───────────────────────────────────────────────────────
|
||||
$query_pgon = "SELECT id, nama_polygon, keterangan, warna, koordinat FROM polygon ORDER BY id ASC";
|
||||
$res = $koneksi->query($query_pgon);
|
||||
if ($res) {
|
||||
while ($row = $res->fetch_assoc()) {
|
||||
$row['id'] = (int)$row['id'];
|
||||
$row['koordinat'] = json_decode($row['koordinat'], true);
|
||||
$result['polygon'][] = $row;
|
||||
}
|
||||
$res->free();
|
||||
} else {
|
||||
$result['status'] = 'partial_error';
|
||||
$result['error_polygon'] = $koneksi->error;
|
||||
}
|
||||
|
||||
$koneksi->close();
|
||||
|
||||
echo json_encode($result);
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/**
|
||||
* edit.php
|
||||
* Menangani edit data SPBU.
|
||||
* Latitude dan longitude TIDAK bisa diubah melalui endpoint ini.
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'koneksi.php';
|
||||
|
||||
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
|
||||
|
||||
// Saat ini hanya menangani edit SPBU
|
||||
if ($tipe === 'spbu') {
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
$nama_spbu = isset($_POST['nama_spbu']) ? trim($_POST['nama_spbu']) : '';
|
||||
$status_ramai = isset($_POST['status_ramai']) ? trim($_POST['status_ramai']) : '';
|
||||
$buka_24_jam = isset($_POST['buka_24_jam']) ? trim($_POST['buka_24_jam']) : '';
|
||||
$status_operasional = isset($_POST['status_operasional']) ? trim($_POST['status_operasional']) : '';
|
||||
$nomor_hp = isset($_POST['nomor_hp']) ? trim($_POST['nomor_hp']) : '';
|
||||
|
||||
// Validasi
|
||||
if ($id <= 0 || empty($nama_spbu) || empty($status_ramai) || empty($buka_24_jam) || empty($status_operasional)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap atau ID tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$valid_ramai = ['ramai', 'tidak_ramai'];
|
||||
$valid_24 = ['ya', 'tidak'];
|
||||
$valid_ops = ['buka', 'tutup'];
|
||||
|
||||
if (!in_array($status_ramai, $valid_ramai) || !in_array($buka_24_jam, $valid_24) || !in_array($status_operasional, $valid_ops)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Nilai enum tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Update — latitude & longitude sengaja tidak diubah
|
||||
$stmt = $koneksi->prepare(
|
||||
"UPDATE spbu SET nama_spbu=?, status_ramai=?, buka_24_jam=?, status_operasional=?, nomor_hp=?
|
||||
WHERE id=?"
|
||||
);
|
||||
$stmt->bind_param('sssssi', $nama_spbu, $status_ramai, $buka_24_jam, $status_operasional, $nomor_hp, $id);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
if ($stmt->affected_rows >= 0) {
|
||||
// Ambil data lengkap (termasuk lat/lng) untuk dikembalikan ke JS
|
||||
$sel = $koneksi->prepare("SELECT id, nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude FROM spbu WHERE id=?");
|
||||
$sel->bind_param('i', $id);
|
||||
$sel->execute();
|
||||
$res = $sel->get_result();
|
||||
$data = $res->fetch_assoc();
|
||||
$sel->close();
|
||||
|
||||
$data['id'] = (int)$data['id'];
|
||||
$data['latitude'] = (float)$data['latitude'];
|
||||
$data['longitude'] = (float)$data['longitude'];
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => 'Data SPBU berhasil diupdate.',
|
||||
'data' => $data
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan.']);
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal update: ' . $stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali untuk edit.']);
|
||||
}
|
||||
|
||||
$koneksi->close();
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* hapus.php
|
||||
* Menangani hapus data SPBU, polyline, dan polygon.
|
||||
* Gunakan parameter 'tipe' untuk membedakan jenis data.
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'koneksi.php';
|
||||
|
||||
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
|
||||
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
|
||||
|
||||
if ($id <= 0) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Mapping tipe ke nama tabel
|
||||
$tabel_map = [
|
||||
'spbu' => 'spbu',
|
||||
'polyline' => 'polyline',
|
||||
'polygon' => 'polygon',
|
||||
];
|
||||
|
||||
if (!array_key_exists($tipe, $tabel_map)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$tabel = $tabel_map[$tipe];
|
||||
|
||||
// Prepared statement hapus berdasarkan tipe dan id
|
||||
$stmt = $koneksi->prepare("DELETE FROM `{$tabel}` WHERE id = ?");
|
||||
$stmt->bind_param('i', $id);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
if ($stmt->affected_rows > 0) {
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => ucfirst($tipe) . ' berhasil dihapus.',
|
||||
'id' => $id,
|
||||
'tipe' => $tipe
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan.']);
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal menghapus: ' . $stmt->error]);
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
$koneksi->close();
|
||||
+1136
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Koneksi database Project 02.
|
||||
*/
|
||||
$host = getenv('DB_HOST') ?: 'db';
|
||||
$user = getenv('DB_USER') ?: 'root';
|
||||
$password = getenv('DB_PASSWORD') ?: 'webgisidolapass';
|
||||
$database = '02_spbudb';
|
||||
|
||||
$koneksi = new mysqli($host, $user, $password, $database);
|
||||
|
||||
if ($koneksi->connect_error) {
|
||||
http_response_code(500);
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => 'Koneksi database gagal: ' . $koneksi->connect_error
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$koneksi->set_charset('utf8mb4');
|
||||
?>
|
||||
@@ -0,0 +1,70 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════
|
||||
-- setup_database.sql
|
||||
-- Jalankan query ini di phpMyAdmin (Laragon) atau MySQL CLI
|
||||
-- untuk membuat database dan tabel yang diperlukan.
|
||||
-- ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
-- 1. Buat dan gunakan database
|
||||
CREATE DATABASE IF NOT EXISTS `02_spbudb`
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE `02_spbudb`;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
-- 2. Tabel SPBU (marker titik lokasi)
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
CREATE TABLE IF NOT EXISTS `spbu` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`nama_spbu` VARCHAR(100) NOT NULL,
|
||||
`status_ramai` ENUM('ramai','tidak_ramai') NOT NULL DEFAULT 'tidak_ramai',
|
||||
`buka_24_jam` ENUM('ya','tidak') NOT NULL DEFAULT 'tidak',
|
||||
`status_operasional` ENUM('buka','tutup') NOT NULL DEFAULT 'buka',
|
||||
`nomor_hp` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`latitude` DOUBLE NOT NULL,
|
||||
`longitude` DOUBLE NOT NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
-- 3. Tabel Polyline (garis)
|
||||
-- Kolom koordinat menyimpan JSON array of [lat, lng]
|
||||
-- Contoh: [[-0.055, 109.348], [-0.056, 109.349]]
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
CREATE TABLE IF NOT EXISTS `polyline` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`nama_line` VARCHAR(100) NOT NULL,
|
||||
`keterangan` TEXT,
|
||||
`warna` VARCHAR(20) NOT NULL DEFAULT '#3b82f6',
|
||||
`koordinat` LONGTEXT NOT NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
-- 4. Tabel Polygon (area)
|
||||
-- Kolom koordinat menyimpan JSON array of [lat, lng]
|
||||
-- Contoh: [[-0.055, 109.348], [-0.056, 109.349], [-0.055, 109.350]]
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
CREATE TABLE IF NOT EXISTS `polygon` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`nama_polygon` VARCHAR(100) NOT NULL,
|
||||
`keterangan` TEXT,
|
||||
`warna` VARCHAR(20) NOT NULL DEFAULT '#22c55e',
|
||||
`koordinat` LONGTEXT NOT NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
-- 5. (Opsional) Data contoh untuk testing awal
|
||||
-- ─────────────────────────────────────────────────────────────────────
|
||||
INSERT INTO `spbu` (nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude)
|
||||
VALUES
|
||||
('SPBU Contoh A', 'ramai', 'ya', 'buka', '08123456789', -0.05566, 109.34854),
|
||||
('SPBU Contoh B', 'tidak_ramai', 'tidak', 'buka', '08129876543', -0.05700, 109.34900),
|
||||
('SPBU Contoh C', 'ramai', 'tidak', 'tutup', '', -0.05400, 109.34800);
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
/**
|
||||
* tambah.php
|
||||
* Menangani tambah data SPBU, polyline, dan polygon.
|
||||
* Menerima POST dengan parameter 'tipe' untuk membedakan jenis data.
|
||||
*/
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
// Hanya terima method POST
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once 'koneksi.php';
|
||||
|
||||
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
|
||||
|
||||
// ─── TAMBAH SPBU ────────────────────────────────────────────────────────────
|
||||
if ($tipe === 'spbu') {
|
||||
$nama_spbu = isset($_POST['nama_spbu']) ? trim($_POST['nama_spbu']) : '';
|
||||
$status_ramai = isset($_POST['status_ramai']) ? trim($_POST['status_ramai']) : '';
|
||||
$buka_24_jam = isset($_POST['buka_24_jam']) ? trim($_POST['buka_24_jam']) : '';
|
||||
$status_operasional = isset($_POST['status_operasional']) ? trim($_POST['status_operasional']) : '';
|
||||
$nomor_hp = isset($_POST['nomor_hp']) ? trim($_POST['nomor_hp']) : '';
|
||||
$latitude = isset($_POST['latitude']) ? floatval($_POST['latitude']) : null;
|
||||
$longitude = isset($_POST['longitude']) ? floatval($_POST['longitude']) : null;
|
||||
|
||||
// Validasi server-side
|
||||
if (empty($nama_spbu) || empty($status_ramai) || empty($buka_24_jam) || empty($status_operasional) || $latitude === null || $longitude === null) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$valid_ramai = ['ramai', 'tidak_ramai'];
|
||||
$valid_24 = ['ya', 'tidak'];
|
||||
$valid_ops = ['buka', 'tutup'];
|
||||
|
||||
if (!in_array($status_ramai, $valid_ramai) || !in_array($buka_24_jam, $valid_24) || !in_array($status_operasional, $valid_ops)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Nilai enum tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $koneksi->prepare(
|
||||
"INSERT INTO spbu (nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
$stmt->bind_param('sssssdd', $nama_spbu, $status_ramai, $buka_24_jam, $status_operasional, $nomor_hp, $latitude, $longitude);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$id = $koneksi->insert_id;
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => 'SPBU berhasil ditambahkan.',
|
||||
'id' => $id,
|
||||
'data' => [
|
||||
'id' => $id,
|
||||
'nama_spbu' => $nama_spbu,
|
||||
'status_ramai' => $status_ramai,
|
||||
'buka_24_jam' => $buka_24_jam,
|
||||
'status_operasional' => $status_operasional,
|
||||
'nomor_hp' => $nomor_hp,
|
||||
'latitude' => $latitude,
|
||||
'longitude' => $longitude,
|
||||
]
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan SPBU: ' . $stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
// ─── TAMBAH POLYLINE ─────────────────────────────────────────────────────────
|
||||
} elseif ($tipe === 'polyline') {
|
||||
$nama_line = isset($_POST['nama_line']) ? trim($_POST['nama_line']) : '';
|
||||
$keterangan = isset($_POST['keterangan']) ? trim($_POST['keterangan']) : '';
|
||||
$warna = isset($_POST['warna']) ? trim($_POST['warna']) : '#3b82f6';
|
||||
$koordinat = isset($_POST['koordinat']) ? trim($_POST['koordinat']) : '';
|
||||
|
||||
if (empty($nama_line) || empty($koordinat)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Nama line dan koordinat wajib diisi.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Validasi JSON koordinat
|
||||
$decoded = json_decode($koordinat, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE || !is_array($decoded)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Format koordinat tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $koneksi->prepare(
|
||||
"INSERT INTO polyline (nama_line, keterangan, warna, koordinat) VALUES (?, ?, ?, ?)"
|
||||
);
|
||||
$stmt->bind_param('ssss', $nama_line, $keterangan, $warna, $koordinat);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$id = $koneksi->insert_id;
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => 'Polyline berhasil ditambahkan.',
|
||||
'id' => $id,
|
||||
'data' => [
|
||||
'id' => $id,
|
||||
'nama_line' => $nama_line,
|
||||
'keterangan' => $keterangan,
|
||||
'warna' => $warna,
|
||||
'koordinat' => $koordinat,
|
||||
]
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan polyline: ' . $stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
// ─── TAMBAH POLYGON ──────────────────────────────────────────────────────────
|
||||
} elseif ($tipe === 'polygon') {
|
||||
$nama_polygon = isset($_POST['nama_polygon']) ? trim($_POST['nama_polygon']) : '';
|
||||
$keterangan = isset($_POST['keterangan']) ? trim($_POST['keterangan']) : '';
|
||||
$warna = isset($_POST['warna']) ? trim($_POST['warna']) : '#22c55e';
|
||||
$koordinat = isset($_POST['koordinat']) ? trim($_POST['koordinat']) : '';
|
||||
|
||||
if (empty($nama_polygon) || empty($koordinat)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Nama polygon dan koordinat wajib diisi.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$decoded = json_decode($koordinat, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE || !is_array($decoded)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Format koordinat tidak valid.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $koneksi->prepare(
|
||||
"INSERT INTO polygon (nama_polygon, keterangan, warna, koordinat) VALUES (?, ?, ?, ?)"
|
||||
);
|
||||
$stmt->bind_param('ssss', $nama_polygon, $keterangan, $warna, $koordinat);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$id = $koneksi->insert_id;
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => 'Polygon berhasil ditambahkan.',
|
||||
'id' => $id,
|
||||
'data' => [
|
||||
'id' => $id,
|
||||
'nama_polygon' => $nama_polygon,
|
||||
'keterangan' => $keterangan,
|
||||
'warna' => $warna,
|
||||
'koordinat' => $koordinat,
|
||||
]
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan polygon: ' . $stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali.']);
|
||||
}
|
||||
|
||||
$koneksi->close();
|
||||
Reference in New Issue
Block a user