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
$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;

View File

@ -126,12 +126,12 @@
<!-- Filtres visuels -->
<section class="visual-filters-container mb-4">
<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">
<i class="fas fa-filter me-2"></i>Filtres rapides
</h5>
<button class="btn btn-link text-decoration-none p-0" type="button">
<i class="fas fa-chevron-down" id="visual-filters-toggle-icon"></i>
<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 transition-transform" id="visual-filters-toggle-icon"></i>
</button>
</div>
<div id="visualFiltersCollapse" class="collapse show">
@ -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';
});
}
});