connect_error) { http_response_code(500); die(json_encode([ 'status' => 'error', 'message' => 'Koneksi database gagal: ' . $conn->connect_error ])); } // Set Charset ke UTF-8 agar aman membaca data koordinat spasial/GeoJSON $conn->set_charset('utf8mb4'); // 2. DETEKSI LOKASI PATH RELATIF (Cerdas mencegah error No Such File / Wrong Redirect) if (!function_exists('getRedirectPath')) { function getRedirectPath($targetFile) { // Ambil nama folder tempat file PHP yang sedang berjalan berada $currentDir = basename(dirname($_SERVER['SCRIPT_FILENAME'])); // Jika file pengakses ada di dalam subfolder tugas (misal: tugas1_polyline, tugas2_polygon) // atau berada di dalam folder 'includes', mundurkan path satu tingkat ke luar menggunakan '../' if (strpos($currentDir, 'tugas') !== false || $currentDir === 'includes') { return '../' . $targetFile; } return $targetFile; } } // 3. FUNGSI OTENTIKASI GLOBAL (Bisa langsung dipanggil di semua folder tugas Anda) if (!function_exists('cekLogin')) { function cekLogin() { if (session_status() === PHP_SESSION_NONE) { session_start(); } // Jika belum ada session user_id, tendang paksa ke halaman login.php dengan path yang benar if (!isset($_SESSION['user_id'])) { $loginPath = getRedirectPath('login.php'); header("Location: " . $loginPath); exit; } } } if (!function_exists('cekRole')) { function cekRole($role_wajib) { if (session_status() === PHP_SESSION_NONE) { session_start(); } // Jika role user tidak sesuai dengan kriteria halaman, tendang ke dashboard utama if (!isset($_SESSION['role']) || $_SESSION['role'] !== $role_wajib) { $dashboardPath = getRedirectPath('dashboard.php?error=unauthorized'); header("Location: " . $dashboardPath); exit; } } }