connect_error) { die("Error: Koneksi database gagal. Silakan periksa kredensial di db.php."); } // Buat database jika belum ada $conn->query("CREATE DATABASE IF NOT EXISTS `$db_name`"); $conn->select_db($db_name); // AUTO MIGRATIONS (Mencegah Error saat Deploy di Server Baru) $queries = [ "CREATE TABLE IF NOT EXISTS warga ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(150), jumlah_kk INT, alamat TEXT, latitude VARCHAR(50), longitude VARCHAR(50), tanggal_lahir DATE NULL, pendidikan VARCHAR(100) NULL, riwayat_penyakit TEXT NULL, status_bantuan ENUM('Sudah', 'Belum') DEFAULT 'Belum', histori_bantuan TEXT NULL )", "CREATE TABLE IF NOT EXISTS rumah_ibadah ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(150), jenis VARCHAR(50) DEFAULT 'Masjid', pic VARCHAR(100), alamat TEXT, latitude VARCHAR(50), longitude VARCHAR(50) )", "CREATE TABLE IF NOT EXISTS pelaporan ( id INT AUTO_INCREMENT PRIMARY KEY, nama_pelapor VARCHAR(100), isi_laporan TEXT, latitude VARCHAR(50), longitude VARCHAR(50), waktu TIMESTAMP DEFAULT CURRENT_TIMESTAMP )", "CREATE TABLE IF NOT EXISTS spbu ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(150), no_hp VARCHAR(20), kategori ENUM('24jam', 'Tidak 24jam') DEFAULT '24jam', latitude VARCHAR(50), longitude VARCHAR(50) )", "CREATE TABLE IF NOT EXISTS jalan ( id INT AUTO_INCREMENT PRIMARY KEY, nama_jalan VARCHAR(150), status_jalan ENUM('Nasional', 'Provinsi', 'Kabupaten'), panjang_m FLOAT, koordinat TEXT )", "CREATE TABLE IF NOT EXISTS parsil ( id INT AUTO_INCREMENT PRIMARY KEY, nama_pemilik VARCHAR(150), status_hak ENUM('SHM', 'HGB', 'HGU', 'HP'), koordinat TEXT )", "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', 'warga') DEFAULT 'warga', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )" ]; foreach ($queries as $q) { $conn->query($q); } // Alter warga jika belum ada field tambahan $cols = $conn->query("SHOW COLUMNS FROM warga LIKE 'tanggal_lahir'"); if($cols && $cols->num_rows == 0) { $conn->query("ALTER TABLE warga ADD COLUMN tanggal_lahir DATE NULL"); $conn->query("ALTER TABLE warga ADD COLUMN pendidikan VARCHAR(100) NULL"); $conn->query("ALTER TABLE warga ADD COLUMN riwayat_penyakit TEXT NULL"); $conn->query("ALTER TABLE warga ADD COLUMN histori_bantuan TEXT NULL"); } $cols_status = $conn->query("SHOW COLUMNS FROM warga LIKE 'status_bantuan'"); if($cols_status && $cols_status->num_rows == 0) { $conn->query("ALTER TABLE warga ADD COLUMN status_bantuan ENUM('Sudah', 'Belum') DEFAULT 'Belum' AFTER riwayat_penyakit"); } // Alter spbu jika menggunakan schema lama $cols_spbu = $conn->query("SHOW COLUMNS FROM spbu LIKE 'kategori'"); if($cols_spbu && $cols_spbu->num_rows == 0) { $conn->query("ALTER TABLE spbu CHANGE nama_spbu nama VARCHAR(150)"); $conn->query("ALTER TABLE spbu ADD COLUMN kategori ENUM('24jam', 'Tidak 24jam') DEFAULT '24jam'"); $conn->query("ALTER TABLE spbu DROP COLUMN is_24jam"); } else { // Ubah definisi ENUM dan update data yang lama jika terlanjur menggunakan Aman/Tidak Aman $conn->query("ALTER TABLE spbu MODIFY COLUMN kategori ENUM('Aman', 'Tidak Aman', '24jam', 'Tidak 24jam')"); $conn->query("UPDATE spbu SET kategori = '24jam' WHERE kategori = 'Aman'"); $conn->query("UPDATE spbu SET kategori = 'Tidak 24jam' WHERE kategori = 'Tidak Aman'"); $conn->query("ALTER TABLE spbu MODIFY COLUMN kategori ENUM('24jam', 'Tidak 24jam') DEFAULT '24jam'"); } // Tambahkan kolom jenis di rumah_ibadah jika belum ada (Migration) $check_jenis = $conn->query("SHOW COLUMNS FROM rumah_ibadah LIKE 'jenis'"); if ($check_jenis && $check_jenis->num_rows == 0) { $conn->query("ALTER TABLE rumah_ibadah ADD COLUMN jenis VARCHAR(50) DEFAULT 'Masjid' AFTER nama"); } // Alter users jika belum ada role $cols_users = $conn->query("SHOW COLUMNS FROM users LIKE 'role'"); if($cols_users && $cols_users->num_rows == 0) { $conn->query("ALTER TABLE users ADD COLUMN role ENUM('admin_infra', 'admin_sosial', 'admin', 'warga') DEFAULT 'warga' AFTER password"); } else { // Modify ENUM if it already exists to include new roles $conn->query("ALTER TABLE users MODIFY COLUMN role ENUM('admin_infra', 'admin_sosial', 'admin', 'warga') DEFAULT 'warga'"); } // Seed SPBU data if empty $check_spbu = $conn->query("SELECT COUNT(*) as count FROM spbu"); if ($check_spbu) { $row = $check_spbu->fetch_assoc(); if ($row['count'] == 0) { $conn->query("INSERT INTO spbu (nama, no_hp, kategori, latitude, longitude) VALUES ('SPBU Jl. Imam Bonjol', '08110000001', '24jam', '-0.0400', '109.3490'), ('SPBU Kota Baru (Prof. M. Yamin)', '08110000002', '24jam', '-0.0460', '109.3240'), ('SPBU Jl. Tanjungpura', '08110000003', '24jam', '-0.0305', '109.3444'), ('SPBU Jl. Merdeka', '08110000004', '24jam', '-0.0267', '109.3361'), ('SPBU 28 Oktober', '08110000008', '24jam', '-0.0031', '109.3667'), ('SPBU Samping Makodam', '08110000009', '24jam', '-0.0890', '109.3800'), ('SPBU Jl. A. Yani (Samping DPRD)', '08110000005', 'Tidak 24jam', '-0.0520', '109.3410'), ('SPBU RE. Martadinata', '08110000006', 'Tidak 24jam', '-0.0160', '109.3105'), ('SPBU Gusti Hamzah', '08110000007', 'Tidak 24jam', '-0.0350', '109.3225')"); } } // Seed Jalan data if empty $check_jalan = $conn->query("SELECT COUNT(*) as count FROM jalan"); if ($check_jalan) { $row = $check_jalan->fetch_assoc(); if ($row['count'] == 0) { $jalan1 = '[{"lat":-0.0528,"lng":109.3409},{"lat":-0.0556,"lng":109.3432},{"lat":-0.0601,"lng":109.3463}]'; $jalan2 = '[{"lat":-0.0343,"lng":109.3431},{"lat":-0.0308,"lng":109.3411}]'; $conn->query("INSERT INTO jalan (nama_jalan, status_jalan, panjang_m, koordinat) VALUES ('Jl. Jenderal Ahmad Yani', 'Nasional', 1200, '$jalan1'), ('Jl. Gajah Mada', 'Provinsi', 800, '$jalan2')"); } } // Seed Parsil data if empty $check_parsil = $conn->query("SELECT COUNT(*) as count FROM parsil"); if ($check_parsil) { $row = $check_parsil->fetch_assoc(); if ($row['count'] == 0) { $parsil1 = '[{"lat":-0.0520,"lng":109.3400},{"lat":-0.0520,"lng":109.3415},{"lat":-0.0535,"lng":109.3415},{"lat":-0.0535,"lng":109.3400}]'; $parsil2 = '[{"lat":-0.0468,"lng":109.3361},{"lat":-0.0468,"lng":109.3385},{"lat":-0.0487,"lng":109.3385},{"lat":-0.0487,"lng":109.3361}]'; $conn->query("INSERT INTO parsil (nama_pemilik, status_hak, koordinat) VALUES ('Kompleks Kantor Gubernur Kalbar', 'HP', '$parsil1'), ('Area Masjid Raya Mujahidin', 'SHM', '$parsil2')"); } } // Seed Masjid data if empty $check_masjid = $conn->query("SELECT COUNT(*) as count FROM rumah_ibadah"); if ($check_masjid) { $row = $check_masjid->fetch_assoc(); if ($row['count'] == 0) { $conn->query("INSERT INTO rumah_ibadah (nama, jenis, pic, alamat, latitude, longitude) VALUES ('Masjid Raya Mujahidin', 'Masjid', 'Bapak Ahmad', 'Jl. Jenderal Ahmad Yani, Pontianak Selatan', '-0.0468', '109.3361'), ('Masjid Jami Keraton Kadriyah', 'Masjid', 'Bapak Syarif', 'Beting, Pontianak Timur', '-0.0215', '109.3528'), ('Masjid Darul Falah', 'Masjid', 'Bapak Budi', 'Jl. H. Rais A. Rahman', '-0.0354', '109.3242'), ('Gereja Katedral St. Yosef', 'Gereja', 'Romo Yohanes', 'Jl. Pattimura, Pontianak Kota', '-0.0385', '109.3400'), ('Vihara Bodhisatva Karaniya Metta', 'Vihara', 'Bapak Ahong', 'Jl. Kapten Marsan, Pontianak', '-0.0250', '109.3440')"); } } // Seed Warga data if empty $check_warga = $conn->query("SELECT COUNT(*) as count FROM warga"); if ($check_warga) { $row = $check_warga->fetch_assoc(); if ($row['count'] == 0) { $conn->query("INSERT INTO warga (nama, jumlah_kk, alamat, latitude, longitude, tanggal_lahir, pendidikan, riwayat_penyakit, histori_bantuan) VALUES ('Bapak Rudi (Dekat Masjid)', 4, 'Jl. Sutoyo', '-0.0450', '109.3350', '1980-05-12', 'SMA', 'Hipertensi', 'Sembako 2025'), ('Ibu Siti (Jauh dari Fasilitas)', 3, 'Jl. Perdamaian', '-0.0650', '109.3000', '1975-08-22', 'SD', 'Asma', 'BLT 2024'), ('Bapak Ahmad (Dekat Gereja)', 5, 'Jl. Pattimura', '-0.0380', '109.3405', '1982-11-03', 'SMA', 'TBC', 'BLT 2025'), ('Ibu Aminah (Dekat Vihara)', 2, 'Jl. Kapten Marsan', '-0.0245', '109.3445', '1990-01-15', 'SMP', '', 'PKH 2026'), ('Kakek Joni (Pesisir Kapuas)', 1, 'Kawasan Pesisir', '-0.0150', '109.3300', '1955-06-30', 'Tidak Sekolah', 'Rematik', 'Raskin')"); } } // Seed Pelaporan data if empty $check_pelaporan = $conn->query("SELECT COUNT(*) as count FROM pelaporan"); if ($check_pelaporan) { $row = $check_pelaporan->fetch_assoc(); if ($row['count'] == 0) { $conn->query("INSERT INTO pelaporan (nama_pelapor, isi_laporan, latitude, longitude) VALUES ('Pak Udin', 'Banjir parah air masuk ke rumah warga hingga lutut', '-0.0500', '109.3200'), ('Ibu Rina', 'Warga lansia sakit parah butuh ambulans darurat', '-0.0400', '109.3350'), ('Anonim', 'Jalanan ambles membahayakan pengendara', '-0.0250', '109.3600')"); } } // Pastikan akun admin_infra ada $check_infra = $conn->query("SELECT * FROM users WHERE username='admin_infra'"); if ($check_infra && $check_infra->num_rows == 0) { $pw = password_hash('infra123', PASSWORD_DEFAULT); $conn->query("INSERT INTO users (username, password, role) VALUES ('admin_infra', '$pw', 'admin_infra')"); } // Pastikan akun admin_sosial ada $check_sosial = $conn->query("SELECT * FROM users WHERE username='admin_sosial'"); if ($check_sosial && $check_sosial->num_rows == 0) { $pw = password_hash('sosial123', PASSWORD_DEFAULT); $conn->query("INSERT INTO users (username, password, role) VALUES ('admin_sosial', '$pw', 'admin_sosial')"); } // Pastikan akun admin (Superadmin lama) ada $check_admin = $conn->query("SELECT * FROM users WHERE username='admin'"); if ($check_admin && $check_admin->num_rows == 0) { $default_password = password_hash('admin123', PASSWORD_DEFAULT); $conn->query("INSERT INTO users (username, password, role) VALUES ('admin', '$default_password', 'admin')"); } else { $conn->query("UPDATE users SET role='admin' WHERE username='admin' AND role='warga'"); } // Pastikan akun warga ada $check_warga = $conn->query("SELECT * FROM users WHERE username='warga'"); if ($check_warga && $check_warga->num_rows == 0) { $warga_password = password_hash('warga123', PASSWORD_DEFAULT); $conn->query("INSERT INTO users (username, password, role) VALUES ('warga', '$warga_password', 'warga')"); } ?>