27 Commits

Author SHA1 Message Date
Farras bf832634e1 penambahakn file setup_db.php untuk proverty map 2026-06-10 15:57:01 +07:00
Farras a3abf1192b update db untuk proverty mapping 2026-06-10 15:53:38 +07:00
Farras 6e6a890f61 update db_3 2026-06-10 15:39:41 +07:00
Farras 2579577cbe update db_2 2026-06-10 15:08:24 +07:00
Farras 34050ad226 update db 2026-06-10 15:07:54 +07:00
Farras 8550ad1a5e update config.php 2026-06-10 14:42:26 +07:00
Farras 106cb5885e menambahkan file health.php 2026-06-10 10:10:28 +07:00
Farras 9b40f7184e hapus file 2026-06-10 10:06:39 +07:00
Farras ca5e302326 mengganti cara menghubungkan db 2026-06-10 10:00:34 +07:00
Farras 58e9482b48 memperbaiki nixpacks.toml#1 2026-06-10 09:53:28 +07:00
Farras 9a865ca31d memperbaiki nixpacks.toml 2026-06-10 09:45:50 +07:00
Farras d55dc2c420 memperbaiki database 2026-06-10 09:40:14 +07:00
Farras 1229e495d7 menambahkan index.php di root folder 2026-06-10 09:28:42 +07:00
Farras 19ac7c3273 mencoba connect database#3 2026-06-10 08:44:37 +07:00
Farras 1e6b066336 mencoba connect database#2 2026-06-10 08:42:14 +07:00
Farras 134ccf6fea mencoba connect database 2026-06-10 07:57:17 +07:00
Farras a9ab80ee45 mengubah file docker-compose.yml_3 2026-06-10 07:05:42 +07:00
Farras 059ba461ae mengubah file docker-compose.yml_2 2026-06-10 06:58:17 +07:00
Farras 04b354e569 mengubah file docker-compose.yml 2026-06-10 06:54:11 +07:00
Farras 9add806884 mengembalikan (restore) file docker-compose.yml 2026-06-10 06:40:59 +07:00
Farras 59262bff70 fix init-databases.sql 2026-06-10 06:26:11 +07:00
Farras c225f62183 Melakukan perubahan pada isi docker-compose.yml_4 2026-06-09 21:05:47 +07:00
Farras c825bdee6b Melakukan perubahan pada isi docker-compose.yml_3 2026-06-09 21:02:07 +07:00
Farras baf93fb42a Melakukan perubahan pada isi docker-compose.yml_2 2026-06-09 20:56:45 +07:00
Farras db6c61daf2 Melakukan perubahan pada isi docker-compose.yml 2026-06-09 20:51:56 +07:00
Farras f3251c35d7 Melakukan perubahan pada isi database di docker 2026-06-09 20:40:21 +07:00
Farras 6495336f18 Menambahkan beberapa perubahan 2026-06-09 20:26:18 +07:00
17 changed files with 279 additions and 364 deletions
Binary file not shown.
+50 -25
View File
@@ -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;
}
?>
+3
View File
@@ -0,0 +1,3 @@
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
+24 -17
View File
@@ -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();
}
?>
?>
-88
View File
@@ -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;
+3
View File
@@ -0,0 +1,3 @@
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
+1 -1
View File
@@ -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">
+36 -2
View File
@@ -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.
+111
View File
@@ -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.";
?>
-82
View File
@@ -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
View File
@@ -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();
}
?>
+3
View File
@@ -0,0 +1,3 @@
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
+5
View File
@@ -0,0 +1,5 @@
{
"require": {
"php": ">=8.1"
}
}
+3
View File
@@ -0,0 +1,3 @@
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok', 'php' => phpversion()]);
+3
View File
@@ -0,0 +1,3 @@
<?php
// Redirect ke index.html
readfile(__DIR__ . '/index.html');