From 460425e016ee23d704bfb943a266178871a06454 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr>
Date: Thu, 27 Feb 2025 13:11:21 +0100
Subject: [PATCH] v9.0.1-Focale

 * fix hotline#207656 TruncateList
 * fix widget cache test
---
 README.md                                     |  6 ++
 VERSIONS                                      | 47 +++++++++++
 VERSIONS_HOTLINE/196071                       |  1 -
 VERSIONS_HOTLINE/200086                       |  1 -
 VERSIONS_HOTLINE/202688                       |  1 -
 VERSIONS_HOTLINE/205425                       |  1 -
 VERSIONS_HOTLINE/207656                       |  1 -
 VERSIONS_HOTLINE/209619                       |  1 -
 VERSIONS_HOTLINE/211010                       |  1 -
 VERSIONS_HOTLINE/212789                       |  1 -
 VERSIONS_HOTLINE/213110                       |  1 -
 VERSIONS_HOTLINE/217755                       |  1 -
 VERSIONS_HOTLINE/218050                       |  1 -
 VERSIONS_HOTLINE/218054                       |  1 -
 VERSIONS_HOTLINE/218055                       |  1 -
 VERSIONS_HOTLINE/218292                       |  1 -
 VERSIONS_HOTLINE/218300                       |  1 -
 VERSIONS_HOTLINE/218307                       |  1 -
 VERSIONS_HOTLINE/218564                       |  1 -
 VERSIONS_WIP/215552                           |  1 -
 VERSIONS_WIP/215563                           |  1 -
 VERSIONS_WIP/215565                           |  1 -
 VERSIONS_WIP/215567                           |  1 -
 VERSIONS_WIP/215569                           |  1 -
 library/Class/BokehVersion.php                | 11 ++-
 .../Helper/Template/RenderingHorizontal.php   |  2 +-
 .../View/Helper/Template/TruncateList.php     | 37 ++++++---
 library/startup.php                           | 10 ++-
 .../admin/controllers/IndexControllerTest.php | 22 +++---
 tests/library/Class/BokehVersionTest.php      | 13 ++--
 .../TemplatesActivitiesWidgetCachedTest.php   | 78 +++++++++++++++++--
 .../Templates/activities_widget_cache.html    | 17 ++++
 32 files changed, 202 insertions(+), 63 deletions(-)
 delete mode 100644 VERSIONS_HOTLINE/196071
 delete mode 100644 VERSIONS_HOTLINE/200086
 delete mode 100644 VERSIONS_HOTLINE/202688
 delete mode 100644 VERSIONS_HOTLINE/205425
 delete mode 100644 VERSIONS_HOTLINE/207656
 delete mode 100644 VERSIONS_HOTLINE/209619
 delete mode 100644 VERSIONS_HOTLINE/211010
 delete mode 100644 VERSIONS_HOTLINE/212789
 delete mode 100644 VERSIONS_HOTLINE/213110
 delete mode 100644 VERSIONS_HOTLINE/217755
 delete mode 100644 VERSIONS_HOTLINE/218050
 delete mode 100644 VERSIONS_HOTLINE/218054
 delete mode 100644 VERSIONS_HOTLINE/218055
 delete mode 100644 VERSIONS_HOTLINE/218292
 delete mode 100644 VERSIONS_HOTLINE/218300
 delete mode 100644 VERSIONS_HOTLINE/218307
 delete mode 100644 VERSIONS_HOTLINE/218564
 delete mode 100644 VERSIONS_WIP/215552
 delete mode 100644 VERSIONS_WIP/215563
 delete mode 100644 VERSIONS_WIP/215565
 delete mode 100644 VERSIONS_WIP/215567
 delete mode 100644 VERSIONS_WIP/215569
 create mode 100644 tests/scenarios/Templates/activities_widget_cache.html

diff --git a/README.md b/README.md
index 53646ab4a72..1888d502fc8 100644
--- a/README.md
+++ b/README.md
@@ -28,3 +28,9 @@ Copyright \(c\) 2012, 2013, 2014, 2015 Agence Française Informatique \(AFI\). A
 You can redistribute it and/or modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by the Free Software Foundation \([see COPYING](COPYING)\)
 
 [Third-Party Components and their license] (doc/extern_libs.org)
