From f6ae2c7a59f3d9824eb1cd751de56bff253627ef Mon Sep 17 00:00:00 2001 From: jps Date: Tue, 20 Jan 2026 13:50:14 +0100 Subject: [PATCH] corrections bouton --- assets/js/modules/agenda-modal-buttons.js | 4 +- assets/js/modules/agenda-modal-display.js | 66 +++++++++++++++++------ assets/js/modules/agenda-modal.js | 2 +- templates/modules/modals/event-modal.php | 2 +- 4 files changed, 55 insertions(+), 19 deletions(-) diff --git a/assets/js/modules/agenda-modal-buttons.js b/assets/js/modules/agenda-modal-buttons.js index 2097945..f52fba8 100644 --- a/assets/js/modules/agenda-modal-buttons.js +++ b/assets/js/modules/agenda-modal-buttons.js @@ -264,7 +264,7 @@ export function initializeEditButton(getCurrentEventData, getCurrentMode, setCur // Mettre à jour l'affichage const userCanEdit = window.crviPermissions && window.crviPermissions.can_edit; const userCanDelete = window.crviPermissions && window.crviPermissions.can_delete; - updateModalDisplay('edit', userCanEdit, userCanDelete); + updateModalDisplay('edit', userCanEdit, userCanDelete, currentEventData); // Remplir le formulaire avec les données actuelles fillFormWithEvent(currentEventData); @@ -311,7 +311,7 @@ export function initializeCancelButton(getCurrentEventData, getCurrentMode, setC const userCanEdit = window.crviPermissions && window.crviPermissions.can_edit; const userCanDelete = window.crviPermissions && window.crviPermissions.can_delete; - updateModalDisplay('view', userCanEdit, userCanDelete); + updateModalDisplay('view', userCanEdit, userCanDelete, currentEventData); // Réafficher les données en mode lecture fillViewBlock(currentEventData); diff --git a/assets/js/modules/agenda-modal-display.js b/assets/js/modules/agenda-modal-display.js index e0ef84b..018eb10 100644 --- a/assets/js/modules/agenda-modal-display.js +++ b/assets/js/modules/agenda-modal-display.js @@ -222,44 +222,80 @@ export function fillViewBlock(event) { * @param {string} mode - Mode actuel ('view', 'edit', 'create') * @param {boolean} canEdit - Permission d'édition * @param {boolean} canDelete - Permission de suppression + * @param {Object} eventData - Données de l'événement (optionnel) */ -export function updateModalDisplay(mode, canEdit, canDelete) { +export function updateModalDisplay(mode, canEdit, canDelete, eventData = null) { const viewBlock = document.getElementById('eventViewBlock'); const formBlock = document.getElementById('eventForm'); + const statusButtons = document.getElementById('eventStatusButtons'); + const viewFooter = document.getElementById('eventViewFooter'); + const editFooter = document.getElementById('eventEditFooter'); const editBtn = document.getElementById('editEventBtn'); const deleteBtn = document.getElementById('deleteEvent'); const saveBtn = document.getElementById('saveEvent'); const cancelBtn = document.getElementById('cancelEditBtn'); const closeViewBtn = document.getElementById('closeViewBtn'); - const markPresentBtn = document.getElementById('markPresentBtn'); - const markAbsentBtn = document.getElementById('markAbsentBtn'); - const cancelAppointmentBtn = document.getElementById('cancelAppointmentBtn'); - const reportIncidentBtn = document.getElementById('reportIncidentBtn'); + + // Vérifier le statut et si l'événement est clôturé + const statut = eventData?.statut || eventData?.extendedProps?.statut || ''; + const clotureFlag = eventData?.cloture_flag || eventData?.extendedProps?.cloture_flag; + const isEventCloture = clotureFlag === 1 || clotureFlag === '1' || clotureFlag === true; + const eventType = eventData?.type || eventData?.extendedProps?.type || ''; + const isGroupe = eventType === 'groupe'; + + // Vérifier si les boutons de statut doivent être cachés + const shouldHideStatusButtons = statut === 'present' || statut === 'absence' || isEventCloture; if (mode === 'view') { if (viewBlock) viewBlock.style.display = 'block'; if (formBlock) formBlock.style.display = 'none'; + if (viewFooter) viewFooter.style.display = 'block'; + if (editFooter) editFooter.style.display = 'none'; if (editBtn) editBtn.style.display = canEdit ? 'inline-block' : 'none'; - if (deleteBtn) deleteBtn.style.display = canDelete ? 'inline-block' : 'none'; + if (deleteBtn) deleteBtn.style.display = 'none'; if (saveBtn) saveBtn.style.display = 'none'; if (cancelBtn) cancelBtn.style.display = 'none'; if (closeViewBtn) closeViewBtn.style.display = 'inline-block'; - if (markPresentBtn) markPresentBtn.style.display = canEdit ? 'inline-block' : 'none'; - if (markAbsentBtn) markAbsentBtn.style.display = canEdit ? 'inline-block' : 'none'; - if (cancelAppointmentBtn) cancelAppointmentBtn.style.display = canEdit ? 'inline-block' : 'none'; - if (reportIncidentBtn) reportIncidentBtn.style.display = 'inline-block'; + + // Cacher tous les boutons de statut en mode vue + if (statusButtons) statusButtons.style.display = 'none'; + } else if (mode === 'edit' || mode === 'create') { if (viewBlock) viewBlock.style.display = 'none'; if (formBlock) formBlock.style.display = 'block'; + if (viewFooter) viewFooter.style.display = 'none'; + if (editFooter) editFooter.style.display = 'block'; if (editBtn) editBtn.style.display = 'none'; - if (deleteBtn) deleteBtn.style.display = 'none'; + if (deleteBtn) deleteBtn.style.display = (mode === 'edit' && canDelete) ? 'inline-block' : 'none'; if (saveBtn) saveBtn.style.display = 'inline-block'; if (cancelBtn) cancelBtn.style.display = 'inline-block'; if (closeViewBtn) closeViewBtn.style.display = 'none'; - if (markPresentBtn) markPresentBtn.style.display = 'none'; - if (markAbsentBtn) markAbsentBtn.style.display = 'none'; - if (cancelAppointmentBtn) cancelAppointmentBtn.style.display = 'none'; - if (reportIncidentBtn) reportIncidentBtn.style.display = 'none'; + + // Afficher ou cacher les boutons de statut selon le statut de l'événement + if (statusButtons) { + if (mode === 'edit' && canEdit && !shouldHideStatusButtons) { + statusButtons.style.display = 'block'; + + // Gérer l'affichage des boutons individuels selon le type d'événement + const allButtons = statusButtons.querySelectorAll('button'); + allButtons.forEach(btn => { + // Masquer "Absent" pour les événements de groupe + if (btn.id === 'markAbsentBtn') { + btn.style.display = isGroupe ? 'none' : 'inline-block'; + } + // Le bouton "Détail incident(s)" garde son état (géré par checkAndDisplayIncidentsButton) + else if (btn.id === 'viewIncidentsBtn') { + // Ne rien faire, l'état est géré ailleurs + } + // Afficher tous les autres boutons + else { + btn.style.display = 'inline-block'; + } + }); + } else { + statusButtons.style.display = 'none'; + } + } } } diff --git a/assets/js/modules/agenda-modal.js b/assets/js/modules/agenda-modal.js index 77b9dee..3581a42 100644 --- a/assets/js/modules/agenda-modal.js +++ b/assets/js/modules/agenda-modal.js @@ -301,7 +301,7 @@ export function openModal(mode, eventData = null) { } // Mettre à jour l'affichage - updateModalDisplay(currentMode, userCanEdit, userCanDelete); + updateModalDisplay(currentMode, userCanEdit, userCanDelete, currentEventData); // Remplir les données selon le mode if (mode === 'view') { diff --git a/templates/modules/modals/event-modal.php b/templates/modules/modals/event-modal.php index b522811..eaa0c31 100644 --- a/templates/modules/modals/event-modal.php +++ b/templates/modules/modals/event-modal.php @@ -468,7 +468,7 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin'); -