correction filtre rapides

This commit is contained in:
Jean-Philippe Staelen 2026-01-21 10:34:01 +01:00
parent 23dd434546
commit 14a7c216c5
2 changed files with 49 additions and 30 deletions

View File

@ -985,35 +985,49 @@ class CRVI_TraductionLangue_Model extends Main_Model {
} }
} }
// Récupérer toutes les capacités actives // Récupérer uniquement les termes de la taxonomie 'langue' qui sont liés à des posts 'traduction_langue' actifs
$capacites = self::getActiveCapacites([], false); $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 = []; if (\is_wp_error($langues_terms) || empty($langues_terms)) {
foreach ($capacites as $capacite) { // Mettre en cache un résultat vide
$capacite_langues = is_array($capacite->langue) ? $capacite->langue : [$capacite->langue]; if ($use_cache) {
$langues_ids = array_merge($langues_ids, $capacite_langues); \set_transient($cache_key, [], 1 * \DAY_IN_SECONDS);
}
return [];
} }
$langues_ids = array_unique($langues_ids);
$result = []; $result = [];
foreach ($langues_ids as $langue_id) { foreach ($langues_terms as $langue_term) {
$langue_term = \get_term($langue_id, 'langue'); // Vérifier qu'il existe au moins une capacité active pour cette langue
if ($langue_term && !\is_wp_error($langue_term)) { $capacites = self::getActiveCapacites(['langue' => $langue_term->term_id], false);
// Obtenir les disponibilités avec ventilation par jour
$dispos = self::getDisponibilitesByLangueWithJours($langue_id, $date, $use_cache);
$result[$langue_term->slug] = [ if (empty($capacites)) {
'id' => $langue_id, // Pas de capacité active pour cette langue, on saute
'name' => $langue_term->name, continue;
'slug' => $langue_term->slug,
'total' => $dispos['total'],
'remaining' => $dispos['remaining'],
'by_periode' => $dispos['by_periode'],
'by_jour' => $dispos['by_jour'],
];
} }
// 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 // Trier par nom de langue
@ -1021,9 +1035,9 @@ class CRVI_TraductionLangue_Model extends Main_Model {
return strcmp($a['name'], $b['name']); 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) { if ($use_cache) {
\set_transient($cache_key, $result, 2 * \DAY_IN_SECONDS); \set_transient($cache_key, $result, 1 * \DAY_IN_SECONDS);
} }
return $result; return $result;

View File

@ -126,12 +126,12 @@
<!-- Filtres visuels --> <!-- Filtres visuels -->
<section class="visual-filters-container mb-4"> <section class="visual-filters-container mb-4">
<div class="card crvi-quick-filters"> <div class="card crvi-quick-filters">
<div class="card-header d-flex justify-content-between align-items-center" style="cursor: pointer;" data-bs-toggle="collapse" data-bs-target="#visualFiltersCollapse" aria-expanded="true" aria-controls="visualFiltersCollapse"> <div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0"> <h5 class="mb-0">
<i class="fas fa-filter me-2"></i>Filtres rapides <i class="fas fa-filter me-2"></i>Filtres rapides
</h5> </h5>
<button class="btn btn-link text-decoration-none p-0" type="button"> <button class="btn btn-link text-decoration-none p-0" type="button" data-bs-toggle="collapse" data-bs-target="#visualFiltersCollapse" aria-expanded="true" aria-controls="visualFiltersCollapse">
<i class="fas fa-chevron-down" id="visual-filters-toggle-icon"></i> <i class="fas fa-chevron-down transition-transform" id="visual-filters-toggle-icon"></i>
</button> </button>
</div> </div>
<div id="visualFiltersCollapse" class="collapse show"> <div id="visualFiltersCollapse" class="collapse show">
@ -182,14 +182,19 @@
const toggleIcon = document.getElementById('visual-filters-toggle-icon'); const toggleIcon = document.getElementById('visual-filters-toggle-icon');
if (collapseElement && toggleIcon) { 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() { collapseElement.addEventListener('show.bs.collapse', function() {
toggleIcon.style.transform = 'rotate(180deg)'; toggleIcon.style.transform = 'rotate(180deg)';
toggleIcon.style.transition = 'transform 0.3s ease';
}); });
collapseElement.addEventListener('hide.bs.collapse', function() { collapseElement.addEventListener('hide.bs.collapse', function() {
toggleIcon.style.transform = 'rotate(0deg)'; toggleIcon.style.transform = 'rotate(0deg)';
toggleIcon.style.transition = 'transform 0.3s ease';
}); });
} }
}); });