+
+## Version
+
+BOKEH version : https://semver.org/spec/v2.0.0.html
+
+Actual 9.0.1-Focale
diff --git a/VERSIONS b/VERSIONS
index 2c19c4681dd..e4bc124e57b 100644
--- a/VERSIONS
+++ b/VERSIONS
@@ -1,3 +1,50 @@
+27/02/2025 - v9.0.1-Focale
+
+ - fonctionnalité #215563 : RGAA : Les étiquettes de champs de sélection de tri et de nombre de page dans la liste de résultat (Magasin de thème) sont pertinentes.
+
+ - fonctionnalité #215552 : RGAA : Les champs alt des images ne sont renseignés que si l'image est nécessaire.
+
+ - fonctionnalité #215565 : RGAA : Les intitulés lus dans les lecteurs vocaux pour les boutons sont plus pertinents. (critère 11.9)
+
+ - fonctionnalité #215569 : RGAA/WCAG : Mise à jour de l'outil de gestion des cookies tarteaucitron
+
+ - fonctionnalité #215567 : RGAA/WCAG : Les contenus sont structurés par rôles
+
+ - correctif #218564 : Rendez-vous : Les sélecteurs d'heures de début et fin deviennent un Jquery timepicker.
+
+ - correctif #202688 : Fiche Abonné : L'affichage des paniers de notices (sélections) a été optimisé.
+
+ - correctif #200086 : Exemplaires : Configuration d'affichage, ne pas affiché de champ exemplaire vide.
+
+ - correctif #211010 : Agenda : Tri des articles par ordre du prochain évènement.
+
+ - correctif #213110 : Magasin de thèmes : Correction de l'affichage des réservations paginée.
+
+ - correctif #205425 : Magasin de thèmes : La description affiche qu'une seule fois le lien internet avec le bon libellé.
+
+ - correctif #209619 : Recherche : Indexation des charactères spéciaux pour éviter de séparer les mots en deux.
+
+ - correctif #218307 : Connecteur Cvs : Correction d'une erreur au moissonage.
+
+ - correctif #218050 : Activités : Ne pas afficher de message d'eereur si on ne renseigne pas un champ non obligatoire.
+
+ - correctif #212789 : Activités : Un utilisateur non connecté est redirigé vers la popup d'activité après avoir rempli le formulaire de connexion.
+
+ - correctif #218300 : Activités : Ignore les sessions et activités cachées dans l'affichage des boites .
+
+ - correctif #207656 : Activités : Correction de la getion des quotas en mode file d'attente.
+
+ - correctif #196071 : Administration : Le tableau de l'écran de l'assistance, ne doit plus contenir de colonnes vides.
+
+ - correctif #218292 : Administration : Ouvertures : Sauvegarder la date au format sélectionné par l'utilisateur.
+
+ - correctif #217755 : Administration : Dans le module activité, les rédacteurs peuvent maintenant voir les abonnés de tous les sites.
+
+ - correctif #218055 : Administration : correction de la prise en charge et de la validation du paramètre "url de la page".
+
+ - correctif #218054 : Administration : Correction du filtre sur les bibliothèques dans les groupes utilisateurs.
+
+
 22/01/2025 - vFocale.0
 
  - fonctionnalite #130132 : Ressource Numérique: enrichissement des notices avec Premier Chapitre
