security: hapus migrate.php, tambah update_passwords.php untuk reset password
This commit is contained in:
@@ -1,162 +0,0 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// MIGRATION SCRIPT — Web GIS Layer
|
||||
// Akses sekali via browser untuk membuat semua tabel
|
||||
// Hapus file ini setelah migrasi berhasil!
|
||||
// ============================================================
|
||||
require_once 'config.php';
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
$results = [];
|
||||
|
||||
function runSQL(mysqli $conn, string $label, string $sql): array {
|
||||
if ($conn->query($sql)) {
|
||||
return ['label' => $label, 'status' => 'OK', 'msg' => ''];
|
||||
} else {
|
||||
return ['label' => $label, 'status' => 'ERROR', 'msg' => $conn->error];
|
||||
}
|
||||
}
|
||||
|
||||
// ── 1. Tabel data_jalan ───────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'CREATE TABLE data_jalan', "
|
||||
CREATE TABLE IF NOT EXISTS data_jalan (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_jalan VARCHAR(150) NOT NULL,
|
||||
status_jalan ENUM('Jalan Nasional','Jalan Provinsi','Jalan Kabupaten') NOT NULL,
|
||||
panjang_m DECIMAL(12,2) DEFAULT 0.00,
|
||||
geojson LONGTEXT NOT NULL,
|
||||
keterangan TEXT DEFAULT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
// ── 2. Tabel data_parsil ──────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'CREATE TABLE data_parsil', "
|
||||
CREATE TABLE IF NOT EXISTS data_parsil (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_parsil VARCHAR(150) NOT NULL,
|
||||
status_hak ENUM('Sertifikat Hak Milik','Sertifikat Hak Guna Bangunan','Sertifikat Hak Guna Usaha','Sertifikat Hak Pakai') NOT NULL,
|
||||
luas_m2 DECIMAL(15,2) DEFAULT 0.00,
|
||||
geojson LONGTEXT NOT NULL,
|
||||
pemilik VARCHAR(150) DEFAULT NULL,
|
||||
keterangan TEXT DEFAULT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
// ── 3. Tabel data_spbu ────────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'CREATE TABLE data_spbu', "
|
||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_spbu VARCHAR(150) NOT NULL,
|
||||
telepon VARCHAR(20) DEFAULT NULL,
|
||||
buka_24jam TINYINT(1) NOT NULL DEFAULT 0,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
geojson LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
");
|
||||
|
||||
// ── 4. Data contoh: Jalan ─────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'INSERT data_jalan (sample)', "
|
||||
INSERT IGNORE INTO data_jalan (id, nama_jalan, status_jalan, panjang_m, geojson, keterangan) VALUES
|
||||
(1, 'Jl. Ahmad Yani', 'Jalan Nasional', 2100.00,
|
||||
'{\"type\":\"LineString\",\"coordinates\":[[109.3300,-0.0200],[109.3350,-0.0210],[109.3400,-0.0220]]}',
|
||||
'Jalan utama Kota Pontianak'),
|
||||
(2, 'Jl. Gajah Mada', 'Jalan Provinsi', 1450.50,
|
||||
'{\"type\":\"LineString\",\"coordinates\":[[109.3200,-0.0350],[109.3250,-0.0360],[109.3300,-0.0370]]}',
|
||||
'Penghubung pusat kota'),
|
||||
(3, 'Jl. Tanjungpura', 'Jalan Kabupaten', 870.25,
|
||||
'{\"type\":\"LineString\",\"coordinates\":[[109.3450,-0.0100],[109.3470,-0.0110],[109.3490,-0.0120]]}',
|
||||
'Jalan lingkungan')
|
||||
");
|
||||
|
||||
// ── 5. Data contoh: Parsil ────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'INSERT data_parsil (sample)', "
|
||||
INSERT IGNORE INTO data_parsil (id, nama_parsil, status_hak, luas_m2, geojson, pemilik, keterangan) VALUES
|
||||
(1, 'Parsil A-001', 'Sertifikat Hak Milik', 1200.00,
|
||||
'{\"type\":\"Polygon\",\"coordinates\":[[[109.3200,-0.0200],[109.3210,-0.0200],[109.3210,-0.0210],[109.3200,-0.0210],[109.3200,-0.0200]]]}',
|
||||
'Budi Santoso', 'Tanah kavling perumahan'),
|
||||
(2, 'Parsil B-002', 'Sertifikat Hak Guna Bangunan', 850.50,
|
||||
'{\"type\":\"Polygon\",\"coordinates\":[[[109.3220,-0.0220],[109.3230,-0.0220],[109.3230,-0.0230],[109.3220,-0.0230],[109.3220,-0.0220]]]}',
|
||||
'PT. Maju Bersama', 'Kavling komersial')
|
||||
");
|
||||
|
||||
// ── 6. Data contoh: SPBU ─────────────────────────────────────
|
||||
$results[] = runSQL($conn, 'INSERT data_spbu (sample)', "
|
||||
INSERT IGNORE INTO data_spbu (id, nama_spbu, telepon, buka_24jam, lat, lng, geojson) VALUES
|
||||
(1, 'SPBU Jl. Ahmad Yani', '0561-123456', 1, -0.0200, 109.3300,
|
||||
'{\"type\":\"Point\",\"coordinates\":[109.3300,-0.0200]}'),
|
||||
(2, 'SPBU Jl. Gajah Mada', '0561-654321', 0, -0.0350, 109.3200,
|
||||
'{\"type\":\"Point\",\"coordinates\":[109.3200,-0.0350]}'),
|
||||
(3, 'SPBU Jl. Tanjungpura', '0561-789012', 1, -0.0100, 109.3450,
|
||||
'{\"type\":\"Point\",\"coordinates\":[109.3450,-0.0100]}')
|
||||
");
|
||||
|
||||
$conn->close();
|
||||
|
||||
// ── Tampilkan hasil ───────────────────────────────────────────
|
||||
$allOk = !in_array('ERROR', array_column($results, 'status'));
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Migration — Web GIS Layer</title>
|
||||
<style>
|
||||
body { font-family: 'Segoe UI', sans-serif; background: #0d1117; color: #e6edf3; padding: 40px; max-width: 700px; margin: auto; }
|
||||
h1 { color: #58a6ff; margin-bottom: 8px; }
|
||||
p.sub { color: #8b949e; margin-bottom: 30px; }
|
||||
.card { background: #161b22; border: 1px solid #30363d; border-radius: 10px; padding: 20px; margin-bottom: 12px; display: flex; align-items: center; gap: 16px; }
|
||||
.badge { padding: 4px 14px; border-radius: 20px; font-size: .8rem; font-weight: 700; }
|
||||
.ok { background: rgba(63,185,80,.15); color: #3fb950; border: 1px solid rgba(63,185,80,.4); }
|
||||
.err { background: rgba(248,81,73,.15); color: #f85149; border: 1px solid rgba(248,81,73,.4); }
|
||||
.label { flex: 1; font-size: .9rem; }
|
||||
.msg { font-size: .75rem; color: #f85149; margin-top: 4px; }
|
||||
.result-box { margin-top: 28px; padding: 20px; border-radius: 10px; text-align: center; }
|
||||
.result-ok { background: rgba(63,185,80,.1); border: 1px solid rgba(63,185,80,.3); }
|
||||
.result-err { background: rgba(248,81,73,.1); border: 1px solid rgba(248,81,73,.3); }
|
||||
.result-ok h2 { color: #3fb950; }
|
||||
.result-err h2 { color: #f85149; }
|
||||
.btn { display: inline-block; margin-top: 16px; padding: 10px 28px; background: #388bfd; color: #fff; border-radius: 8px; text-decoration: none; font-weight: 600; }
|
||||
.warn { background: rgba(210,153,34,.1); border: 1px solid rgba(210,153,34,.3); color: #d29922; border-radius: 8px; padding: 12px 16px; margin-top: 16px; font-size: .84rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🚀 Migration — Web GIS Layer</h1>
|
||||
<p class="sub">Membuat tabel dan data contoh di database <code>default</code></p>
|
||||
|
||||
<?php foreach ($results as $r): ?>
|
||||
<div class="card">
|
||||
<span class="badge <?= $r['status'] === 'OK' ? 'ok' : 'err' ?>"><?= $r['status'] ?></span>
|
||||
<div class="label">
|
||||
<?= htmlspecialchars($r['label']) ?>
|
||||
<?php if ($r['msg']): ?><div class="msg">⚠ <?= htmlspecialchars($r['msg']) ?></div><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<div class="result-box <?= $allOk ? 'result-ok' : 'result-err' ?>">
|
||||
<?php if ($allOk): ?>
|
||||
<h2>✅ Migrasi Berhasil!</h2>
|
||||
<p>Semua tabel berhasil dibuat. Aplikasi WebGIS siap digunakan.</p>
|
||||
<a href="index.html" class="btn">Buka Aplikasi →</a>
|
||||
<?php else: ?>
|
||||
<h2>❌ Ada Error</h2>
|
||||
<p>Beberapa langkah gagal. Periksa pesan error di atas.</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($allOk): ?>
|
||||
<div class="warn">
|
||||
⚠️ <strong>PENTING:</strong> Hapus file <code>migrate.php</code> setelah migrasi berhasil untuk keamanan!
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,273 +0,0 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// MIGRATION SCRIPT — Web GIS Rumah Ibadah
|
||||
// Akses sekali via browser untuk membuat semua tabel + seed data
|
||||
// Hapus file ini setelah migrasi berhasil!
|
||||
// ============================================================
|
||||
|
||||
// Koneksi langsung (tidak pakai config.php agar tidak ada konflik header)
|
||||
$host = getenv('DB_HOST') ?: 'vg4so4ccs0444o4cgkssgos8';
|
||||
$port = getenv('DB_PORT') ?: 3306;
|
||||
$db = getenv('DB_NAME') ?: 'default';
|
||||
$user = getenv('DB_USER') ?: 'mysql';
|
||||
$pass = getenv('DB_PASS') ?: 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL';
|
||||
|
||||
$conn = new mysqli($host, $user, $pass, $db, (int)$port);
|
||||
if ($conn->connect_error) {
|
||||
die('<h2 style="color:red">Koneksi gagal: ' . $conn->connect_error . '</h2>');
|
||||
}
|
||||
$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'));
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Migration — Web GIS Rumah Ibadah</title>
|
||||
<style>
|
||||
body { font-family:'Segoe UI',sans-serif; background:#0d1117; color:#e6edf3; padding:40px; max-width:750px; margin:auto; }
|
||||
h1 { color:#a855f7; margin-bottom:6px; }
|
||||
p.sub { color:#8b949e; margin-bottom:28px; }
|
||||
.card { background:#161b22; border:1px solid #30363d; border-radius:10px; padding:16px 20px; margin-bottom:10px; display:flex; align-items:flex-start; gap:16px; }
|
||||
.badge { padding:3px 12px; border-radius:20px; font-size:.78rem; font-weight:700; white-space:nowrap; margin-top:2px; }
|
||||
.ok { background:rgba(63,185,80,.15); color:#3fb950; border:1px solid rgba(63,185,80,.4); }
|
||||
.err { background:rgba(248,81,73,.15); color:#f85149; border:1px solid rgba(248,81,73,.4); }
|
||||
.label { flex:1; font-size:.88rem; }
|
||||
.msg { font-size:.74rem; color:#f85149; margin-top:5px; font-family:monospace; }
|
||||
.result-box { margin-top:28px; padding:24px; border-radius:12px; text-align:center; }
|
||||
.result-ok { background:rgba(63,185,80,.08); border:1px solid rgba(63,185,80,.3); }
|
||||
.result-err { background:rgba(248,81,73,.08); border:1px solid rgba(248,81,73,.3); }
|
||||
.result-ok h2 { color:#3fb950; } .result-err h2 { color:#f85149; }
|
||||
.btn { display:inline-block; margin-top:16px; padding:10px 28px; background:#a855f7; color:#fff; border-radius:8px; text-decoration:none; font-weight:600; }
|
||||
.warn { background:rgba(210,153,34,.1); border:1px solid rgba(210,153,34,.3); color:#d29922; border-radius:8px; padding:14px 18px; margin-top:16px; font-size:.84rem; line-height:1.6; }
|
||||
.accounts { background:#161b22; border:1px solid #30363d; border-radius:10px; padding:18px 20px; margin-top:20px; }
|
||||
.accounts h3 { color:#58a6ff; margin:0 0 12px; font-size:.9rem; }
|
||||
table { width:100%; font-size:.82rem; border-collapse:collapse; }
|
||||
td,th { padding:6px 10px; border-bottom:1px solid #21262d; text-align:left; }
|
||||
th { color:#8b949e; font-weight:600; }
|
||||
code { background:#21262d; padding:2px 7px; border-radius:4px; font-size:.78rem; color:#79c0ff; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🕌 Migration — Web GIS Rumah Ibadah</h1>
|
||||
<p class="sub">Membuat tabel dan seed data di database <code>default</code></p>
|
||||
|
||||
<?php foreach ($results as $r): ?>
|
||||
<div class="card">
|
||||
<span class="badge <?= $r['status']==='OK'?'ok':'err' ?>"><?= $r['status'] ?></span>
|
||||
<div class="label">
|
||||
<?= htmlspecialchars($r['label']) ?>
|
||||
<?php if($r['msg']): ?><div class="msg">⚠ <?= htmlspecialchars($r['msg']) ?></div><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<div class="result-box <?= $allOk?'result-ok':'result-err' ?>">
|
||||
<?php if($allOk): ?>
|
||||
<h2>✅ Migrasi Berhasil!</h2>
|
||||
<p>Semua tabel dan data seed berhasil dibuat.</p>
|
||||
<a href="index.html" class="btn">Buka Aplikasi →</a>
|
||||
<?php else: ?>
|
||||
<h2>❌ Ada Error</h2>
|
||||
<p>Periksa pesan error di atas dan coba lagi.</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if($allOk): ?>
|
||||
<div class="accounts">
|
||||
<h3>🔑 Akun Demo</h3>
|
||||
<table>
|
||||
<tr><th>Role</th><th>Username</th><th>Password</th></tr>
|
||||
<tr><td>Admin</td><td><code>admin</code></td><td><code>admin123</code></td></tr>
|
||||
<tr><td>Walikota</td><td><code>walikota</code></td><td><code>admin123</code></td></tr>
|
||||
<tr><td>Pengurus Masjid</td><td><code>RI-MSJ-4821</code></td><td><code>pengurus123</code></td></tr>
|
||||
<tr><td>Pengurus Gereja</td><td><code>RI-GRJ-7153</code></td><td><code>pengurus123</code></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="warn">
|
||||
⚠️ <strong>PENTING:</strong> Segera hapus file <code>migrate.php</code> setelah migrasi berhasil untuk keamanan sistem!
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// UPDATE PASSWORDS — Web GIS Rumah Ibadah
|
||||
// Ganti semua password akun menjadi "password"
|
||||
// HAPUS file ini setelah selesai!
|
||||
// ============================================================
|
||||
|
||||
$host = getenv('DB_HOST') ?: 'vg4so4ccs0444o4cgkssgos8';
|
||||
$port = getenv('DB_PORT') ?: 3306;
|
||||
$db = getenv('DB_NAME') ?: 'default';
|
||||
$user = getenv('DB_USER') ?: 'mysql';
|
||||
$pass = getenv('DB_PASS') ?: 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL';
|
||||
|
||||
$conn = new mysqli($host, $user, $pass, $db, (int)$port);
|
||||
if ($conn->connect_error) {
|
||||
die('<h2 style="color:red">Koneksi gagal: ' . $conn->connect_error . '</h2>');
|
||||
}
|
||||
$conn->set_charset('utf8mb4');
|
||||
|
||||
$newHash = password_hash('password', PASSWORD_DEFAULT);
|
||||
$results = [];
|
||||
|
||||
// ── Update tabel users (admin + walikota) ────────────────────
|
||||
$stmt = $conn->prepare("UPDATE users SET password = ?");
|
||||
$stmt->bind_param('s', $newHash);
|
||||
if ($stmt->execute()) {
|
||||
$results[] = ['label' => 'UPDATE users (admin, walikota)', 'status' => 'OK', 'rows' => $stmt->affected_rows, 'msg' => ''];
|
||||
} else {
|
||||
$results[] = ['label' => 'UPDATE users', 'status' => 'ERROR', 'rows' => 0, 'msg' => $conn->error];
|
||||
}
|
||||
|
||||
// ── Update tabel rumah_ibadah (password_pengurus) ────────────
|
||||
$stmt2 = $conn->prepare("UPDATE rumah_ibadah SET password_pengurus = ?");
|
||||
$stmt2->bind_param('s', $newHash);
|
||||
if ($stmt2->execute()) {
|
||||
$results[] = ['label' => 'UPDATE rumah_ibadah (RI-MSJ-4821, RI-GRJ-7153)', 'status' => 'OK', 'rows' => $stmt2->affected_rows, 'msg' => ''];
|
||||
} else {
|
||||
$results[] = ['label' => 'UPDATE rumah_ibadah', 'status' => 'ERROR', 'rows' => 0, 'msg' => $conn->error];
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
|
||||
$allOk = !in_array('ERROR', array_column($results, 'status'));
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Update Passwords — Web GIS Rumah Ibadah</title>
|
||||
<style>
|
||||
body { font-family:'Segoe UI',sans-serif; background:#0d1117; color:#e6edf3; padding:40px; max-width:700px; margin:auto; }
|
||||
h1 { color:#a855f7; margin-bottom:6px; }
|
||||
p.sub { color:#8b949e; margin-bottom:28px; }
|
||||
.card { background:#161b22; border:1px solid #30363d; border-radius:10px; padding:16px 20px; margin-bottom:10px; display:flex; align-items:center; gap:16px; }
|
||||
.badge { padding:3px 12px; border-radius:20px; font-size:.78rem; font-weight:700; white-space:nowrap; }
|
||||
.ok { background:rgba(63,185,80,.15); color:#3fb950; border:1px solid rgba(63,185,80,.4); }
|
||||
.err { background:rgba(248,81,73,.15); color:#f85149; border:1px solid rgba(248,81,73,.4); }
|
||||
.label { flex:1; font-size:.88rem; }
|
||||
.rows { font-size:.74rem; color:#8b949e; margin-top:3px; }
|
||||
.msg { font-size:.74rem; color:#f85149; margin-top:4px; }
|
||||
.result-box { margin-top:28px; padding:24px; border-radius:12px; text-align:center; }
|
||||
.result-ok { background:rgba(63,185,80,.08); border:1px solid rgba(63,185,80,.3); }
|
||||
.result-err { background:rgba(248,81,73,.08); border:1px solid rgba(248,81,73,.3); }
|
||||
.result-ok h2 { color:#3fb950; } .result-err h2 { color:#f85149; }
|
||||
.accounts { background:#161b22; border:1px solid #30363d; border-radius:10px; padding:18px 20px; margin-top:20px; }
|
||||
.accounts h3 { color:#58a6ff; margin:0 0 12px; font-size:.9rem; }
|
||||
table { width:100%; font-size:.82rem; border-collapse:collapse; }
|
||||
td,th { padding:7px 10px; border-bottom:1px solid #21262d; text-align:left; }
|
||||
th { color:#8b949e; font-weight:600; }
|
||||
code { background:#21262d; padding:2px 7px; border-radius:4px; font-size:.78rem; color:#79c0ff; }
|
||||
.warn { background:rgba(210,153,34,.1); border:1px solid rgba(210,153,34,.3); color:#d29922; border-radius:8px; padding:14px 18px; margin-top:16px; font-size:.84rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🔑 Update Passwords</h1>
|
||||
<p class="sub">Mengganti semua password akun menjadi <code>password</code></p>
|
||||
|
||||
<?php foreach ($results as $r): ?>
|
||||
<div class="card">
|
||||
<span class="badge <?= $r['status']==='OK'?'ok':'err' ?>"><?= $r['status'] ?></span>
|
||||
<div class="label">
|
||||
<?= htmlspecialchars($r['label']) ?>
|
||||
<?php if($r['status']==='OK'): ?>
|
||||
<div class="rows"><?= $r['rows'] ?> baris diperbarui</div>
|
||||
<?php endif; ?>
|
||||
<?php if($r['msg']): ?><div class="msg">⚠ <?= htmlspecialchars($r['msg']) ?></div><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<div class="result-box <?= $allOk?'result-ok':'result-err' ?>">
|
||||
<?php if($allOk): ?>
|
||||
<h2>✅ Password Berhasil Diperbarui!</h2>
|
||||
<p>Semua akun sekarang menggunakan password <code>password</code></p>
|
||||
<?php else: ?>
|
||||
<h2>❌ Ada Error</h2>
|
||||
<p>Periksa pesan error di atas.</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if($allOk): ?>
|
||||
<div class="accounts">
|
||||
<h3>🔑 Akun & Password Terbaru</h3>
|
||||
<table>
|
||||
<tr><th>Role</th><th>Username</th><th>Password Baru</th></tr>
|
||||
<tr><td>Admin</td><td><code>admin</code></td><td><code>password</code></td></tr>
|
||||
<tr><td>Walikota</td><td><code>walikota</code></td><td><code>password</code></td></tr>
|
||||
<tr><td>Pengurus Masjid</td><td><code>RI-MSJ-4821</code></td><td><code>password</code></td></tr>
|
||||
<tr><td>Pengurus Gereja</td><td><code>RI-GRJ-7153</code></td><td><code>password</code></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="warn">
|
||||
⚠️ <strong>PENTING:</strong> Hapus file <code>update_passwords.php</code> ini sekarang!
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user