PDO::ERRMODE_EXCEPTION, 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]); } } }