add setup script

This commit is contained in:
2026-06-11 01:22:01 +07:00
parent 0c6f6c5e6c
commit fe3e9ecdf4
+257
View File
@@ -0,0 +1,257 @@
<?php
// ============================================================
// setup_db.php — Database Installer (HAPUS SETELAH DIPAKAI!)
// ============================================================
$host = getenv('DB_HOST') ?: 'db';
$user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASS') ?: 'root';
header('Content-Type: text/html; charset=utf-8');
echo "<style>body{font-family:monospace;background:#0b1120;color:#e0e6f0;padding:20px} .ok{color:#00c9aa} .err{color:#f03e5a} .info{color:#f59e0b} h2{color:#1a5fff}</style>";
echo "<h2>🔧 WebGIS Database Installer</h2>";
// Koneksi tanpa pilih database
$conn = new mysqli($host, $user, $pass);
if ($conn->connect_error) {
die("<p class='err'>❌ Gagal konek ke MySQL: " . $conn->connect_error . "</p>");
}
echo "<p class='ok'>✅ Koneksi ke MySQL berhasil! (Host: $host)</p>";
// ── 1. Buat database webgis ──────────────────────────────────
$conn->query("CREATE DATABASE IF NOT EXISTS webgis CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
echo "<p class='ok'>✅ Database <b>webgis</b> dibuat/sudah ada.</p>";
// ── 2. Buat database geososial ───────────────────────────────
$conn->query("CREATE DATABASE IF NOT EXISTS geososial CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
echo "<p class='ok'>✅ Database <b>geososial</b> dibuat/sudah ada.</p>";
// ── 3. Import tabel webgis ───────────────────────────────────
echo "<h2>📦 Import Database SPBU (webgis)</h2>";
$conn->select_db('webgis');
$webgis_sql = "
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO';
SET time_zone = '+00:00';
CREATE TABLE IF NOT EXISTS `spbu` (
`id` int NOT NULL AUTO_INCREMENT,
`nama_spbu` varchar(100) DEFAULT NULL,
`no_wa` varchar(20) DEFAULT NULL,
`buka_24jam` enum('Ya','Tidak') DEFAULT NULL,
`latitude` double DEFAULT NULL,
`longitude` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE IF NOT EXISTS `jalan` (
`id` int NOT NULL AUTO_INCREMENT,
`nama_jalan` varchar(150) DEFAULT NULL,
`geojson` longtext,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `parsil` (
`id` int NOT NULL AUTO_INCREMENT,
`nama_parsil` varchar(150) DEFAULT NULL,
`geojson` longtext,
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT IGNORE INTO `spbu` (`id`, `nama_spbu`, `no_wa`, `buka_24jam`, `latitude`, `longitude`) VALUES
(1, 'SPBU TanjungPura', '12345678', 'Ya', -0.028881894870255782, 109.3369621038437),
(2, 'SPBU tak tau', '1111111', 'Ya', -0.019509077149319303, 109.33181762695314),
(3, 'SPBU TanjungPura', '1111', 'Tidak', -0.027379988581930446, 109.34041678905488);
";
$stmts = array_filter(array_map('trim', explode(';', $webgis_sql)));
$ok = 0; $fail = 0;
foreach ($stmts as $stmt) {
if (empty($stmt)) continue;
if ($conn->query($stmt)) {
$ok++;
} else {
echo "<p class='info'>⚠️ " . htmlspecialchars(substr($stmt,0,80)) . "... → " . $conn->error . "</p>";
$fail++;
}
}
echo "<p class='ok'>✅ webgis: $ok query berhasil, $fail gagal.</p>";
// ── 4. Import tabel geososial ────────────────────────────────
echo "<h2>📦 Import Database GeoSosial (geososial)</h2>";
$conn->select_db('geososial');
$queries = [
"CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin','petugas','walikota','viewer') NOT NULL DEFAULT 'viewer',
jabatan VARCHAR(100),
can_edit TINYINT(1) NOT NULL DEFAULT 0,
is_admin TINYINT(1) NOT NULL DEFAULT 0,
is_wali TINYINT(1) NOT NULL DEFAULT 0,
aktif TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS kelurahan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
kecamatan VARCHAR(100) NOT NULL
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
tipe ENUM('masjid','gereja','pura','vihara','klenteng') NOT NULL,
ikon VARCHAR(10) DEFAULT '🕌',
lat DECIMAL(10,7) NOT NULL,
lng DECIMAL(10,7) NOT NULL,
kapasitas INT DEFAULT 0,
kelurahan_id INT,
alamat TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS warga (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
nik VARCHAR(16),
kelurahan_id INT,
lat DECIMAL(10,7) NOT NULL,
lng DECIMAL(10,7) NOT NULL,
kategori ENUM('sangat_miskin','miskin','hampir_miskin') NOT NULL,
jumlah_anggota INT DEFAULT 1,
penghasilan BIGINT DEFAULT 0,
tgl_lahir DATE,
pendidikan ENUM('tidak_sekolah','sd','smp','sma','d3','s1','s2','') DEFAULT '',
keterangan TEXT,
status ENUM('aktif','nonaktif') DEFAULT 'aktif',
pelapor VARCHAR(150),
no_laporan VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS anggota_keluarga (
id INT AUTO_INCREMENT PRIMARY KEY,
warga_id INT NOT NULL,
nama VARCHAR(150) NOT NULL,
usia INT DEFAULT 0,
hubungan VARCHAR(50) DEFAULT 'Anak',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE CASCADE
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS riwayat_penyakit (
id INT AUTO_INCREMENT PRIMARY KEY,
anggota_id INT NOT NULL,
penyakit ENUM('hipertensi','diabetes','tbc','asma','stroke','jantung','odgj','stunting','kanker') NOT NULL,
FOREIGN KEY (anggota_id) REFERENCES anggota_keluarga(id) ON DELETE CASCADE
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS histori_bantuan (
id INT AUTO_INCREMENT PRIMARY KEY,
warga_id INT NOT NULL,
tanggal DATE NOT NULL,
jenis VARCHAR(50) NOT NULL,
nominal BIGINT DEFAULT 0,
sumber_dana VARCHAR(100),
keterangan TEXT,
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE CASCADE,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS laporan (
id INT AUTO_INCREMENT PRIMARY KEY,
no_laporan VARCHAR(20) NOT NULL UNIQUE,
nama_pelapor VARCHAR(100),
hp_pelapor VARCHAR(20),
nama_dilaporkan VARCHAR(150) NOT NULL,
nik VARCHAR(16),
kelurahan_id INT,
kategori ENUM('sangat_miskin','miskin','hampir_miskin') NOT NULL,
jumlah_anggota INT DEFAULT 0,
penghasilan BIGINT DEFAULT 0,
keterangan TEXT NOT NULL,
lat DECIMAL(10,7),
lng DECIMAL(10,7),
status ENUM('menunggu','disetujui','ditolak') DEFAULT 'menunggu',
warga_id INT,
approved_by INT,
tgl_laporan DATE NOT NULL,
tgl_proses TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL,
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE SET NULL,
FOREIGN KEY (approved_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB",
"CREATE TABLE IF NOT EXISTS fasilitas_umum (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
kategori VARCHAR(50) NOT NULL,
lat DECIMAL(10,7) NOT NULL,
lng DECIMAL(10,7) NOT NULL,
alamat TEXT,
keterangan TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB",
"INSERT IGNORE INTO users (username, password, role, jabatan, can_edit, is_admin, is_wali) VALUES
('admin', '\$2y\$10\$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 'Kadis Sosial', 1, 1, 0),
('petugas', '\$2y\$10\$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'petugas', 'Staf Verifikasi', 1, 0, 0),
('walikota', '\$2y\$10\$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'walikota', 'Walikota Pontianak', 0, 0, 1),
('viewer', '\$2y\$10\$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'viewer', 'Pemangku Kepentingan', 0, 0, 0)",
"INSERT IGNORE INTO kelurahan (nama, kecamatan) VALUES
('Kel. Tengah', 'Pontianak Kota'),('Kel. Darat Sekip', 'Pontianak Kota'),
('Kel. Sungai Bangkong', 'Pontianak Kota'),('Kel. Mariana', 'Pontianak Kota'),
('Kel. Sungai Jawi', 'Pontianak Kota'),('Kel. Parit Tokaya', 'Pontianak Selatan'),
('Kel. Benua Melayu Darat', 'Pontianak Selatan'),('Kel. Benua Melayu Laut', 'Pontianak Selatan'),
('Kel. Kota Baru', 'Pontianak Selatan'),('Kel. Sungai Beliung', 'Pontianak Barat'),
('Kel. Pal Lima', 'Pontianak Barat'),('Kel. Akcaya', 'Pontianak Barat'),
('Kel. Sungai Jawi Luar', 'Pontianak Barat'),('Kel. Siantan Hulu', 'Pontianak Utara'),
('Kel. Batu Layang', 'Pontianak Utara'),('Kel. Saigon', 'Pontianak Utara'),
('Kel. Siantan Hilir', 'Pontianak Utara'),('Kel. Tanjung Hulu', 'Pontianak Timur'),
('Kel. Banjar Serasan', 'Pontianak Timur'),('Kel. Dalam Bugis', 'Pontianak Timur'),
('Kel. Bangka Belitung Darat', 'Pontianak Tenggara'),('Kel. Bangka Belitung Laut', 'Pontianak Tenggara'),
('Kel. Bansir Laut', 'Pontianak Tenggara'),('Kel. Bansir Darat', 'Pontianak Tenggara')",
"INSERT IGNORE INTO rumah_ibadah (nama, tipe, ikon, lat, lng, kapasitas, kelurahan_id, alamat) VALUES
('Masjid Al-Ikhlas','masjid','🕌',-0.0180000,109.3320000,150,4,'Jl. Mariana, Pontianak Kota'),
('Masjid Raya Mujahidin','masjid','🕌',-0.0428000,109.3373000,500,12,'Jl. Jend. Ahmad Yani, Pontianak Selatan'),
('Masjid Jami Sultan','masjid','🕌',-0.0400000,109.3440000,300,20,'Jl. Tanjungpura, Pontianak Timur'),
('Masjid Nurul Hidayah','masjid','🕌',-0.0100000,109.3360000,100,14,'Jl. Siantan Hulu, Pontianak Utara'),
('Gereja GPIB Immanuel','gereja','⛪',-0.0130000,109.3480000,200,14,'Jl. Sisingamangaraja, Pontianak Utara'),
('Gereja Bethel Indonesia','gereja','⛪',-0.0300000,109.3370000,180,6,'Jl. Parit Tokaya, Pontianak Selatan'),
('Gereja Katedral','gereja','⛪',-0.0350000,109.3620000,350,15,'Jl. Diponegoro, Pontianak Utara'),
('Pura Girinatha','pura','🛕',-0.0220000,109.3550000,80,3,'Jl. Sungai Bangkong, Pontianak Kota'),
('Vihara Bodhisatva','vihara','🏛️',-0.0080000,109.3400000,60,14,'Jl. Siantan, Pontianak Utara'),
('Klenteng Tua Pek Kong','klenteng','🏯',-0.0260000,109.3420000,70,1,'Jl. Diponegoro, Pontianak Kota')",
];
$ok2 = 0; $fail2 = 0;
foreach ($queries as $q) {
if ($conn->query(trim($q))) {
$ok2++;
} else {
echo "<p class='info'>⚠️ " . htmlspecialchars(substr(trim($q),0,80)) . "... → " . $conn->error . "</p>";
$fail2++;
}
}
echo "<p class='ok'>✅ geososial: $ok2 query berhasil, $fail2 gagal.</p>";
$conn->close();
echo "<hr style='border-color:#333;margin:20px 0'>";
echo "<h2 style='color:#00c9aa'>🎉 Setup Selesai!</h2>";
echo "<p>Database <b>webgis</b> dan <b>geososial</b> sudah siap digunakan.</p>";
echo "<p style='color:#f03e5a'><b>⚠️ PENTING: Segera hapus file ini setelah setup selesai!</b><br>Akses ke file ini bisa berbahaya jika dibiarkan terbuka.</p>";
echo "<p>→ <a href='/' style='color:#1a5fff'>Kembali ke Portal WebGIS</a></p>";
?>