// Événement de vérification d'authentification document.addEventListener('DOMContentLoaded', function () { // Vérification de la page sur laquelle nous sommes if (window.location.pathname !== '/auth') { // Récupération du token JWT du localStorage const token = localStorage.getItem('jwtToken'); // Si pas de token, redirige vers la page d'authentification if (!token) { window.location.replace('/auth'); } else { // Si un token existe, vérification de sa validité fetch('/auth/verifyToken', { method: 'POST', headers: { 'Authorization': 'Bearer ' + token } }) .then(res => res.json()) .then(data => { // Si le token n'est pas valide, redirige vers la page d'authentification if (!data.valid) { localStorage.removeItem('jwtToken'); window.location.replace('/auth'); } }) .catch(error => { console.error('Error:', error); }); } } }); // Événement du bouton déconnexion document.addEventListener('DOMContentLoaded', function (event) { // Empêche le comportement par défaut du formulaire event.preventDefault(); const logoutBtn = document.getElementById('logoutBtn'); if (window.location.pathname === '/auth') { logoutBtn.style.display = 'none'; } else { logoutBtn.addEventListener('click', function () { // Suppression du token JWT du localStorage et redirection localStorage.removeItem('jwtToken'); window.location.replace('/auth'); }); } }); // Événement d'initialisation des Materialize content document.addEventListener('DOMContentLoaded', function () { // Init dropdown var sidenav = document.querySelectorAll('.sidenav'); M.Sidenav.init(sidenav); // Init Modal var modals = document.querySelectorAll('.modal'); M.Modal.init(modals); }); // Événement condition de groupe pour les menus document.addEventListener('DOMContentLoaded', function () { const token = localStorage.getItem('jwtToken'); if (token) { const decoded = jwt_decode(token); const userAuthGroupe = decoded.userAuthGroupe; const reportingItem = document.getElementById("reportingSidenavSelect"); const adminItem = document.getElementById("adminSidenavSelect"); // Cache par défaut reportingItem.style.display = 'none'; adminItem.style.display = 'none'; if (userAuthGroupe === 'MANAGER' || userAuthGroupe === 'ADMIN') { reportingItem.style.display = 'block'; } if (userAuthGroupe === 'ADMIN') { adminItem.style.display = 'block'; } } }); // Fonction pour extraire le numéro de parcours de l'URL function getNumParcoursFromURL() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('numParcours'); } // Fonction pour extraire le sous-menu de l'URL function getSubmenuFromURL() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('submenu'); } // Fonction pour vérifier si une valeur est nulle ou non définie function isNullOrUndefined(value) { return value === null || value === undefined; } // Fonction pour éviter la duplication du code fetch async function fetchWithJson(url, method, body = null, useLoader = true) { let loaderShown = false; if (useLoader && typeof showLoader === 'function') { showLoader(); loaderShown = true; } try { const options = { method: method, headers: { 'Content-Type': 'application/json' }, }; if (body) options.body = JSON.stringify(body); const response = await fetch(url, options); if (!response.ok) throw new Error('Réseau ou erreur serveur'); const data = await response.json(); if (loaderShown && typeof hideLoader === 'function') { hideLoader(); } return data; } catch (error) { // Toujours cacher le loader en cas d'erreur if (loaderShown && typeof hideLoader === 'function') { hideLoader(); } throw error; } } // Fonction de load du parcours en session storage async function loadParcours(numParcours) { try { const data = await fetchWithJson(`/parcours/read/${numParcours}`, 'GET'); if (data.valid) { sessionStorage.setItem('parcours', JSON.stringify(data.parcours)); } else { sessionStorage.setItem('parcours', null); sessionStorage.setItem('admins', JSON.stringify(data.admins)); console.log("Parcours introuvable"); } } catch (error) { console.error("Erreur lors de la récupération des informations parcours :", error); } } // Fonction générique de toggle function toggler(btn, div) { if (document.getElementById(btn).checked) { document.getElementById(div).style.display = 'block'; } else { document.getElementById(div).style.display = 'none'; } } // Fonction de load du parcours en session storage async function loadContrat(idContrat) { try { const data = await fetchWithJson(`/contrat/read/id/${idContrat}`, 'GET'); if (data.valid) { sessionStorage.setItem('contrat', JSON.stringify(data.contrat)); } else { sessionStorage.setItem('contrat', null); console.log("Contrat introuvable"); } } catch (error) { console.error("Erreur lors de la récupération des informations contrat :", error); } }