189 lines
5.5 KiB
JavaScript
189 lines
5.5 KiB
JavaScript
// É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) {
|
|
// Activer le loader si disponible
|
|
if (typeof window.showLoader === 'function') {
|
|
window.showLoader();
|
|
}
|
|
|
|
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 result = await response.json();
|
|
|
|
// Désactiver le loader si disponible
|
|
if (typeof window.hideLoader === 'function') {
|
|
window.hideLoader();
|
|
}
|
|
|
|
return result;
|
|
} catch (error) {
|
|
// Désactiver le loader en cas d'erreur
|
|
if (typeof window.hideLoader === 'function') {
|
|
window.hideLoader();
|
|
}
|
|
// Afficher l'erreur si disponible
|
|
if (typeof window.showError === 'function') {
|
|
window.showError('Erreur lors de la communication avec le serveur. Vérifiez votre connexion.');
|
|
}
|
|
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);
|
|
// Le loader est déjà géré dans fetchWithJson
|
|
}
|
|
}
|
|
|
|
// 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 contrat 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);
|
|
// Le loader est déjà géré dans fetchWithJson
|
|
}
|
|
} |