diff --git a/VERSIONS_HOTLINE/196071 b/VERSIONS_HOTLINE/196071
deleted file mode 100644
index 3174c610178..00000000000
--- a/VERSIONS_HOTLINE/196071
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #196071 : Admin : Le tableau de l'écran de l'assistance, ne doit plus contenir de colonnes vides.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/200086 b/VERSIONS_HOTLINE/200086
deleted file mode 100644
index e2af90900c1..00000000000
--- a/VERSIONS_HOTLINE/200086
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #200086 : Exemplaires : Configuration d'affichage, ne pas affiché de champ exemplaire vide.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/202688 b/VERSIONS_HOTLINE/202688
deleted file mode 100644
index c99bd6f692f..00000000000
--- a/VERSIONS_HOTLINE/202688
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #202688 : Fiche Abonné : L'affichage des paniers de notices (sélections) a été optimisé.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/205425 b/VERSIONS_HOTLINE/205425
deleted file mode 100644
index 03886e9a1d8..00000000000
--- a/VERSIONS_HOTLINE/205425
+++ /dev/null
@@ -1 +0,0 @@
-- correctif #205425 : Magasin de thèmes: La description affiche qu'une seule fois le lien internet avec le bon libellé
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/207656 b/VERSIONS_HOTLINE/207656
deleted file mode 100644
index 8be3d103527..00000000000
--- a/VERSIONS_HOTLINE/207656
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #207656 : Activités : correction de la getion des quotas en mode file d'attente  
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/209619 b/VERSIONS_HOTLINE/209619
deleted file mode 100644
index 444f3823bb9..00000000000
--- a/VERSIONS_HOTLINE/209619
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #209619 : Recherche : Indexation des charactères spéciaux pour éviter de séparer les mots en deux.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/211010 b/VERSIONS_HOTLINE/211010
deleted file mode 100644
index 280eace798b..00000000000
--- a/VERSIONS_HOTLINE/211010
+++ /dev/null
@@ -1 +0,0 @@
-- correctif #211010 : Agenda : tri des articles par ordre du prochain évènement.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/212789 b/VERSIONS_HOTLINE/212789
deleted file mode 100644
index 23a349463f3..00000000000
--- a/VERSIONS_HOTLINE/212789
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #212789 : Boite activité : Un utilisateur non connecté est redirigé vers la popup d'activité après avoir rempli le formulaire de connexion.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/213110 b/VERSIONS_HOTLINE/213110
deleted file mode 100644
index 6a0744eff69..00000000000
--- a/VERSIONS_HOTLINE/213110
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #213110 : Magasin de thèmes : correction de l'affichage des réservations paginée
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/217755 b/VERSIONS_HOTLINE/217755
deleted file mode 100644
index bc2798fd4ad..00000000000
--- a/VERSIONS_HOTLINE/217755
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #217755 : Adiministration : Dans le module activité, les rédacteurs peuvent maintenant voir les abonnés de tous les sites.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218050 b/VERSIONS_HOTLINE/218050
deleted file mode 100644
index 8bfb6245cf5..00000000000
--- a/VERSIONS_HOTLINE/218050
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218050 : Activités : Ne pas afficher de message d'eereur si on ne renseigne pas un champ non obligatoire. 
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218054 b/VERSIONS_HOTLINE/218054
deleted file mode 100644
index ea937e038f1..00000000000
--- a/VERSIONS_HOTLINE/218054
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218054 : correction du filtre sur les bibliothèques dans les groupes utilisateurs
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218055 b/VERSIONS_HOTLINE/218055
deleted file mode 100644
index 89361142468..00000000000
--- a/VERSIONS_HOTLINE/218055
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218055 : Administration : correction de la prise en charge et de la validation du paramètre "url de la page".
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218292 b/VERSIONS_HOTLINE/218292
deleted file mode 100644
index 57cd39f91a8..00000000000
--- a/VERSIONS_HOTLINE/218292
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218292 : Admin : Ouvertures : Sauvegarder la date au format sélectionné par l'utilisateur.
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218300 b/VERSIONS_HOTLINE/218300
deleted file mode 100644
index 5f5e4356f8d..00000000000
--- a/VERSIONS_HOTLINE/218300
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218300 : Activités : ignore les sessions et activités cachées dans l'affichage des boites 
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218307 b/VERSIONS_HOTLINE/218307
deleted file mode 100644
index dce3219eb68..00000000000
--- a/VERSIONS_HOTLINE/218307
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218307 : Connecteur Cvs : Correction d'une erreur au moissonage
\ No newline at end of file
diff --git a/VERSIONS_HOTLINE/218564 b/VERSIONS_HOTLINE/218564
deleted file mode 100644
index 37f2329d1dc..00000000000
--- a/VERSIONS_HOTLINE/218564
+++ /dev/null
@@ -1 +0,0 @@
- - correctif #218564 : Rendez-vous : les sélecteurs d'heures de début et fin deviennent un Jquery timepicker
\ No newline at end of file
diff --git a/VERSIONS_WIP/215552 b/VERSIONS_WIP/215552
deleted file mode 100644
index 838a0a2ef1c..00000000000
--- a/VERSIONS_WIP/215552
+++ /dev/null
@@ -1 +0,0 @@
- - fonctionnalité #215552 : RGAA : Les champs alt des images ne sont renseignés que si l'image est nécessaire.
\ No newline at end of file
diff --git a/VERSIONS_WIP/215563 b/VERSIONS_WIP/215563
deleted file mode 100644
index 1137022ef28..00000000000
--- a/VERSIONS_WIP/215563
+++ /dev/null
@@ -1 +0,0 @@
- - fonctionnalité #215563 : RGAA : Les étiquettes de champs de sélection de tri et de nombre de page dans la liste de résultat (Magasin de thème) sont pertinentes.
\ No newline at end of file
diff --git a/VERSIONS_WIP/215565 b/VERSIONS_WIP/215565
deleted file mode 100644
index 1ba130b4447..00000000000
--- a/VERSIONS_WIP/215565
+++ /dev/null
@@ -1 +0,0 @@
- - fonctionnalité #215565 : RGAA : les intitulés lus dans les lecteurs vocaux pour les boutons sont plus pertinents. (critère 11.9)
\ No newline at end of file
diff --git a/VERSIONS_WIP/215567 b/VERSIONS_WIP/215567
deleted file mode 100644
index 96655e600d5..00000000000
--- a/VERSIONS_WIP/215567
+++ /dev/null
@@ -1 +0,0 @@
- - fonctionnalité #215567 : RGAA/WCAG : Les contenus sont structurés par rôles
\ No newline at end of file
diff --git a/VERSIONS_WIP/215569 b/VERSIONS_WIP/215569
deleted file mode 100644
index b4133ad9e6c..00000000000
--- a/VERSIONS_WIP/215569
+++ /dev/null
@@ -1 +0,0 @@
- - fonctionnalité #215569 : RGAA/WCAG : Mise à jour de l'outil de gestion des cookies tarteaucitron
\ No newline at end of file
diff --git a/library/Class/BokehVersion.php b/library/Class/BokehVersion.php
index 06c87530a99..5fefb77259c 100644
--- a/library/Class/BokehVersion.php
+++ b/library/Class/BokehVersion.php
@@ -52,16 +52,19 @@ class Class_BokehVersion {
   }
 
 
