correction filtre rapides
This commit is contained in:
parent
23dd434546
commit
14a7c216c5
@ -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);
|
if (empty($capacites)) {
|
||||||
|
// Pas de capacité active pour cette langue, on saute
|
||||||
$result[$langue_term->slug] = [
|
continue;
|
||||||
'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'],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|||||||
@ -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';
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user