258 lines
12 KiB
PHP
258 lines
12 KiB
PHP
<?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>";
|
|
?>
|