Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bf832634e1 | |||
| a3abf1192b | |||
| 6e6a890f61 | |||
| 2579577cbe | |||
| 34050ad226 | |||
| 8550ad1a5e | |||
| 106cb5885e | |||
| 9b40f7184e | |||
| ca5e302326 | |||
| 58e9482b48 | |||
| 9a865ca31d | |||
| d55dc2c420 | |||
| 1229e495d7 | |||
| 19ac7c3273 | |||
| 1e6b066336 | |||
| 134ccf6fea | |||
| a9ab80ee45 | |||
| 059ba461ae | |||
| 04b354e569 | |||
| 9add806884 | |||
| 59262bff70 | |||
| c225f62183 | |||
| c825bdee6b | |||
| baf93fb42a | |||
| db6c61daf2 | |||
| f3251c35d7 | |||
| 6495336f18 |
Binary file not shown.
@@ -1,35 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* WebGIS - Konfigurasi & Koneksi Database
|
||||
*/
|
||||
|
||||
// Pastikan PHP tidak menampilkan error sebagai HTML (merusak output JSON)
|
||||
ini_set('display_errors', 0);
|
||||
ini_set('display_startup_errors', 0);
|
||||
error_reporting(0);
|
||||
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_USER', 'root');
|
||||
define('DB_PASS', '');
|
||||
define('DB_NAME', 'WEB_GIS');
|
||||
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||
|
||||
/**
|
||||
* Mengembalikan koneksi MySQLi.
|
||||
* Jika koneksi gagal, langsung output JSON error dan exit.
|
||||
*/
|
||||
function getConnection()
|
||||
{
|
||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
||||
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||
$host = "localhost";
|
||||
$user = "root";
|
||||
$pass = "";
|
||||
$db = "WEB_GIS";
|
||||
} else {
|
||||
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||
$user = "mysql";
|
||||
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||
$db = "default"; // ← pakai database default yang sudah ada
|
||||
}
|
||||
$conn = new mysqli($host, $user, $pass);
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['status' => 'gagal', 'pesan' => 'Koneksi database gagal: ' . $conn->connect_error]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
echo json_encode([
|
||||
'status' => 'gagal',
|
||||
'pesan' => 'Koneksi database gagal: ' . $conn->connect_error
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
$conn->select_db($db);
|
||||
$conn->set_charset('utf8mb4');
|
||||
|
||||
$conn->set_charset('utf8mb4');
|
||||
// Auto-create tables
|
||||
$conn->query("
|
||||
CREATE TABLE IF NOT EXISTS `tb_jalan` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`nama_jalan` VARCHAR(100) NOT NULL,
|
||||
`status_jalan` ENUM('Nasional','Provinsi','Kabupaten') NOT NULL,
|
||||
`panjang_jalan` DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||||
`geojson` JSON 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
|
||||
");
|
||||
|
||||
$conn->query("
|
||||
CREATE TABLE IF NOT EXISTS `tb_parsil` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`nama_parsil` VARCHAR(100) NOT NULL,
|
||||
`status_kepemilikan` ENUM('SHM','HGB','HGU','HP') NOT NULL,
|
||||
`luas_tanah` DECIMAL(16,4) NOT NULL DEFAULT '0.0000',
|
||||
`geojson` JSON 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
|
||||
");
|
||||
|
||||
function getConnection() {
|
||||
global $conn;
|
||||
return $conn;
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
|
||||
@@ -1,33 +1,40 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// KONFIGURASI DATABASE
|
||||
// File: config.php
|
||||
// ============================================================
|
||||
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_USER', 'root'); // Sesuaikan dengan user MySQL Anda
|
||||
define('DB_PASS', ''); // Sesuaikan dengan password MySQL Anda
|
||||
define('DB_NAME', 'webgis_p3');
|
||||
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||
$host = "localhost";
|
||||
$user = "root";
|
||||
$pass = "";
|
||||
$db = "webgis_p3";
|
||||
} else {
|
||||
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||
$user = "mysql";
|
||||
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||
$db = "default"; // ← pakai database default yang sudah ada
|
||||
}
|
||||
|
||||
$conn = new mysqli($host, $user, $pass);
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Koneksi database gagal: ' . $conn->connect_error]));
|
||||
}
|
||||
|
||||
|
||||
$conn->select_db($db);
|
||||
$conn->set_charset('utf8mb4');
|
||||
|
||||
function getDB() {
|
||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Koneksi database gagal: ' . $conn->connect_error]));
|
||||
}
|
||||
$conn->set_charset('utf8mb4');
|
||||
global $conn;
|
||||
return $conn;
|
||||
}
|
||||
|
||||
// Header CORS & JSON untuk semua response
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
||||
header('Access-Control-Allow-Headers: Content-Type');
|
||||
|
||||
// Handle preflight OPTIONS request
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(200);
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
?>
|
||||
@@ -1,88 +0,0 @@
|
||||
-- ============================================================
|
||||
-- DATABASE: webgis_p3
|
||||
-- Pertemuan 3 – Layer Groups and Layers Control
|
||||
-- Data SPBU dengan 2 Layer Group: Buka 24 Jam & Tidak 24 Jam
|
||||
-- ============================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS webgis_p3
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE webgis_p3;
|
||||
|
||||
-- ---- Tabel Data Jalan (Polyline) ----
|
||||
CREATE TABLE IF NOT EXISTS data_jalan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_jalan VARCHAR(200) NOT NULL,
|
||||
status ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten',
|
||||
panjang_m DOUBLE NOT NULL DEFAULT 0,
|
||||
geojson LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ---- Tabel Data Parsil Tanah (Polygon) ----
|
||||
CREATE TABLE IF NOT EXISTS data_parsil (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
no_parsil VARCHAR(100) NOT NULL,
|
||||
pemilik VARCHAR(200) NOT NULL,
|
||||
status ENUM('SHM','HGB','HGU','HP') NOT NULL DEFAULT 'SHM',
|
||||
luas_m2 DOUBLE NOT NULL DEFAULT 0,
|
||||
geojson LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ---- Tabel Data SPBU (Point/Marker) ----
|
||||
-- buka_24_jam: 'Ya' → Layer Group "SPBU 24 Jam"
|
||||
-- 'Tidak' → Layer Group "SPBU Tidak 24 Jam"
|
||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_spbu VARCHAR(200) NOT NULL,
|
||||
no_wa VARCHAR(20) NOT NULL,
|
||||
buka_24_jam ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ---- Data Contoh SPBU (opsional, untuk testing) ----
|
||||
INSERT INTO data_spbu (nama_spbu, no_wa, buka_24_jam, latitude, longitude) VALUES
|
||||
('SPBU Jl. Ahmad Yani', '0812-1111-0001', 'Ya', -0.0400, 109.3200),
|
||||
('SPBU Jl. Gajah Mada', '0812-1111-0002', 'Ya', -0.0520, 109.3450),
|
||||
('SPBU Jl. Diponegoro', '0812-1111-0003', 'Tidak', -0.0610, 109.3600),
|
||||
('SPBU Jl. Sutan Syahrir', '0812-1111-0004', 'Tidak', -0.0480, 109.3700),
|
||||
('SPBU Jl. Kom. Yos Sudarso', '0812-1111-0005', 'Ya', -0.0350, 109.3550);
|
||||
|
||||
-- ============================================================
|
||||
-- Tabel Data Kemiskinan (Point/Marker)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS data_kemiskinan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_kk VARCHAR(200) NOT NULL, -- Nama kepala keluarga
|
||||
jumlah_kk INT NOT NULL DEFAULT 1, -- Jumlah anggota dalam KK
|
||||
alamat TEXT NOT NULL,
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ============================================================
|
||||
-- Tabel Data Rumah Ibadah (Point/Marker + Radius Buffer)
|
||||
-- jenis: Masjid, Gereja, Pura, Vihara, Klenteng
|
||||
-- radius_m: radius lingkaran buffer dalam meter (100 – 5000)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS data_masjid (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_masjid VARCHAR(200) NOT NULL,
|
||||
jenis ENUM('Masjid','Gereja','Pura','Vihara','Klenteng') NOT NULL DEFAULT 'Masjid',
|
||||
pic_masjid VARCHAR(200) NOT NULL, -- Person In Charge
|
||||
alamat TEXT NOT NULL,
|
||||
radius_m INT NOT NULL DEFAULT 500, -- Radius buffer (100-5000 m)
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
|
||||
@@ -1483,7 +1483,7 @@
|
||||
|
||||
<label>Nama Kepala Keluarga (Wajib)</label>
|
||||
<input type="text" id="add-lp-nama" placeholder="Cth: Pak Budi">
|
||||
<label>NIK (16 Digit - Opsional)</label>
|
||||
<label>NIK (16 Digit)</label>
|
||||
<input type="text" id="add-lp-nik" placeholder="16 Digit NIK" maxlength="16">
|
||||
<label>No. WhatsApp Pelapor (Opsional)</label>
|
||||
<input type="text" id="add-lp-wa" placeholder="08xxxxxxxx">
|
||||
|
||||
@@ -783,6 +783,20 @@
|
||||
document.getElementById('error-msg').classList.remove('show');
|
||||
}
|
||||
|
||||
async function cekKesehatanServer() {
|
||||
try {
|
||||
const res = await fetch('api_auth.php', { method: 'GET' });
|
||||
const text = await res.text();
|
||||
if (text.trim().startsWith('<?php')) {
|
||||
tampilError('PHP tidak berjalan di server deploy. File .php ditampilkan mentah — gunakan hosting dengan PHP (Apache/Nginx+PHP-FPM), bukan static site saja.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
async function handleLogin(e) {
|
||||
e.preventDefault();
|
||||
sembunyiError();
|
||||
@@ -808,7 +822,25 @@
|
||||
body: JSON.stringify({ username, password, role: roleSelected })
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
const raw = await res.text();
|
||||
if (raw.trim().startsWith('<?php')) {
|
||||
tampilError('PHP tidak berjalan di server. Deploy ulang dengan runtime PHP + MySQL (lihat Dockerfile di repo).');
|
||||
btn.classList.remove('loading');
|
||||
btnText.textContent = 'Masuk';
|
||||
btnArrow.textContent = '→';
|
||||
return;
|
||||
}
|
||||
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(raw);
|
||||
} catch {
|
||||
tampilError('Respons server tidak valid. Periksa /health.php — kemungkinan PHP atau MySQL belum aktif.');
|
||||
btn.classList.remove('loading');
|
||||
btnText.textContent = 'Masuk';
|
||||
btnArrow.textContent = '→';
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.success) {
|
||||
sessionStorage.setItem('webgis_user', JSON.stringify({
|
||||
@@ -829,13 +861,15 @@
|
||||
btnArrow.textContent = '→';
|
||||
}
|
||||
} catch {
|
||||
tampilError('Gagal terhubung ke server. Pastikan Apache & MySQL aktif.');
|
||||
tampilError('Gagal terhubung ke server. PHP/MySQL mungkin belum aktif — buka /health.php untuk diagnosa.');
|
||||
btn.classList.remove('loading');
|
||||
btnText.textContent = 'Masuk';
|
||||
btnArrow.textContent = '→';
|
||||
}
|
||||
}
|
||||
|
||||
cekKesehatanServer();
|
||||
|
||||
// Handle logout redirect
|
||||
if (new URLSearchParams(location.search).get('logout')) {
|
||||
sessionStorage.removeItem('webgis_user');
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
-- ============================================================
|
||||
-- MIGRASI: Penyesuaian Proses Bisnis WebGIS v2.0
|
||||
-- Jalankan di phpMyAdmin setelah database_lengkap.sql
|
||||
-- ============================================================
|
||||
|
||||
USE webgis_p3;
|
||||
|
||||
-- ── 1. Tambah kolom NIK, No WA, dan alasan_tolak ke laporan_masyarakat ──
|
||||
-- Periksa apakah kolom sudah ada sebelum menambahkan
|
||||
|
||||
-- Tambah kolom nik
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'webgis_p3' AND TABLE_NAME = 'laporan_masyarakat' AND COLUMN_NAME = 'nik');
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE laporan_masyarakat ADD COLUMN nik VARCHAR(20) DEFAULT NULL AFTER nama_pelapor',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- Tambah kolom no_wa
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'webgis_p3' AND TABLE_NAME = 'laporan_masyarakat' AND COLUMN_NAME = 'no_wa');
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE laporan_masyarakat ADD COLUMN no_wa VARCHAR(20) DEFAULT NULL AFTER nik',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- Tambah kolom alasan_tolak
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'webgis_p3' AND TABLE_NAME = 'laporan_masyarakat' AND COLUMN_NAME = 'alasan_tolak');
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE laporan_masyarakat ADD COLUMN alasan_tolak TEXT DEFAULT NULL AFTER status',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ── 2. Perluas ENUM status di laporan_masyarakat ──
|
||||
-- Tambah status: Diverifikasi, Ditolak
|
||||
ALTER TABLE laporan_masyarakat
|
||||
MODIFY COLUMN status ENUM('Pending','Diproses','Diverifikasi','Ditolak','Selesai')
|
||||
NOT NULL DEFAULT 'Pending';
|
||||
|
||||
-- ── 3. Pastikan tabel riwayat_bantuan ada ──
|
||||
CREATE TABLE IF NOT EXISTS riwayat_bantuan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
id_kemiskinan INT NOT NULL,
|
||||
pemberi VARCHAR(200) NOT NULL,
|
||||
jenis_bantuan VARCHAR(200) NOT NULL,
|
||||
tanggal DATE NOT NULL,
|
||||
keterangan TEXT DEFAULT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (id_kemiskinan) REFERENCES data_kemiskinan(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ── 4. Pastikan tabel laporan_masyarakat ada ──
|
||||
CREATE TABLE IF NOT EXISTS laporan_masyarakat (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_pelapor VARCHAR(200) NOT NULL,
|
||||
nik VARCHAR(20) DEFAULT NULL,
|
||||
no_wa VARCHAR(20) DEFAULT NULL,
|
||||
deskripsi TEXT NOT NULL,
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
status ENUM('Pending','Diproses','Diverifikasi','Ditolak','Selesai') NOT NULL DEFAULT 'Pending',
|
||||
alasan_tolak TEXT DEFAULT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ── 5. Tambahkan kolom yang mungkin belum ada di data_kemiskinan ──
|
||||
-- status_bantuan
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'webgis_p3' AND TABLE_NAME = 'data_kemiskinan' AND COLUMN_NAME = 'status_bantuan');
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
"ALTER TABLE data_kemiskinan ADD COLUMN status_bantuan VARCHAR(20) NOT NULL DEFAULT 'Belum' AFTER longitude",
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- kategori
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'webgis_p3' AND TABLE_NAME = 'data_kemiskinan' AND COLUMN_NAME = 'kategori');
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
"ALTER TABLE data_kemiskinan ADD COLUMN kategori VARCHAR(50) NOT NULL DEFAULT 'Miskin' AFTER status_bantuan",
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ── 6. Password semua akun: "password" ──
|
||||
-- Jalankan update_pass.php atau generate_hash.php jika database sudah ada.
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
require_once 'config.php';
|
||||
$db = getDB();
|
||||
$results = [];
|
||||
|
||||
$queries = [
|
||||
"CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
nama_lengkap VARCHAR(200) NOT NULL,
|
||||
role ENUM('admin','petugas','pengurus','walikota') NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
aktif TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS data_kemiskinan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_kk VARCHAR(200) NOT NULL,
|
||||
nik VARCHAR(20) NULL,
|
||||
jumlah_kk INT NOT NULL DEFAULT 1,
|
||||
alamat TEXT NOT NULL,
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
status_bantuan ENUM('Belum','Sudah') NOT NULL DEFAULT 'Belum',
|
||||
kategori VARCHAR(50) DEFAULT 'Miskin',
|
||||
skor_penghasilan INT DEFAULT 0,
|
||||
skor_rumah INT DEFAULT 0,
|
||||
skor_makan INT DEFAULT 0,
|
||||
tanggal_lahir DATE NULL,
|
||||
pendidikan VARCHAR(50) NULL,
|
||||
riwayat_penyakit VARCHAR(255) NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS data_masjid (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_masjid VARCHAR(200) NOT NULL,
|
||||
jenis ENUM('Masjid','Mushola','Gereja','Pura','Vihara','Klenteng') NOT NULL DEFAULT 'Masjid',
|
||||
pic_masjid VARCHAR(200) NOT NULL,
|
||||
alamat TEXT NOT NULL,
|
||||
radius_m INT NOT NULL DEFAULT 500,
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS laporan_masyarakat (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_pelapor VARCHAR(200) NOT NULL,
|
||||
tanggal_lahir DATE NULL,
|
||||
pendidikan VARCHAR(50) NULL,
|
||||
riwayat_penyakit VARCHAR(255) NULL,
|
||||
skor_penghasilan INT NULL,
|
||||
skor_rumah INT NULL,
|
||||
skor_makan INT NULL,
|
||||
jumlah_kk INT DEFAULT 1,
|
||||
nik VARCHAR(20) NULL,
|
||||
no_wa VARCHAR(20) NULL,
|
||||
deskripsi TEXT NOT NULL,
|
||||
latitude DOUBLE NOT NULL,
|
||||
longitude DOUBLE NOT NULL,
|
||||
status ENUM('Pending','Diproses','Diverifikasi','Ditolak','Selesai') NOT NULL DEFAULT 'Pending',
|
||||
alasan_tolak TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||
|
||||
"CREATE TABLE IF NOT EXISTS riwayat_bantuan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
id_kemiskinan INT NOT NULL,
|
||||
pemberi VARCHAR(200) NOT NULL,
|
||||
jenis_bantuan VARCHAR(200) NOT NULL,
|
||||
tanggal DATE NOT NULL,
|
||||
keterangan TEXT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||
];
|
||||
|
||||
foreach ($queries as $q) {
|
||||
$tableName = '';
|
||||
preg_match('/TABLE IF NOT EXISTS (\w+)/', $q, $m);
|
||||
if ($m) $tableName = $m[1];
|
||||
|
||||
if ($db->query($q)) {
|
||||
$results[] = "✅ Tabel '$tableName' berhasil dibuat";
|
||||
} else {
|
||||
$results[] = "❌ Error '$tableName': " . $db->error;
|
||||
}
|
||||
}
|
||||
|
||||
// Insert user demo
|
||||
$hash = '$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG';
|
||||
$users = [
|
||||
['admin', 'Administrator Sistem', 'admin'],
|
||||
['pengurus', 'Pengurus Rumah Ibadah', 'pengurus'],
|
||||
['walikota', 'Walikota Pontianak', 'walikota'],
|
||||
];
|
||||
foreach ($users as $u) {
|
||||
$stmt = $db->prepare("INSERT IGNORE INTO users (username, nama_lengkap, role, password_hash) VALUES (?, ?, ?, ?)");
|
||||
$stmt->bind_param('ssss', $u[0], $u[1], $u[2], $hash);
|
||||
$stmt->execute();
|
||||
$results[] = "✅ User '{$u[0]}' (password: password)";
|
||||
}
|
||||
|
||||
header('Content-Type: text/plain');
|
||||
echo implode("\n", $results);
|
||||
echo "\n\nSELESAI! Sekarang coba login.";
|
||||
?>
|
||||
@@ -1,82 +0,0 @@
|
||||
-- ============================================================
|
||||
-- MIGRASI: Tabel Users & Role-Based Access Control
|
||||
-- WebGIS Poverty Mapping – Sistem Autentikasi
|
||||
-- Jalankan di phpMyAdmin atau MySQL CLI setelah database.sql
|
||||
-- ============================================================
|
||||
|
||||
USE webgis_p3;
|
||||
|
||||
-- ── Tabel pengguna ─────────────────────────────────────────
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
nama_lengkap VARCHAR(200) NOT NULL,
|
||||
role ENUM('admin','petugas','pengurus','walikota') NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
aktif TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_aktif (aktif)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- ── Akun demo (password semua akun: "password") ──
|
||||
-- Hash bcrypt digenerate dengan PHP password_hash('password', PASSWORD_DEFAULT)
|
||||
--
|
||||
-- admin → password
|
||||
-- petugas → password
|
||||
-- pengurus → password
|
||||
-- walikota → password
|
||||
|
||||
INSERT INTO users (username, nama_lengkap, role, password_hash) VALUES
|
||||
(
|
||||
'admin',
|
||||
'Administrator Sistem',
|
||||
'admin',
|
||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
||||
),
|
||||
(
|
||||
'petugas',
|
||||
'Petugas Lapangan',
|
||||
'petugas',
|
||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
||||
),
|
||||
(
|
||||
'pengurus',
|
||||
'Pengurus Rumah Ibadah',
|
||||
'pengurus',
|
||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
||||
),
|
||||
(
|
||||
'walikota',
|
||||
'Walikota Pontianak',
|
||||
'walikota',
|
||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
||||
);
|
||||
|
||||
-- !! Untuk database yang sudah ada, jalankan update_pass.php atau generate_hash.php !!
|
||||
|
||||
-- ── Catatan hak akses per role ──────────────────────────────
|
||||
/*
|
||||
ROLE: admin
|
||||
─────────────────────────────────────────────────────────────
|
||||
• CRUD semua data: SPBU, kemiskinan, rumah ibadah
|
||||
• Dapat melihat semua layer & analisis spasial
|
||||
• Fitur FAB Tambah: SPBU, Kemiskinan, Rumah Ibadah
|
||||
|
||||
ROLE: petugas
|
||||
─────────────────────────────────────────────────────────────
|
||||
• Input & edit data kemiskinan (CREATE + UPDATE + DELETE)
|
||||
• View semua data (read-only untuk SPBU & Rumah Ibadah)
|
||||
• Fitur FAB Tambah: hanya Kemiskinan
|
||||
• Tidak dapat hapus data SPBU atau Rumah Ibadah
|
||||
• Tidak dapat tambah/edit SPBU atau Rumah Ibadah
|
||||
|
||||
ROLE: pengurus
|
||||
─────────────────────────────────────────────────────────────
|
||||
• Input & edit data rumah ibadah miliknya (CREATE + UPDATE + DELETE)
|
||||
• View data kemiskinan (read-only)
|
||||
• Fitur FAB Tambah: hanya Rumah Ibadah
|
||||
• Tidak dapat hapus data SPBU atau kemiskinan
|
||||
• Tidak dapat tambah/edit SPBU atau kemiskinan
|
||||
*/
|
||||
+37
-54
@@ -1,13 +1,32 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// KONFIGURASI DATABASE – WebGIS SPBU
|
||||
// File: config.php
|
||||
// ============================================================
|
||||
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_USER', 'root');
|
||||
define('DB_PASS', '');
|
||||
define('DB_NAME', 'webgis_spbu');
|
||||
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||
$host = "mysql-database-to00g0c4cwsws8gsoc4c08og";
|
||||
$user = "mysql";
|
||||
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||
$db = "webgis_spbu";
|
||||
} else {
|
||||
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||
$user = "mysql";
|
||||
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||
$db = "default"; // ← pakai database default yang sudah ada
|
||||
|
||||
}
|
||||
|
||||
$conn = new mysqli($host, $user, $pass);
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
|
||||
}
|
||||
|
||||
$conn->select_db($db);
|
||||
$conn->set_charset('utf8mb4');
|
||||
|
||||
function getDB() {
|
||||
global $conn;
|
||||
return $conn;
|
||||
}
|
||||
|
||||
function jsonError($message, $code = 500) {
|
||||
http_response_code($code);
|
||||
@@ -15,32 +34,8 @@ function jsonError($message, $code = 500) {
|
||||
exit();
|
||||
}
|
||||
|
||||
function getDB() {
|
||||
mysqli_report(MYSQLI_REPORT_OFF);
|
||||
|
||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS);
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
|
||||
}
|
||||
|
||||
$dbName = DB_NAME;
|
||||
if (!$conn->query("CREATE DATABASE IF NOT EXISTS `{$dbName}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Gagal membuat database: ' . $conn->error]));
|
||||
}
|
||||
|
||||
if (!$conn->select_db($dbName)) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['error' => 'Gagal memilih database: ' . $conn->error]));
|
||||
}
|
||||
|
||||
$conn->set_charset('utf8mb4');
|
||||
return $conn;
|
||||
}
|
||||
|
||||
function ensureSpbuSchema($db) {
|
||||
if (!$db->query("
|
||||
$db->query("
|
||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_spbu VARCHAR(200) NOT NULL,
|
||||
@@ -52,15 +47,7 @@ function ensureSpbuSchema($db) {
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||
")) {
|
||||
jsonError('Gagal membuat tabel data_spbu: ' . $db->error);
|
||||
}
|
||||
|
||||
$check = $db->query("SHOW COLUMNS FROM data_spbu LIKE 'alamat'");
|
||||
if ($check && $check->num_rows === 0) {
|
||||
$db->query("ALTER TABLE data_spbu ADD COLUMN alamat VARCHAR(300) NOT NULL DEFAULT '' AFTER nama_spbu");
|
||||
$db->query("UPDATE data_spbu SET alamat = CONCAT(nama_spbu, ', Pontianak') WHERE alamat = ''");
|
||||
}
|
||||
");
|
||||
|
||||
$countRes = $db->query("SELECT COUNT(*) AS total FROM data_spbu");
|
||||
if ($countRes && (int)$countRes->fetch_assoc()['total'] === 0) {
|
||||
@@ -70,20 +57,15 @@ function ensureSpbuSchema($db) {
|
||||
|
||||
function seedSpbuSampleData($db) {
|
||||
$samples = [
|
||||
['SPBU Jl. Ahmad Yani', 'Jl. Ahmad Yani No. 12, Pontianak', '0812-1111-0001', 'Ya', -0.0400, 109.3200],
|
||||
['SPBU Jl. Gajah Mada', 'Jl. Gajah Mada No. 45, Pontianak', '0812-1111-0002', 'Ya', -0.0520, 109.3450],
|
||||
['SPBU Jl. Diponegoro', 'Jl. Diponegoro No. 88, Pontianak', '0812-1111-0003', 'Tidak', -0.0610, 109.3600],
|
||||
['SPBU Jl. Sutan Syahrir', 'Jl. Sutan Syahrir No. 5, Pontianak', '0812-1111-0004', 'Tidak', -0.0480, 109.3700],
|
||||
['SPBU Jl. Ahmad Yani', 'Jl. Ahmad Yani No. 12, Pontianak', '0812-1111-0001', 'Ya', -0.0400, 109.3200],
|
||||
['SPBU Jl. Gajah Mada', 'Jl. Gajah Mada No. 45, Pontianak', '0812-1111-0002', 'Ya', -0.0520, 109.3450],
|
||||
['SPBU Jl. Diponegoro', 'Jl. Diponegoro No. 88, Pontianak', '0812-1111-0003', 'Tidak', -0.0610, 109.3600],
|
||||
['SPBU Jl. Sutan Syahrir', 'Jl. Sutan Syahrir No. 5, Pontianak', '0812-1111-0004', 'Tidak', -0.0480, 109.3700],
|
||||
['SPBU Jl. Kom. Yos Sudarso', 'Jl. Kom. Yos Sudarso No. 22, Pontianak', '0812-1111-0005', 'Ya', -0.0350, 109.3550],
|
||||
['SPBU Jl. Tanjung Raya', 'Jl. Tanjung Raya No. 101, Pontianak', '0812-1111-0006', 'Tidak', -0.0580, 109.3300],
|
||||
['SPBU Jl. Veteran', 'Jl. Veteran No. 33, Pontianak', '0812-1111-0007', 'Ya', -0.0450, 109.3380],
|
||||
['SPBU Jl. Tanjung Raya', 'Jl. Tanjung Raya No. 101, Pontianak', '0812-1111-0006', 'Tidak', -0.0580, 109.3300],
|
||||
['SPBU Jl. Veteran', 'Jl. Veteran No. 33, Pontianak', '0812-1111-0007', 'Ya', -0.0450, 109.3380],
|
||||
];
|
||||
|
||||
$stmt = $db->prepare(
|
||||
"INSERT INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude)
|
||||
VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
|
||||
$stmt = $db->prepare("INSERT INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?)");
|
||||
foreach ($samples as $row) {
|
||||
[$nama, $alamat, $wa, $jam, $lat, $lng] = $row;
|
||||
$stmt->bind_param('ssssdd', $nama, $alamat, $wa, $jam, $lat, $lng);
|
||||
@@ -101,3 +83,4 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||
http_response_code(200);
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"require": {
|
||||
"php": ">=8.1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
|
||||
Reference in New Issue
Block a user