Files
d1041231060-WebGIS-PovertyMap/uas/koneksi.php
T
2026-06-13 13:56:43 +07:00

83 lines
5.0 KiB
PHP

<?php
if (isset($conn)) return;
if (!defined('DB_HOST')) {
$cfg = dirname(__DIR__) . '/config.php';
if (file_exists($cfg)) require_once $cfg;
}
$host = defined('DB_HOST') ? DB_HOST : (getenv('DB_HOST') ?: '127.0.0.1');
$user = defined('DB_USER') ? DB_USER : (getenv('DB_USER') ?: 'root');
$pass = defined('DB_PASS') ? DB_PASS : (getenv('DB_PASS') ?: '');
$name = defined('DB_NAME') ? DB_NAME : (getenv('DB_NAME') ?: 'db_webgis');
$port = defined('DB_PORT') ? (int)DB_PORT : (int)(getenv('DB_PORT') ?: 3306);
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$ok = @mysqli_real_connect($conn, $host, $user, $pass, $name, $port);
if (!$ok) {
header('Content-Type: application/json');
die(json_encode(['status' => 'error', 'message' => 'Koneksi DB gagal: ' . mysqli_connect_error()]));
}
mysqli_set_charset($conn, 'utf8mb4');
// Auto-setup: buat tabel jika belum ada
$setup_flag = $name . '_setup_done';
if (!isset($GLOBALS[$setup_flag])) {
$GLOBALS[$setup_flag] = true;
$conn->query("CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
nama VARCHAR(100),
role ENUM('admin','operator') DEFAULT 'operator',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)");
$conn->query("CREATE TABLE IF NOT EXISTS rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255) NOT NULL,
jenis ENUM('Masjid','Musholla','Gereja Protestan','Gereja Katolik','Pura','Vihara','Klenteng','Lainnya') DEFAULT 'Masjid',
kontak VARCHAR(100), alamat TEXT,
lat DECIMAL(10,7) NOT NULL, lng DECIMAL(10,7) NOT NULL,
radius INT DEFAULT 300,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)");
$conn->query("CREATE TABLE IF NOT EXISTS penduduk_miskin (
id INT AUTO_INCREMENT PRIMARY KEY,
kk_nama VARCHAR(255) NOT NULL, nik VARCHAR(20), alamat TEXT,
kecamatan VARCHAR(100), kelurahan VARCHAR(100),
lat DECIMAL(10,7) NOT NULL, lng DECIMAL(10,7) NOT NULL,
jumlah_anggota INT DEFAULT 1,
rumah_ibadah_id INT, jarak_meter DECIMAL(10,2),
status_bantuan ENUM('belum_dibantu','sudah_dibantu','menunggu_verifikasi') DEFAULT 'belum_dibantu',
jenis_bantuan VARCHAR(255), tanggal_bantuan DATE, bukti_file VARCHAR(255),
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
)");
$conn->query("CREATE TABLE IF NOT EXISTS anggota_keluarga (
id INT AUTO_INCREMENT PRIMARY KEY,
penduduk_id INT NOT NULL, nama VARCHAR(255) NOT NULL,
hubungan VARCHAR(50), umur INT, pekerjaan VARCHAR(100), keterangan TEXT,
FOREIGN KEY (penduduk_id) REFERENCES penduduk_miskin(id) ON DELETE CASCADE
)");
$conn->query("UPDATE users SET role='admin' WHERE role='superadmin'");
$conn->query("ALTER TABLE users MODIFY COLUMN role ENUM('admin','operator') DEFAULT 'operator'");
$count = $conn->query("SELECT COUNT(*) FROM users")->fetch_row()[0];
if ($count == 0) {
$hash = '$2y$10$Ep64LS7KEQc2jKMu.AsH.O2wKF9ku4C8Cz0z4RHahgmYbz0vMr0/.';
$conn->query("INSERT INTO users (username,password,nama,role) VALUES ('admin','$hash','Administrator','admin')");
$conn->query("INSERT INTO users (username,password,nama,role) VALUES ('operator','$hash','Operator Lapangan','operator')");
}
$conn->query("INSERT IGNORE INTO rumah_ibadah (id,nama,jenis,kontak,alamat,lat,lng,radius) VALUES
(1,'Masjid Raya Mujahidin','Masjid','0561-123456','Jl. Ahmad Yani, Pontianak',-0.0262,109.3429,500),
(2,'Gereja Katedral Santo Yosef','Gereja Katolik','0561-234567','Jl. Pattimura, Pontianak',-0.0312,109.3301,400),
(3,'Vihara Bodhisattva Karaniya Metta','Vihara','0561-345678','Jl. Tanjungpura, Pontianak',-0.0355,109.3344,350),
(4,'Pura Agung Nusantara','Pura','0561-456789','Jl. Gajah Mada, Pontianak',-0.0409,109.3221,400),
(5,'Musholla Al-Ikhlas','Musholla',NULL,'Jl. Kom Yos Sudarso, Pontianak',-0.0195,109.3553,250)");
$conn->query("INSERT IGNORE INTO penduduk_miskin (id,kk_nama,nik,alamat,lat,lng,rumah_ibadah_id,jarak_meter,status_bantuan,jenis_bantuan,tanggal_bantuan) VALUES
(1,'Ahmad Subandi','6171011234560001','Gg. Melati No.3',-0.0290,109.3410,1,312.5,'sudah_dibantu','PKH','2024-03-01'),
(2,'Siti Rahayu','6171021234560002','Jl. Budi Utomo Gg.5',-0.0278,109.3450,1,245.0,'belum_dibantu',NULL,NULL),
(3,'Budi Santoso','6171031234560003','Jl. Gusti Hamzah',-0.0320,109.3290,2,198.3,'menunggu_verifikasi',NULL,NULL),
(4,'Maria Yuliana','6171041234560004','Jl. Purnama Gg.2',-0.0350,109.3320,3,267.1,'sudah_dibantu','BPNT + PKH','2024-01-15'),
(5,'Wati Sari','6171051234560005','Jl. Kom Yos Sudarso',-0.0188,109.3561,5,89.4,'belum_dibantu',NULL,NULL)");
}