diff --git a/webgis-v3/api/index.php b/webgis-v3/api/index.php index 3bd625d..58329e4 100644 --- a/webgis-v3/api/index.php +++ b/webgis-v3/api/index.php @@ -94,10 +94,12 @@ switch ($method) { default: jsonError('Method tidak diizinkan',405); } -function jsonError($msg,$code=400){ - http_response_code($code); - echo json_encode(['success'=>false,'message'=>$msg]); - exit; +if (!function_exists('jsonError')) { + function jsonError($msg,$code=400){ + http_response_code($code); + echo json_encode(['success'=>false,'message'=>$msg]); + exit; + } } // ═══════════════════════════════════════════════════════════════ diff --git a/webgis-v3/config/database.php b/webgis-v3/config/database.php index 62f7581..199f3a3 100644 --- a/webgis-v3/config/database.php +++ b/webgis-v3/config/database.php @@ -14,6 +14,43 @@ function getDB(): PDO { PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); + ensureDefaultUsers($pdo); } return $pdo; } + +function ensureDefaultUsers(PDO $pdo): void { + $stmt = $pdo->query("SHOW TABLES LIKE 'user'"); + if (!$stmt->fetch()) return; + + $users = [ + ['admin', 1, 'Administrator Sistem', 'admin@webgis-ptk.id'], + ['pengurus_jami', 2, 'Ahmad Fauzi (Masjid Jami)', 'fauzi@webgis-ptk.id'], + ['pengurus_ktdr', 2, 'Romo Benediktus (Katedral)', 'romo@webgis-ptk.id'], + ['pimpinan', 3, 'Camat Pontianak Kota', 'camat@webgis-ptk.id'], + ['warga1', 4, 'Budi Santoso', 'budi@gmail.com'], + ]; + + $select = $pdo->prepare("SELECT password_hash FROM user WHERE username = ? LIMIT 1"); + $insert = $pdo->prepare( + "INSERT INTO user (id_role, username, password_hash, nama_lengkap, email, aktif) + VALUES (?, ?, ?, ?, ?, 1)" + ); + $update = $pdo->prepare( + "UPDATE user + SET id_role = ?, password_hash = ?, nama_lengkap = ?, email = ?, aktif = 1 + WHERE username = ?" + ); + + foreach ($users as [$username, $roleId, $name, $email]) { + $select->execute([$username]); + $row = $select->fetch(); + $hash = password_hash('admin123', PASSWORD_BCRYPT); + + if (!$row) { + $insert->execute([$roleId, $username, $hash, $name, $email]); + } elseif (!password_verify('admin123', $row['password_hash'])) { + $update->execute([$roleId, $hash, $name, $email, $username]); + } + } +} diff --git a/webgis-v3/sql/schema.sql b/webgis-v3/sql/schema.sql index 61311b7..0ae0886 100644 --- a/webgis-v3/sql/schema.sql +++ b/webgis-v3/sql/schema.sql @@ -292,11 +292,11 @@ CREATE TABLE `peristiwa_kependudukan` ( -- ================================================================ -- Password: admin123 (bcrypt hash contoh) INSERT INTO `user` (`id_role`,`username`,`password_hash`,`nama_lengkap`,`email`) VALUES -(1, 'admin', '$2y$10$9JkAyeakwNYcOvjtrxLeb.teP0iJCFQ9Eeru0LOfodabdjDyAXNTC', 'Administrator Sistem', 'admin@webgis-ptk.id'), -(2, 'pengurus_jami','$2y$10$9JkAyeakwNYcOvjtrxLeb.teP0iJCFQ9Eeru0LOfodabdjDyAXNTC', 'Ahmad Fauzi (Masjid Jami)', 'fauzi@webgis-ptk.id'), -(2, 'pengurus_ktdr','$2y$10$9JkAyeakwNYcOvjtrxLeb.teP0iJCFQ9Eeru0LOfodabdjDyAXNTC', 'Romo Benediktus (Katedral)', 'romo@webgis-ptk.id'), -(3, 'pimpinan', '$2y$10$9JkAyeakwNYcOvjtrxLeb.teP0iJCFQ9Eeru0LOfodabdjDyAXNTC', 'Camat Pontianak Kota', 'camat@webgis-ptk.id'), -(4, 'warga1', '$2y$10$9JkAyeakwNYcOvjtrxLeb.teP0iJCFQ9Eeru0LOfodabdjDyAXNTC', 'Budi Santoso', 'budi@gmail.com'); +(1, 'admin', '$2y$10$SCqLjlnUWWOlz6DIB8cXB.aABZyThMWfnf0facH2Lylv4jbs5NQiS', 'Administrator Sistem', 'admin@webgis-ptk.id'), +(2, 'pengurus_jami','$2y$10$SCqLjlnUWWOlz6DIB8cXB.aABZyThMWfnf0facH2Lylv4jbs5NQiS', 'Ahmad Fauzi (Masjid Jami)', 'fauzi@webgis-ptk.id'), +(2, 'pengurus_ktdr','$2y$10$SCqLjlnUWWOlz6DIB8cXB.aABZyThMWfnf0facH2Lylv4jbs5NQiS', 'Romo Benediktus (Katedral)', 'romo@webgis-ptk.id'), +(3, 'pimpinan', '$2y$10$SCqLjlnUWWOlz6DIB8cXB.aABZyThMWfnf0facH2Lylv4jbs5NQiS', 'Camat Pontianak Kota', 'camat@webgis-ptk.id'), +(4, 'warga1', '$2y$10$SCqLjlnUWWOlz6DIB8cXB.aABZyThMWfnf0facH2Lylv4jbs5NQiS', 'Budi Santoso', 'budi@gmail.com'); -- ================================================================ -- SEED DATA — Rumah Ibadah diff --git a/webgis02/index.html b/webgis02/index.html index 1b3c6be..deef9be 100644 --- a/webgis02/index.html +++ b/webgis02/index.html @@ -316,6 +316,17 @@ const layerJalan = L.layerGroup().addTo(map); const layerParsil = L.layerGroup().addTo(map); const layerRusak = L.layerGroup().addTo(map); +function parseGeojsonSafe(raw){ + try{ + const gj = typeof raw === 'string' ? JSON.parse(raw) : raw; + if(!gj || !gj.geometry || !gj.geometry.type) return null; + return gj; + }catch(e){ + console.warn('GeoJSON tidak valid:', raw); + return null; + } +} + // ============================================================= // 2. WARNA & IKON // ============================================================= @@ -688,16 +699,19 @@ async function loadJalan(q=''){ if(!data.length){ list.innerHTML='
'+(q?'Tidak ada hasil pencarian':'Belum ada data jalan')+'
'+(q?'Tidak ada hasil pencarian':'Belum ada data parsil')+'
'+(q?'Tidak ada hasil pencarian':'Belum ada data jalan rusak')+'