// --- Fitur Autentikasi dan Manajemen User (RBAC) --- (function() { window.currentUser = null; // Elements const authWidget = document.getElementById('authWidget'); const loginModal = document.getElementById('loginModal'); const loginUsernameInput = document.getElementById('loginUsername'); const loginPasswordInput = document.getElementById('loginPassword'); const loginSubmitBtn = document.getElementById('loginSubmitBtn'); const loginErrorMsg = document.getElementById('loginErrorMsg'); const closeLoginModal = document.getElementById('closeLoginModal'); // Startup Session Check function checkSession() { fetch('../poverty/api/check_session.php') .then(res => res.json()) .then(data => { if (data.status === 'success' && data.isLoggedIn) { window.currentUser = data.data; } else { window.currentUser = null; } updateAuthUI(); refreshAllLayers(); }) .catch(err => { console.error("Session check failed:", err); window.currentUser = null; updateAuthUI(); }); } // Update UI based on logged-in state function updateAuthUI() { if (!authWidget) return; if (window.currentUser) { // Logged In state const roleLabel = window.currentUser.role === 'admin' ? 'Admin' : 'Pengelola'; authWidget.innerHTML = `
`; document.getElementById('authLogoutBtn').addEventListener('click', logout); } else { // Logged Out state authWidget.innerHTML = ` `; document.getElementById('authLoginBtn').addEventListener('click', showLoginModal); } } function refreshAllLayers() { if (typeof loadSpbu === 'function') loadSpbu(); if (typeof loadJalan === 'function') loadJalan(); if (typeof loadParsil === 'function') loadParsil(); if (window.refreshActivePanel) window.refreshActivePanel(); } // Login Modals logic function showLoginModal() { loginUsernameInput.value = ''; loginPasswordInput.value = ''; loginErrorMsg.style.display = 'none'; loginModal.classList.add('show'); } function hideLoginModal() { loginModal.classList.remove('show'); } if (closeLoginModal) { closeLoginModal.addEventListener('click', hideLoginModal); } if (loginSubmitBtn) { loginSubmitBtn.addEventListener('click', function() { const username = loginUsernameInput.value.trim(); const password = loginPasswordInput.value; if (!username || !password) { loginErrorMsg.textContent = 'Username dan password wajib diisi'; loginErrorMsg.style.display = 'block'; return; } fetch('../poverty/api/login.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }) .then(res => res.json()) .then(data => { if (data.status === 'success') { window.currentUser = data.data; hideLoginModal(); updateAuthUI(); refreshAllLayers(); showToast('Login berhasil', 'success'); } else { loginErrorMsg.textContent = data.message || 'Login gagal'; loginErrorMsg.style.display = 'block'; } }) .catch(err => { console.error(err); loginErrorMsg.textContent = 'Koneksi ke server terputus'; loginErrorMsg.style.display = 'block'; }); }); } function logout() { fetch('../poverty/api/logout.php') .then(res => res.json()) .then(data => { window.currentUser = null; updateAuthUI(); refreshAllLayers(); showToast('Logout berhasil', 'success'); }) .catch(err => { console.error(err); showToast('Gagal logout', 'error'); }); } // Helper functions function escHtml(str) { if (!str) return ''; return String(str).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); } // Toast Notification helper function showToast(message, type = 'success') { if (typeof window.showToast === 'function') { window.showToast(message, type); return; } alert(message); } // Run session check on initialization checkSession(); })();