diff --git a/setup_db.php b/setup_db.php new file mode 100644 index 0000000..9c537ed --- /dev/null +++ b/setup_db.php @@ -0,0 +1,257 @@ +body{font-family:monospace;background:#0b1120;color:#e0e6f0;padding:20px} .ok{color:#00c9aa} .err{color:#f03e5a} .info{color:#f59e0b} h2{color:#1a5fff}"; +echo "

🔧 WebGIS Database Installer

"; + +// Koneksi tanpa pilih database +$conn = new mysqli($host, $user, $pass); +if ($conn->connect_error) { + die("

❌ Gagal konek ke MySQL: " . $conn->connect_error . "

"); +} +echo "

✅ Koneksi ke MySQL berhasil! (Host: $host)

"; + +// ── 1. Buat database webgis ────────────────────────────────── +$conn->query("CREATE DATABASE IF NOT EXISTS webgis CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); +echo "

✅ Database webgis dibuat/sudah ada.

"; + +// ── 2. Buat database geososial ─────────────────────────────── +$conn->query("CREATE DATABASE IF NOT EXISTS geososial CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); +echo "

✅ Database geososial dibuat/sudah ada.

"; + +// ── 3. Import tabel webgis ─────────────────────────────────── +echo "

📦 Import Database SPBU (webgis)

"; +$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 "

⚠️ " . htmlspecialchars(substr($stmt,0,80)) . "... → " . $conn->error . "

"; + $fail++; + } +} +echo "

✅ webgis: $ok query berhasil, $fail gagal.

"; + +// ── 4. Import tabel geososial ──────────────────────────────── +echo "

📦 Import Database GeoSosial (geososial)

"; +$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 "

⚠️ " . htmlspecialchars(substr(trim($q),0,80)) . "... → " . $conn->error . "

"; + $fail2++; + } +} +echo "

✅ geososial: $ok2 query berhasil, $fail2 gagal.

"; + +$conn->close(); + +echo "
"; +echo "

🎉 Setup Selesai!

"; +echo "

Database webgis dan geososial sudah siap digunakan.

"; +echo "

⚠️ PENTING: Segera hapus file ini setelah setup selesai!
Akses ke file ini bisa berbahaya jika dibiarkan terbuka.

"; +echo "

Kembali ke Portal WebGIS

"; +?>