From 14a7c216c5f0101b29714555280045725faa1739 Mon Sep 17 00:00:00 2001 From: jps Date: Wed, 21 Jan 2026 10:34:01 +0100 Subject: [PATCH] correction filtre rapides --- app/models/TraductionLangue_Model.php | 64 ++++++++++++++++----------- templates/admin/agenda-page.php | 15 ++++--- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/app/models/TraductionLangue_Model.php b/app/models/TraductionLangue_Model.php index 3213f8b..89a05d9 100644 --- a/app/models/TraductionLangue_Model.php +++ b/app/models/TraductionLangue_Model.php @@ -985,35 +985,49 @@ class CRVI_TraductionLangue_Model extends Main_Model { } } - // Récupérer toutes les capacités actives - $capacites = self::getActiveCapacites([], false); + // Récupérer uniquement les termes de la taxonomie 'langue' qui sont liés à des posts 'traduction_langue' actifs + $langues_terms = \get_terms([ + 'taxonomy' => 'langue', + 'hide_empty' => true, // Important: ne récupérer que les termes utilisés + 'object_ids' => \get_posts([ + 'post_type' => 'traduction_langue', + 'post_status' => 'publish', + 'numberposts' => -1, + 'fields' => 'ids' + ]) + ]); - $langues_ids = []; - foreach ($capacites as $capacite) { - $capacite_langues = is_array($capacite->langue) ? $capacite->langue : [$capacite->langue]; - $langues_ids = array_merge($langues_ids, $capacite_langues); + if (\is_wp_error($langues_terms) || empty($langues_terms)) { + // Mettre en cache un résultat vide + if ($use_cache) { + \set_transient($cache_key, [], 1 * \DAY_IN_SECONDS); + } + return []; } - - $langues_ids = array_unique($langues_ids); $result = []; - foreach ($langues_ids as $langue_id) { - $langue_term = \get_term($langue_id, 'langue'); - if ($langue_term && !\is_wp_error($langue_term)) { - // Obtenir les disponibilités avec ventilation par jour - $dispos = self::getDisponibilitesByLangueWithJours($langue_id, $date, $use_cache); - - $result[$langue_term->slug] = [ - 'id' => $langue_id, - 'name' => $langue_term->name, - 'slug' => $langue_term->slug, - 'total' => $dispos['total'], - 'remaining' => $dispos['remaining'], - 'by_periode' => $dispos['by_periode'], - 'by_jour' => $dispos['by_jour'], - ]; + foreach ($langues_terms as $langue_term) { + // Vérifier qu'il existe au moins une capacité active pour cette langue + $capacites = self::getActiveCapacites(['langue' => $langue_term->term_id], false); + + if (empty($capacites)) { + // Pas de capacité active pour cette langue, on saute + continue; } + + // Obtenir les disponibilités avec ventilation par jour + $dispos = self::getDisponibilitesByLangueWithJours($langue_term->term_id, $date, $use_cache); + + $result[$langue_term->slug] = [ + 'id' => $langue_term->term_id, + 'name' => $langue_term->name, + 'slug' => $langue_term->slug, + 'total' => $dispos['total'], + 'remaining' => $dispos['remaining'], + 'by_periode' => $dispos['by_periode'], + 'by_jour' => $dispos['by_jour'], + ]; } // Trier par nom de langue @@ -1021,9 +1035,9 @@ class CRVI_TraductionLangue_Model extends Main_Model { return strcmp($a['name'], $b['name']); }); - // Mettre en cache le résultat (2 jours) + // Mettre en cache le résultat (1 jour) if ($use_cache) { - \set_transient($cache_key, $result, 2 * \DAY_IN_SECONDS); + \set_transient($cache_key, $result, 1 * \DAY_IN_SECONDS); } return $result; diff --git a/templates/admin/agenda-page.php b/templates/admin/agenda-page.php index d808fc3..03de1a8 100644 --- a/templates/admin/agenda-page.php +++ b/templates/admin/agenda-page.php @@ -126,12 +126,12 @@
-
+
Filtres rapides
-
@@ -182,14 +182,19 @@ const toggleIcon = document.getElementById('visual-filters-toggle-icon'); if (collapseElement && toggleIcon) { + // Définir l'état initial de l'icône + toggleIcon.style.transition = 'transform 0.3s ease'; + if (collapseElement.classList.contains('show')) { + toggleIcon.style.transform = 'rotate(180deg)'; + } + + // Écouter les événements de collapse collapseElement.addEventListener('show.bs.collapse', function() { toggleIcon.style.transform = 'rotate(180deg)'; - toggleIcon.style.transition = 'transform 0.3s ease'; }); collapseElement.addEventListener('hide.bs.collapse', function() { toggleIcon.style.transform = 'rotate(0deg)'; - toggleIcon.style.transition = 'transform 0.3s ease'; }); } });