-  public function fetchLatest() {
+  public function fetchLatest()
+  {
     $json = static::getWebClient()
       ->open_url('https://git.afi-sa.net/api/v4/projects/4/repository/tags?per_page=5&order_by=updated&sort=desc');
 
-    if (!$json || !$tags = json_decode($json, true))
+    if ( ! $json || ! ($tags = json_decode($json, true)))
       return $this->current();
 
     $versions = array_filter($tags,
-                             fn($version) => preg_match('/^\w+\.\d+$/',
-                                                        $version['name']));
+                             fn($version) => (preg_match('/^\d+\.\d+\.\d+(\-\w+)?$/i',
+                                                         $version['name'])
+                                              || preg_match('/^\w+\.\d+$/i',
+                                                            $version['name'])));
 
     return $versions !== []
       ? current($versions)['name']
diff --git a/library/ZendAfi/View/Helper/Template/RenderingHorizontal.php b/library/ZendAfi/View/Helper/Template/RenderingHorizontal.php
index 0402e66bb4e..71f0c666bf9 100644
--- a/library/ZendAfi/View/Helper/Template/RenderingHorizontal.php
+++ b/library/ZendAfi/View/Helper/Template/RenderingHorizontal.php
@@ -49,7 +49,7 @@ class ZendAfi_View_Helper_Template_RenderingHorizontal extends ZendAfi_View_Help
     if ($summary = $element->getDescription())
       $content [] = $this->_tag('div',
                                 $summary,
-                                ['title' => strip_tags($element->getDescriptionTitle()),
+                                ['title' => strip_tags((string) $element->getDescriptionTitle()),
                                  'class' => 'card-text']);
 
     return $this->_tag('div',
diff --git a/library/ZendAfi/View/Helper/Template/TruncateList.php b/library/ZendAfi/View/Helper/Template/TruncateList.php
index 6066dc18ddd..452a8fb8d69 100644
--- a/library/ZendAfi/View/Helper/Template/TruncateList.php
+++ b/library/ZendAfi/View/Helper/Template/TruncateList.php
@@ -23,19 +23,23 @@
 class ZendAfi_View_Helper_Template_TruncateList
   extends Intonation_View_Abstract_Layout {
 
+  use Trait_TimeSource;
+
   const AJAX_SIZE = 20;
 
-  protected
-    $_min_size_for_tools = 5,
-    $_page_size = 3,
-    $_container_id,
-    $_module_id,
-    $_widget_id,
-    $_top_tools_id,
-    $_bottom_tools_id;
+  protected int $_min_size_for_tools = 5;
+  protected int $_page_size = 3;
+
+  protected string $_container_id = '';
+  protected string $_widget_id = '';
+  protected string $_top_tools_id = '';
+  protected string $_bottom_tools_id = '';
+  protected string $_module_id = '';
 
 
   public function truncateList($collection, $callback, $page_size = 3) {
+    $this->_resetInstance();
+
     if ($collection->isEmpty())
       return $this->_tag('p', $this->_('Aucun élément'));
 
@@ -52,6 +56,19 @@ class ZendAfi_View_Helper_Template_TruncateList
   }
 
 
+  protected function _resetInstance(): self
+  {
+    $this->_container_id = '';
+    $this->_min_size_for_tools = 5;
+    $this->_page_size = 3;
+    $this->_widget_id = '';
+    $this->_top_tools_id = '';
+    $this->_bottom_tools_id = '';
+
+    return $this;
+  }
+
+
   public function setIdModule(string $id): self
   {
     $this->_module_id = $id;
@@ -88,8 +105,8 @@ class ZendAfi_View_Helper_Template_TruncateList
 
   protected function _initIds(): self
   {
-    if ( ! $this->_container_id )
-      $this->_container_id = $this->_module_id ?: uniqid();
+    if ( ! $this->_container_id)
+      $this->_container_id = ($this->_module_id ?: $this->getTimeSource()->uniqid());
 
     $this->_widget_id = 'truncate_list_widget_id_' . $this->_container_id;
     $this->_top_tools_id = 'top_tools_' . $this->_container_id;
diff --git a/library/startup.php b/library/startup.php
index a924bc8d420..2427857b9c8 100644
--- a/library/startup.php
+++ b/library/startup.php
@@ -142,8 +142,14 @@ class Bokeh_Engine
 
   public function setupConstants(): self
   {
-    defineConstant('BOKEH_MAJOR_VERSION', 'Focale');
-    defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION . '.0');
+    defineConstant('BOKEH_MAJOR_VERSION', 9);
+    defineConstant('BOKEH_MINOR_VERSION', 0);
+    defineConstant('BOKEH_PATCH_VERSION', 1);
+    defineConstant('BOKEH_NAMED_VERSION', 'Focale');
+    defineConstant('BOKEH_RELEASE_NUMBER', BOKEH_MAJOR_VERSION
+                   . '.' . BOKEH_MINOR_VERSION
+                   . '.' . BOKEH_PATCH_VERSION
+                   . (BOKEH_NAMED_VERSION ? ('-' . BOKEH_NAMED_VERSION) : ''));
 
     defineConstant('BOKEH_REMOTE_FILES', 'https://git.afi-sa.net/afi/opacce/');
 
diff --git a/tests/application/modules/admin/controllers/IndexControllerTest.php b/tests/application/modules/admin/controllers/IndexControllerTest.php
index 0237f22daf3..11a5a7a7e74 100644
--- a/tests/application/modules/admin/controllers/IndexControllerTest.php
+++ b/tests/application/modules/admin/controllers/IndexControllerTest.php
@@ -62,8 +62,8 @@ class IndexControllerWithHTTPSTest extends Admin_IndexControllerTestCase {
 
 
 class Admin_IndexControllerCookiesTest extends Admin_IndexControllerTestCase {
+
   public $file_system;
-  protected $_next_version;
 
   public function setUp(): void
   {
@@ -220,11 +220,13 @@ class IndexControllerWithoutFileLocalBranchAndGitTest extends Admin_IndexControl
 
 
 
-class IndexControllerWithGitTest extends Admin_IndexControllerTestCase {
+class IndexControllerWithGitTest extends Admin_IndexControllerTestCase
+{
 
-  protected $_next_version;
+  protected string $_next_version;
 
-  public function setUp(): void   {
+  public function setUp(): void
+  {
     parent::setUp();
 
     Class_AdminVar::setSiteOk(true);
@@ -235,15 +237,16 @@ class IndexControllerWithGitTest extends Admin_IndexControllerTestCase {
                     'clef' => 'NOM_DOMAINE',
                     'valeur' => 'https://bokeh-library-portal.org']);
 
-    $this->_next_version = BOKEH_MAJOR_VERSION . '.'
-      . (1 + (int)explode('.', BOKEH_RELEASE_NUMBER)[1]);
+    $this->_next_version = BOKEH_MAJOR_VERSION
+      . '.' . BOKEH_MINOR_VERSION
+      . '.' . (BOKEH_PATCH_VERSION + 1)
+      . BOKEH_NAMED_VERSION;
 
     $mock_http = $this->mock()
                       ->whenCalled('open_url')
                       ->with('https://git.afi-sa.net/api/v4/projects/4/repository/tags?per_page=5&order_by=updated&sort=desc')
                       ->answers('[{"name":"' . $this->_next_version . '"}]');
 
-
     Class_BokehVersion::setFileSystem(new Storm_FileSystem_Volatile);
     Class_BokehVersion::setWebClient($mock_http);
     Class_BokehVersion::setCommand($this->mock()->beStrict()
@@ -432,9 +435,8 @@ class IndexControllerWithGitTest extends Admin_IndexControllerTestCase {
 
 class Admin_IndexControllerWhenUpToDateTest extends Admin_IndexControllerTestCase {
 
-  protected $_next_version;
-
-  public function setUp(): void   {
+  public function setUp(): void
+  {
     parent::setUp();
 
     $mock_http = $this->mock()
diff --git a/tests/library/Class/BokehVersionTest.php b/tests/library/Class/BokehVersionTest.php
index 2ad4f66df84..dfd3ec6f0e8 100644
--- a/tests/library/Class/BokehVersionTest.php
+++ b/tests/library/Class/BokehVersionTest.php
@@ -23,9 +23,8 @@
 class BokehVersionTest extends ModelTestCase
 {
 
-  protected
-    $_next_version,
-    $_mock_http;
+  protected string $_next_version;
+  protected $_mock_http;
 
   public function setUp(): void
   {
@@ -33,13 +32,15 @@ class BokehVersionTest extends ModelTestCase
 
     Storm_Cache::beVolatile();
 
-    $this->_next_version = BOKEH_MAJOR_VERSION . '.'
-      . (1 + (int) explode('.', BOKEH_RELEASE_NUMBER)[1]);
+    $this->_next_version = BOKEH_MAJOR_VERSION
+      . '.' . BOKEH_MINOR_VERSION
+      . '.' . (BOKEH_PATCH_VERSION + 1)
+      . BOKEH_NAMED_VERSION;
 
     $this->_mock_http = $this->mock()
                              ->whenCalled('open_url')
                              ->with('https://git.afi-sa.net/api/v4/projects/4/repository/tags?per_page=5&order_by=updated&sort=desc')
-                             ->answers('[{"name":"patin-2.3.4"}, {"name":"8.0.12-coufin"}, {"name":"' . $this->_next_version . '"}, {"name":"7.0.12"}]');
+                             ->answers('[{"name":"patin-2.3.4"}, {"name":"8.0.12+coufin"}, {"name":"' . $this->_next_version . '"}, {"name":"7.0.12"}]');
     Class_BokehVersion::setWebClient($this->_mock_http);
   }
 
diff --git a/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php b/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php
index c5e4bf612b1..75ee9ba13e6 100644
--- a/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php
+++ b/tests/scenarios/Templates/TemplatesActivitiesWidgetCachedTest.php
@@ -46,18 +46,20 @@ class TemplatesActivitiesWidgetCachedTest
                               'password' => 'fx9k',
                               'mail' => 'r@bib.com',
                               'bib' => $bib,
+                              'idabon' => '9879879',
                               'user_groups' => [$group],
-                              'role_level' => ZendAfi_Acl_AdminControllerRoles::MODO_BIB]);
+                              'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB]);
 
     (new Class_Template_ProfilePatcher(null))
       ->setProfile(Class_Profil::find(3))
       ->addWidget(Intonation_Library_Widget_Carousel_Activity_Definition::CODE,
                   Class_Profil::DIV_MAIN,
                   ['rendering' => 'card-horizontal',
+                   'titre' => 'boite',
                    'selected_activities' => '56-57',
                    'layout' => 'list_with_options',
                    'order' => 'title desc',
-                   'size' => 5]);
+                   'size' => 9999]);
 
     $this->fixture(Class_Activity::class,
                    ['id' => 56,
@@ -72,7 +74,26 @@ class TemplatesActivitiesWidgetCachedTest
                                         'stagiaires' => [],
                                         'effectif_max' => 0,
                                         'effectif_min' => 0,
-                                        'visible' => false])])
+                                        'visible' => false]),
+                        $this->fixture(Class_SessionActivity::class,
+                                       ['id' => 2,
+                                        'contenu' => 'dogfighting tricks',
+                                        'date_debut' => '2024-09-05',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-09-04',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 0,
+                                        'effectif_min' => 0,
+                                        'visible' => false]),
+                        $this->fixture(Class_SessionActivity::class,
+                                       ['id' => 15,
+                                        'contenu' => 'dogfighting aim',
+                                        'date_debut' => '2024-10-10',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-10-08',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 10,
+                                        'effectif_min' => 1])])
          ->save();
 
     $this->fixture(Class_Activity::class,
@@ -86,26 +107,67 @@ class TemplatesActivitiesWidgetCachedTest
                                         'date_limite_fin' => '2024-10-08',
                                         'stagiaires' => [],
                                         'effectif_max' => 10,
-                                        'effectif_min' => 1])])
+                                        'effectif_min' => 1]),
+                        $this->fixture(Class_SessionActivity::class,
+                                       ['id' => 6,
+                                        'contenu' => 'dogfighting tricks',
+                                        'date_debut' => '2024-09-05',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-09-04',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 0,
+                                        'effectif_min' => 0,
+                                        'visible' => false]),
+                        $this->fixture(Class_SessionActivity::class,
+                                       ['id' => 7,
+                                        'contenu' => 'dogfighting tricks',
+                                        'date_debut' => '2024-09-05',
+                                        'date_fin' => '2024-10-30',
+                                        'date_limite_fin' => '2024-09-04',
+                                        'stagiaires' => [],
+                                        'effectif_max' => 0,
+                                        'effectif_min' => 0,
+                                        'visible' => false])])
          ->save();
 
     $timesource = new TimeSourceForTest('2024-09-04');
+
     Class_SessionActivity::setTimeSource($timesource);
     Intonation_Library_Widget_Carousel_Activity_Definition::setTimeSource($timesource);
 
     ZendAfi_Auth::getInstance()->logUser($logged);
+
+    Class_AdminVar::set('CACHE_ACTIF', 1);
+
+    Storm_Cache::setSeed('local');
+    Storm_Cache::beVolatile();
+    $cache = Storm_Cache::getDefaultZendCache();
+    $cache->save('local_local', 'local');
+    $cache->save(file_get_contents(__DIR__ . '/activities_widget_cache.html'), 'local_local_4604230a5259685d13d2c7fa622d0b39');
+
     $this->dispatch('/');
   }
 
