'data_jalan','parsil'=>'data_parsil','point'=>'data_point']; if (!isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Layer tidak valid']); exit; } $res = $conn->query("SELECT * FROM {$tabel[$layer]} ORDER BY created_at DESC"); $data = []; while ($row = $res->fetch_assoc()) $data[] = $row; echo json_encode(['status'=>'ok','data'=>$data]); exit; } // ══════════════════════════════════════════════ // READ SINGLE // ══════════════════════════════════════════════ if ($aksi === 'detail') { $layer = $_GET['layer'] ?? ''; $id = intval($_GET['id'] ?? 0); $tabel = ['jalan'=>'data_jalan','parsil'=>'data_parsil','point'=>'data_point']; if (!isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Layer tidak valid']); exit; } $stmt = $conn->prepare("SELECT * FROM {$tabel[$layer]} WHERE id=?"); $stmt->bind_param('i', $id); $stmt->execute(); $row = $stmt->get_result()->fetch_assoc(); echo $row ? json_encode(['status'=>'ok','data'=>$row]) : json_encode(['status'=>'error','message'=>'Tidak ditemukan']); exit; } // ══════════════════════════════════════════════ // CREATE — simpan data baru // ══════════════════════════════════════════════ if ($aksi === 'simpan') { $layer = $_POST['layer'] ?? ''; $geojson = $_POST['geojson'] ?? ''; // Validasi GeoJSON if (!$geojson || json_decode($geojson) === null) { echo json_encode(['status'=>'error','message'=>'GeoJSON tidak valid']); exit; } if ($layer === 'jalan') { $nama = bersih($_POST['nama'] ?? ''); $status = bersih($_POST['status'] ?? ''); $panjang = floatval($_POST['panjang'] ?? 0); $valid = ['Jalan Nasional','Jalan Provinsi','Jalan Kabupaten']; if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; } $stmt = $conn->prepare("INSERT INTO data_jalan (nama_jalan,status_jalan,panjang_meter,geojson) VALUES (?,?,?,?)"); $stmt->bind_param('ssds', $nama, $status, $panjang, $geojson); } elseif ($layer === 'parsil') { $nama = bersih($_POST['nama'] ?? ''); $status = bersih($_POST['status'] ?? ''); $luas = floatval($_POST['luas'] ?? 0); $valid = ['SHM','HGB','HGU','HP']; if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; } $stmt = $conn->prepare("INSERT INTO data_parsil (nama_parsil,status_sertifikat,luas_m2,geojson) VALUES (?,?,?,?)"); $stmt->bind_param('ssds', $nama, $status, $luas, $geojson); } elseif ($layer === 'point') { $nama = bersih($_POST['nama'] ?? ''); $wa = bersih($_POST['wa'] ?? ''); $jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak'; if (!$nama) { echo json_encode(['status'=>'error','message'=>'Nama wajib diisi']); exit; } $stmt = $conn->prepare("INSERT INTO data_point (nama_objek,no_wa,buka_24jam,geojson) VALUES (?,?,?,?)"); $stmt->bind_param('ssss', $nama, $wa, $jam, $geojson); } else { echo json_encode(['status'=>'error','message'=>'Layer tidak dikenali']); exit; } if ($stmt->execute()) { echo json_encode(['status'=>'ok','id'=>$stmt->insert_id,'message'=>'Data berhasil disimpan!']); } else { echo json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]); } $stmt->close(); exit; } // ══════════════════════════════════════════════ // UPDATE — perbarui atribut & koordinat // ══════════════════════════════════════════════ if ($aksi === 'update') { $layer = $_POST['layer'] ?? ''; $id = intval($_POST['id'] ?? 0); $geojson = $_POST['geojson'] ?? null; if (!$id) { echo json_encode(['status'=>'error','message'=>'ID tidak valid']); exit; } if ($layer === 'jalan') { $nama = bersih($_POST['nama'] ?? ''); $status = bersih($_POST['status'] ?? ''); $panjang = floatval($_POST['panjang'] ?? 0); $valid = ['Jalan Nasional','Jalan Provinsi','Jalan Kabupaten']; if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; } if ($geojson && json_decode($geojson)) { $stmt = $conn->prepare("UPDATE data_jalan SET nama_jalan=?,status_jalan=?,panjang_meter=?,geojson=? WHERE id=?"); $stmt->bind_param('ssdsi', $nama, $status, $panjang, $geojson, $id); } else { $stmt = $conn->prepare("UPDATE data_jalan SET nama_jalan=?,status_jalan=?,panjang_meter=? WHERE id=?"); $stmt->bind_param('ssdi', $nama, $status, $panjang, $id); } } elseif ($layer === 'parsil') { $nama = bersih($_POST['nama'] ?? ''); $status = bersih($_POST['status'] ?? ''); $luas = floatval($_POST['luas'] ?? 0); $valid = ['SHM','HGB','HGU','HP']; if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; } if ($geojson && json_decode($geojson)) { $stmt = $conn->prepare("UPDATE data_parsil SET nama_parsil=?,status_sertifikat=?,luas_m2=?,geojson=? WHERE id=?"); $stmt->bind_param('ssdsi', $nama, $status, $luas, $geojson, $id); } else { $stmt = $conn->prepare("UPDATE data_parsil SET nama_parsil=?,status_sertifikat=?,luas_m2=? WHERE id=?"); $stmt->bind_param('ssdi', $nama, $status, $luas, $id); } } elseif ($layer === 'point') { $nama = bersih($_POST['nama'] ?? ''); $wa = bersih($_POST['wa'] ?? ''); $jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak'; if (!$nama) { echo json_encode(['status'=>'error','message'=>'Nama wajib diisi']); exit; } if ($geojson && json_decode($geojson)) { $stmt = $conn->prepare("UPDATE data_point SET nama_objek=?,no_wa=?,buka_24jam=?,geojson=? WHERE id=?"); $stmt->bind_param('ssssi', $nama, $wa, $jam, $geojson, $id); } else { $stmt = $conn->prepare("UPDATE data_point SET nama_objek=?,no_wa=?,buka_24jam=? WHERE id=?"); $stmt->bind_param('sssi', $nama, $wa, $jam, $id); } } else { echo json_encode(['status'=>'error','message'=>'Layer tidak dikenali']); exit; } if ($stmt->execute()) { echo json_encode(['status'=>'ok','message'=>'Data berhasil diperbarui!']); } else { echo json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]); } $stmt->close(); exit; } // ══════════════════════════════════════════════ // DELETE // ══════════════════════════════════════════════ if ($aksi === 'hapus') { $layer = $_POST['layer'] ?? $_GET['layer'] ?? ''; $id = intval($_POST['id'] ?? $_GET['id'] ?? 0); $tabel = ['jalan'=>'data_jalan','parsil'=>'data_parsil','point'=>'data_point']; if (!$id || !isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Parameter tidak valid']); exit; } $stmt = $conn->prepare("DELETE FROM {$tabel[$layer]} WHERE id=?"); $stmt->bind_param('i', $id); echo $stmt->execute() ? json_encode(['status'=>'ok','message'=>'Data berhasil dihapus!']) : json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]); $stmt->close(); exit; } echo json_encode(['status'=>'error','message'=>"Aksi '$aksi' tidak dikenali."]);