From 9e51c538b014ed03181c1afc23d7e4c85412e2a2 Mon Sep 17 00:00:00 2001 From: alifaisyahh Date: Thu, 11 Jun 2026 10:08:56 +0700 Subject: [PATCH] feat: tambah migrate.php untuk Web GIS Rumah Ibadah --- Web GIS Rumah Ibadah/migrate.php | 273 +++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 Web GIS Rumah Ibadah/migrate.php diff --git a/Web GIS Rumah Ibadah/migrate.php b/Web GIS Rumah Ibadah/migrate.php new file mode 100644 index 0000000..7439270 --- /dev/null +++ b/Web GIS Rumah Ibadah/migrate.php @@ -0,0 +1,273 @@ +connect_error) { + die('

Koneksi gagal: ' . $conn->connect_error . '

'); +} +$conn->set_charset('utf8mb4'); + +header('Content-Type: text/html; charset=utf-8'); + +$results = []; + +function run(mysqli $c, string $label, string $sql): array { + // Hapus komentar SQL (-- ...) agar tidak error + $sql = preg_replace('/--[^\n]*/', '', $sql); + if ($c->query($sql) === true) { + return ['label' => $label, 'status' => 'OK', 'msg' => '']; + } + return ['label' => $label, 'status' => 'ERROR', 'msg' => $c->error]; +} + +// ── DROP (urutan sesuai FK) ─────────────────────────────────── +$results[] = run($conn, 'DROP TABLE histori_bantuan', "DROP TABLE IF EXISTS histori_bantuan"); +$results[] = run($conn, 'DROP TABLE laporan_masyarakat', "DROP TABLE IF EXISTS laporan_masyarakat"); +$results[] = run($conn, 'DROP TABLE keluarga_miskin', "DROP TABLE IF EXISTS keluarga_miskin"); +$results[] = run($conn, 'DROP TABLE users', "DROP TABLE IF EXISTS users"); +$results[] = run($conn, 'DROP TABLE rumah_ibadah', "DROP TABLE IF EXISTS rumah_ibadah"); +$results[] = run($conn, 'DROP TABLE rate_limit', "DROP TABLE IF EXISTS rate_limit"); + +// ── CREATE TABLE: rumah_ibadah ──────────────────────────────── +$results[] = run($conn, 'CREATE TABLE rumah_ibadah', " + CREATE TABLE rumah_ibadah ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(200) NOT NULL, + jenis ENUM('Masjid','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL, + alamat TEXT NOT NULL, + lat DECIMAL(10,7) NOT NULL, + lng DECIMAL(10,7) NOT NULL, + radius_km FLOAT NOT NULL DEFAULT 2.0, + kode_pengurus VARCHAR(20) NULL UNIQUE, + password_pengurus VARCHAR(255) NULL, + kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur','Pontianak Barat','Pontianak Tenggara','Pontianak Kota') NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── CREATE TABLE: users ─────────────────────────────────────── +$results[] = run($conn, 'CREATE TABLE users', " + CREATE TABLE users ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(150) NOT NULL, + username VARCHAR(100) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + role ENUM('admin','pengurus','walikota') NOT NULL DEFAULT 'pengurus', + rumah_ibadah_id INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── CREATE TABLE: keluarga_miskin ───────────────────────────── +$results[] = run($conn, 'CREATE TABLE keluarga_miskin', " + CREATE TABLE keluarga_miskin ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + nik VARCHAR(20) NOT NULL UNIQUE, + nama_kepala_keluarga VARCHAR(200) NOT NULL, + tanggal_lahir DATE NULL, + pendidikan ENUM('Tidak Sekolah','SD','SMP','SMA','D3','S1','S2/S3') NOT NULL DEFAULT 'Tidak Sekolah', + jumlah_anggota INT NOT NULL DEFAULT 1, + alamat TEXT NOT NULL, + kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur','Pontianak Barat','Pontianak Tenggara','Pontianak Kota') NOT NULL, + lat DECIMAL(10,7) NOT NULL, + lng DECIMAL(10,7) NOT NULL, + tingkat_kemiskinan ENUM('Sangat Miskin','Miskin','Hampir Miskin') NOT NULL DEFAULT 'Miskin', + status_dtks ENUM('Terdaftar DTKS','Belum DTKS','Sedang Diusulkan') NOT NULL DEFAULT 'Belum DTKS', + riwayat_penyakit JSON NULL, + rumah_ibadah_id INT DEFAULT NULL, + jarak_ke_ibadah FLOAT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── CREATE TABLE: laporan_masyarakat ────────────────────────── +$results[] = run($conn, 'CREATE TABLE laporan_masyarakat', " + CREATE TABLE laporan_masyarakat ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + nama_terlapor VARCHAR(150) NULL, + nik_terlapor VARCHAR(16) NULL, + nama_pelapor VARCHAR(150) NULL, + no_hp VARCHAR(20) NULL, + alamat_terlapor TEXT NOT NULL, + lat DECIMAL(10,7) NOT NULL, + lng DECIMAL(10,7) NOT NULL, + deskripsi TEXT NOT NULL, + foto VARCHAR(255) NULL, + status ENUM('Baru','Diverifikasi','Ditolak') NOT NULL DEFAULT 'Baru', + alasan_tolak TEXT NULL, + ditangani_oleh INT NULL, + converted_to_kk_id INT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (ditangani_oleh) REFERENCES users(id) ON DELETE SET NULL, + FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── CREATE TABLE: histori_bantuan ───────────────────────────── +$results[] = run($conn, 'CREATE TABLE histori_bantuan', " + CREATE TABLE histori_bantuan ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + kk_id INT NOT NULL, + jenis_bantuan ENUM('PKH','BPNT/Sembako','Beras Bansos','KIS-PBI','Bansos Tunai Pemkot','Rutilahu','PMT Stunting','CSR Swasta','Lainnya') NOT NULL, + nominal BIGINT NOT NULL DEFAULT 0, + keterangan TEXT NULL, + tanggal_penyaluran DATE NOT NULL, + sumber_dana ENUM('APBN','APBD','CSR','Lainnya') NOT NULL DEFAULT 'APBD', + penanggung_jawab INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (kk_id) REFERENCES keluarga_miskin(id) ON DELETE CASCADE, + FOREIGN KEY (penanggung_jawab) REFERENCES users(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── CREATE TABLE: rate_limit ────────────────────────────────── +$results[] = run($conn, 'CREATE TABLE rate_limit', " + CREATE TABLE rate_limit ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + ip_address VARCHAR(45) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + INDEX idx_ip_time (ip_address, created_at) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci +"); + +// ── SEED: rumah_ibadah ──────────────────────────────────────── +$results[] = run($conn, 'SEED rumah_ibadah (2 data)', " + INSERT INTO rumah_ibadah (nama,jenis,alamat,lat,lng,radius_km,kode_pengurus,password_pengurus,kecamatan) VALUES + ('Masjid Raya Mujahidin','Masjid','Jl. Ahmad Yani No. 1, Pontianak Tenggara', + -0.0263330,109.3425200,2.5,'RI-MSJ-4821', + '\$2y\$10\$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG', + 'Pontianak Tenggara'), + ('Gereja Katedral Santo Yosef','Gereja','Jl. Diponegoro No. 120, Pontianak Kota', + -0.0380000,109.3422000,2.0,'RI-GRJ-7153', + '\$2y\$10\$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG', + 'Pontianak Kota') +"); + +// ── SEED: users (admin + walikota) ──────────────────────────── +$results[] = run($conn, 'SEED users (admin, walikota)', " + INSERT INTO users (nama,username,password,role,rumah_ibadah_id) VALUES + ('Administrator Sistem','admin', + '\$2y\$10\$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi', + 'admin',NULL), + ('Walikota Pontianak','walikota', + '\$2y\$10\$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi', + 'walikota',NULL) +"); + +// ── SEED: keluarga_miskin (5 data) ──────────────────────────── +$results[] = run($conn, 'SEED keluarga_miskin (5 data)', " + INSERT INTO keluarga_miskin + (nik,nama_kepala_keluarga,tanggal_lahir,pendidikan,jumlah_anggota,alamat,kecamatan,lat,lng,tingkat_kemiskinan,status_dtks,riwayat_penyakit,rumah_ibadah_id,jarak_ke_ibadah) + VALUES + ('6171010101010001','Budi Santoso','1978-03-15','SD',4,'Gg. Mawar No. 3, Benua Melayu Darat','Pontianak Tenggara',-0.0283000,109.3440000,'Sangat Miskin','Terdaftar DTKS','[\"Stunting\",\"Gizi Buruk\"]',1,0.2500), + ('6171010101010002','Siti Rahayu','1985-07-22','SMP',6,'Jl. Merdeka Gg. 5 No. 7, Mariana','Pontianak Kota',-0.0370000,109.3430000,'Miskin','Terdaftar DTKS','[\"TBC\",\"Hipertensi\"]',2,0.1200), + ('6171010101010003','Wayan Dharma','1972-11-08','Tidak Sekolah',3,'Gg. Bali No. 2, Bansir Laut','Pontianak Tenggara',-0.0290000,109.3410000,'Sangat Miskin','Belum DTKS','[\"Diabetes\",\"Hipertensi\",\"ODGJ\"]',1,0.3400), + ('6171010101010004','Ahmad Fauzan','1990-01-30','SMA',5,'Jl. Tanjungpura Gg. 12, Parit Tokaya','Pontianak Selatan',-0.0310000,109.3350000,'Miskin','Sedang Diusulkan','[\"Stunting\"]',NULL,NULL), + ('6171010101010005','Ruslan Effendi','1968-09-05','SD',7,'Jl. Sutan Syahrir Gg. Melati, Batu Layang','Pontianak Utara',-0.0200000,109.3460000,'Hampir Miskin','Terdaftar DTKS','[\"Jantung\",\"DBD\"]',1,0.7800) +"); + +// ── SEED: laporan_masyarakat ────────────────────────────────── +$results[] = run($conn, 'SEED laporan_masyarakat (1 data)', " + INSERT INTO laporan_masyarakat (nama_pelapor,no_hp,alamat_terlapor,lat,lng,deskripsi,status) VALUES + ('Pak RT 03','081234567890','Gg. Flamboyan No. 5, Pontianak Tenggara', + -0.0275000,109.3435000, + 'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.', + 'Baru') +"); + +// ── SEED: histori_bantuan ───────────────────────────────────── +$results[] = run($conn, 'SEED histori_bantuan (2 data)', " + INSERT INTO histori_bantuan (kk_id,jenis_bantuan,nominal,keterangan,tanggal_penyaluran,sumber_dana,penanggung_jawab) VALUES + (1,'PKH',3000000,'Bantuan tahap I tahun 2026','2026-01-15','APBN',1), + (2,'BPNT/Sembako',0,'10 kg beras + minyak goreng','2026-02-20','APBN',1) +"); + +$conn->close(); + +$allOk = !in_array('ERROR', array_column($results, 'status')); +?> + + + + +Migration — Web GIS Rumah Ibadah + + + +

🕌 Migration — Web GIS Rumah Ibadah

+

Membuat tabel dan seed data di database default

+ + +
+ +
+ +
+
+
+ + +
+ +

✅ Migrasi Berhasil!

+

Semua tabel dan data seed berhasil dibuat.

+ Buka Aplikasi → + +

❌ Ada Error

+

Periksa pesan error di atas dan coba lagi.

+ +
+ + +
+

🔑 Akun Demo

+ + + + + + +
RoleUsernamePassword
Adminadminadmin123
Walikotawalikotaadmin123
Pengurus MasjidRI-MSJ-4821pengurus123
Pengurus GerejaRI-GRJ-7153pengurus123
+
+
+ ⚠️ PENTING: Segera hapus file migrate.php setelah migrasi berhasil untuk keamanan sistem! +
+ + +