+
+  public function tearDown(): void
+  {
+    Class_SessionActivity::setTimeSource(null);
+    Intonation_Library_Widget_Carousel_Activity_Definition::setTimeSource(null);
+    Storm_Cache::setDefaultZendCache(null);
+    parent::tearDown();
+  }
+
+
   /** @test */
-  public function truncateListToolsScriptShouldBeLoaded()
+  public function scytheChap2ShouldBeDisplayedInTruncateListWidgetIdOne()
   {
-    $this->assertXPathContentContains('//script', 'truncate_list_tools');
+    $this->assertXPathContentContains('//main//div[@id="truncate_list_widget_id_1"]', 'scythe chap 2');
   }
 
+
   /** @test */
-  public function scytheChap2ShouldBeDisplayed()
+  public function scriptTruncaleListToolsScriptShouldBePresentForIdModuleOne()
   {
-    $this->assertXPathContentContains('//main', 'scythe chap 2');
+    $this->assertXPathContentContains('//script', '$(function(){$("#truncate_list_widget_id_1").truncate_list_tools(');
   }
 }
diff --git a/tests/scenarios/Templates/activities_widget_cache.html b/tests/scenarios/Templates/activities_widget_cache.html
new file mode 100644
index 00000000000..762042f8ee2
--- /dev/null
+++ b/tests/scenarios/Templates/activities_widget_cache.html
@@ -0,0 +1,17 @@
+<div id="boite_1" class="boite activities_widget widget col-12 card"><div class="widget-header card-header" role="heading" aria-level="2">boite</div><div class="widget-body card-body"><div class="truncate_list_widget" id="truncate_list_widget_id_1"><div class="container-fluid"><div class="row no-gutters"><div class="truncate_list_top_tools col-12"><div class="truncate_list_container container-fluid my-2"><div class="justify-content-start row no-gutters"><div class="truncate_list_size_wrapper col-12 col-sm-3"><span class="truncate_list_size btn btn-sm btn-info"><span class="truncate_list_size_number" title="Nombre total d'&eacute;lements pr&eacute;sent dans la liste">6</span> éléments</span></div><div class="truncate_list_form_wrapper paginated_form col-12 col-sm-9"><form enctype="application/x-www-form-urlencoded" action="GET" class="inline_form row no-gutters" method="post">
+<div class="col row form-group no-gutters wrapper_zendafi_form_selecttoptools inline_form_wrapper_zendafi_form_selecttoptools"><label for="select_top_tools_1" data-name="select_top_tools_1" class="optional col-12 col-sm-5 col-form-label col-form-label-sm pr-1">Afficher</label>
+<div class="col-12 col-sm align-self-center" role="presentation">
+<select name="select_top_tools_1" id="select_top_tools_1" title="Limiter le nombre d'&eacute;l&eacute;ments &agrave; afficher" class="select_size_tool zendafi_form_select_size_tool form-control form-control-sm custom-select custom-select-sm"><option value="3" label="3">3</option><option value="6" label="6">6</option><option value="15" label="15">15</option><option value="10000" label="Tout">Tout</option></select></div></div>
+<div class="col row form-group no-gutters wrapper_zendafi_form_inputtoptools inline_form_wrapper_zendafi_form_inputtoptools"><label for="input_top_tools_1" data-name="input_top_tools_1" class="optional col-12 col-sm-5 col-form-label col-form-label-sm pr-1">Filtrer</label>
+<div class="col-12 col-sm align-self-center" role="presentation">
+<input type="text" name="input_top_tools_1" id="input_top_tools_1" value="" placeholder="Filtrer avec un nom, un mot, une date" title="Filtrer la liste avec des noms, des mots, des dates" class="input_search_tool zendafi_form_input_search_tool form-control form-control-sm" onkeypress="if (event.keyCode == 13) {$(this.form).submit();return false; }"></div></div>
+
+<input type="submit" name="submit_top_tools_1" id="submit_top_tools_1" value="submit_top_tools_1" class="d-none zendafi_form_d-none btn btn-sm btn-primary"></form></div></div></div></div><div id="1" class="truncate_list_wrapper col-12 list-group bg-transparent no_border"><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 2 Date de début de l activité scythe chap 2  05 septembre 2024 Date de fin de l activité scythe chap 2  30 octobre 2024 Nombre de participants de la session scythe chap 2  Participants   0 0 La session scythe chap 2 est complète  Complet dogfighting tricksDate limite d inscription04 septembre 2024Nombre de participantsminimum   0  maximum   0S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/6" data-popup="" title="En savoir plus sur scythe chap 2." class="text-secondary">scythe chap 2</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 2.</span>05 septembre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 2.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 2." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 2.</span>Participants : 0/0</span></span><span title="La session scythe chap 2 est compl&egrave;te." class="badge_tag activity_badge session_full text-left badge badge-danger"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">La session scythe chap 2 est complète.</span>Complet</span></span></div><p class="model_description_Class_SessionActivity">dogfighting tricksDate limite d'inscription04 septembre 2024Nombre de participantsminimum : 0, maximum : 0S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/6" title="En savoir plus sur scythe chap 2." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e363ef9d1" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e363ef9d1" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 2" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 2</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e363ef9d1"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/6" title="Modifier la session du 05 septembre 2024 de l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/57" title="Modifier l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/5" title="Modifier l'article de la session scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/6/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 2" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/6" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 2." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 2 Date de début de l activité scythe chap 2  05 septembre 2024 Date de fin de l activité scythe chap 2  30 octobre 2024 Nombre de participants de la session scythe chap 2  Participants   0 0 La session scythe chap 2 est complète  Complet dogfighting tricksDate limite d inscription04 septembre 2024Nombre de participantsminimum   0  maximum   0S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/7" data-popup="" title="En savoir plus sur scythe chap 2." class="text-secondary">scythe chap 2</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 2.</span>05 septembre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 2.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 2." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 2.</span>Participants : 0/0</span></span><span title="La session scythe chap 2 est compl&egrave;te." class="badge_tag activity_badge session_full text-left badge badge-danger"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">La session scythe chap 2 est complète.</span>Complet</span></span></div><p class="model_description_Class_SessionActivity">dogfighting tricksDate limite d'inscription04 septembre 2024Nombre de participantsminimum : 0, maximum : 0S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/7" title="En savoir plus sur scythe chap 2." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e363f1e09" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e363f1e09" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 2" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 2</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e363f1e09"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/7" title="Modifier la session du 05 septembre 2024 de l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/57" title="Modifier l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/6" title="Modifier l'article de la session scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/7/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 2" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/7" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 2." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 2 Date de début de l activité scythe chap 2  10 octobre 2024 Date de fin de l activité scythe chap 2  30 octobre 2024 Nombre de participants de la session scythe chap 2  Participants   0 10 dogfighting aimDate limite d inscription08 octobre 2024Nombre de participantsminimum   1  maximum   10S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/5" data-popup="" title="En savoir plus sur scythe chap 2." class="text-secondary">scythe chap 2</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 2.</span>10 octobre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 2." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 2.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 2." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 2.</span>Participants : 0/10</span></span></div><p class="model_description_Class_SessionActivity">dogfighting aimDate limite d'inscription08 octobre 2024Nombre de participantsminimum : 1, maximum : 10S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/5" title="En savoir plus sur scythe chap 2." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e363f4111" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e363f4111" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 2" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 2</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e363f4111"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/5" title="Modifier la session du 10 octobre 2024 de l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/57" title="Modifier l'activit&eacute; scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/4" title="Modifier l'article de la session scythe chap 2." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/5/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 2" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/5" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 2." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 1 Date de début de l activité scythe chap 1  05 septembre 2024 Date de fin de l activité scythe chap 1  30 octobre 2024 Nombre de participants de la session scythe chap 1  Participants   0 0 La session scythe chap 1 est complète  Complet dogfighting tricksDate limite d inscription04 septembre 2024Nombre de participantsminimum   0  maximum   0S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/1" data-popup="" title="En savoir plus sur scythe chap 1." class="text-secondary">scythe chap 1</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 1.</span>05 septembre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 1.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 1." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 1.</span>Participants : 0/0</span></span><span title="La session scythe chap 1 est compl&egrave;te." class="badge_tag activity_badge session_full text-left badge badge-danger"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">La session scythe chap 1 est complète.</span>Complet</span></span></div><p class="model_description_Class_SessionActivity">dogfighting tricksDate limite d'inscription04 septembre 2024Nombre de participantsminimum : 0, maximum : 0S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/1" title="En savoir plus sur scythe chap 1." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e36402163" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e36402163" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 1" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 1</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e36402163"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/1" title="Modifier la session du 05 septembre 2024 de l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/56" title="Modifier l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/1" title="Modifier l'article de la session scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/1/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 1" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/1" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 1." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 1 Date de début de l activité scythe chap 1  05 septembre 2024 Date de fin de l activité scythe chap 1  30 octobre 2024 Nombre de participants de la session scythe chap 1  Participants   0 0 La session scythe chap 1 est complète  Complet dogfighting tricksDate limite d inscription04 septembre 2024Nombre de participantsminimum   0  maximum   0S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/2" data-popup="" title="En savoir plus sur scythe chap 1." class="text-secondary">scythe chap 1</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 1.</span>05 septembre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 1.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 1." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 1.</span>Participants : 0/0</span></span><span title="La session scythe chap 1 est compl&egrave;te." class="badge_tag activity_badge session_full text-left badge badge-danger"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">La session scythe chap 1 est complète.</span>Complet</span></span></div><p class="model_description_Class_SessionActivity">dogfighting tricksDate limite d'inscription04 septembre 2024Nombre de participantsminimum : 0, maximum : 0S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/2" title="En savoir plus sur scythe chap 1." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e36404279" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e36404279" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 1" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 1</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e36404279"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/2" title="Modifier la session du 05 septembre 2024 de l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/56" title="Modifier l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/2" title="Modifier l'article de la session scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/2/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 1" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/2" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 1." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="display: none" class="list-group-item bg-transparent px-0 mb-3"><div class="card"><div class="container-fluid"><div class="row no-gutters"><div class="cardify_horizontal_img col-12 col-md-4 col-lg-3 px-0 pl-md-0 pr-md-3" aria-hidden="true"></div><div class="cardify_horizontal_content col-12 col-md-8 col-lg-6 px-0 py-3 py-md-0"><div class="hidde_content">scythe chap 1 Date de début de l activité scythe chap 1  10 octobre 2024 Date de fin de l activité scythe chap 1  30 octobre 2024 Nombre de participants de la session scythe chap 1  Participants   0 10 dogfighting aimDate limite d inscription08 octobre 2024Nombre de participantsminimum   1  maximum   10S inscrire  s</div><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_ActivitySession"><a href="/abonne/detail-session/id/15" data-popup="" title="En savoir plus sur scythe chap 1." class="text-secondary">scythe chap 1</a></div><div title="" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_ActivitySession"><span title="Date de d&eacute;but de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_debut text-left badge badge-info"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de début de l'activité scythe chap 1.</span>10 octobre 2024</span></span><span title="Date de fin de l'activit&eacute; scythe chap 1." class="badge_tag activity_badge session_date_fin text-left badge badge-dark"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Date de fin de l'activité scythe chap 1.</span>30 octobre 2024</span></span><span title="Nombre de participants de la session scythe chap 1." class="badge_tag activity_badge session_attendees text-left badge badge-secondary"><span class="badge_text align-middle d-inline-block text-left"><span class="sr-only">Nombre de participants de la session scythe chap 1.</span>Participants : 0/10</span></span></div><p class="model_description_Class_SessionActivity">dogfighting aimDate limite d'inscription08 octobre 2024Nombre de participantsminimum : 1, maximum : 10S'inscrire</p></div></div><div class="cardify_horizontal_actions col-12 col-md-12 col-lg-3 px-0 pl-lg-3 pr-lg-0"><div class="container-fluid"><div class="row no-gutters"><div class="card_action col col-lg-12 p-0 mx-1 my-1"><a href="/abonne/detail-session/id/15" title="En savoir plus sur scythe chap 1." class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">En savoir plus</div></a></div><div class="card_action 1 col col-lg-12 p-0 mx-1 my-1"><div id="dropdown_67c6e364064df" class="dropdown dropleft dropup"><button class="more_action btn" id="dropdown_button_67c6e364064df" data-toggle="dropdown" aria-haspopup="true"><i title="Voir les actions pour g&eacute;rer scythe chap 1" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Gérer <span class="sr-only">Voir les actions pour gérer scythe chap 1</span></span></button><div class="dropdown-menu" aria-labelledby="dropdown_button_67c6e364064df"><div class="py-0 px-3"><div class="container-fluid"><div class="row no-gutters"><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/edit/id/15" title="Modifier la session du 10 octobre 2024 de l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier session</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/activity/edit/id/56" title="Modifier l'activit&eacute; scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier activité</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/cms/edit/id/3" title="Modifier l'article de la session scythe chap 1." data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier article</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/inscriptions/id/15/search_session_activity_subscription_status/all" title="Nouvelle inscription &agrave; l'activit&eacute; scythe chap 1" class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-users library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Nouvelle inscription</div></a></div><div class="card_action menu_admin_front_anchor col col-lg-12 p-0 mx-1 my-1"><a href="/admin/session-activity/fiche_emargement/id/15" title="Imprimer la feuille d'&eacute;margement de la session scythe chap 1." class="card-link menu_admin_front_anchor" target="_blank"><i class="fas fa-print utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Imprimer émargement</div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="truncate_list_bottom_tools col-12 d-none"><div class="truncate_list_container container-fluid my-2"><div class="justify-content-start row no-gutters"><div class="truncate_list_size_wrapper col-12 col-sm-3"><span class="truncate_list_size btn btn-sm btn-info"><span class="truncate_list_size_number" title="Nombre total d'&eacute;lements pr&eacute;sent dans la liste">6</span> éléments</span></div><div class="truncate_list_form_wrapper paginated_form col-12 col-sm-9"><form enctype="application/x-www-form-urlencoded" action="GET" class="inline_form row no-gutters" method="post">
+<div class="col row form-group no-gutters wrapper_zendafi_form_selectbottomtools inline_form_wrapper_zendafi_form_selectbottomtools"><label for="select_bottom_tools_1" data-name="select_bottom_tools_1" class="optional col-12 col-sm-5 col-form-label col-form-label-sm pr-1">Afficher</label>
+<div class="col-12 col-sm align-self-center" role="presentation">
+<select name="select_bottom_tools_1" id="select_bottom_tools_1" title="Limiter le nombre d'&eacute;l&eacute;ments &agrave; afficher" class="select_size_tool zendafi_form_select_size_tool form-control form-control-sm custom-select custom-select-sm"><option value="3" label="3">3</option><option value="6" label="6">6</option><option value="15" label="15">15</option><option value="10000" label="Tout">Tout</option></select></div></div>
+<div class="col row form-group no-gutters wrapper_zendafi_form_inputbottomtools inline_form_wrapper_zendafi_form_inputbottomtools"><label for="input_bottom_tools_1" data-name="input_bottom_tools_1" class="optional col-12 col-sm-5 col-form-label col-form-label-sm pr-1">Filtrer</label>
+<div class="col-12 col-sm align-self-center" role="presentation">
+<input type="text" name="input_bottom_tools_1" id="input_bottom_tools_1" value="" placeholder="Filtrer avec un nom, un mot, une date" title="Filtrer la liste avec des noms, des mots, des dates" class="input_search_tool zendafi_form_input_search_tool form-control form-control-sm" onkeypress="if (event.keyCode == 13) {$(this.form).submit();return false; }"></div></div>
+
+<input type="submit" name="submit_bottom_tools_1" id="submit_bottom_tools_1" value="submit_bottom_tools_1" class="d-none zendafi_form_d-none btn btn-sm btn-primary"></form></div></div></div></div></div></div></div></div></div>
-- 
GitLab