diff --git a/js/v2/bib-assignments.js b/js/v2/bib-assignments.js
index de3e976..c440970 100644
--- a/js/v2/bib-assignments.js
+++ b/js/v2/bib-assignments.js
@@ -478,7 +478,7 @@
if (toolId === 'anomalies') {
var anomCount = panel.querySelector('.bib-anomalies-count');
var destBadge = dest.querySelector('[data-bib-anomalies-nav-badge]');
- var strTodo = bibJs('jsAnomaliesNavTodo') || 'Élément à valider';
+ var strTodoFmt = bibJs('jsAnomaliesNavTodoFmt') || 'Élément à valider : %d';
var intCount = 0;
var blnPending = true;
@@ -492,13 +492,19 @@
}
}
+ function bibAnomaliesNavBadgeLabel(count) {
+ return strTodoFmt.replace(/%d/g, String(count));
+ }
+
if (!destBadge) {
dest.innerHTML = '';
if (!blnPending && intCount > 0) {
+ var strLabel = bibAnomaliesNavBadgeLabel(intCount);
dest.innerHTML = '';
}
return;
@@ -508,11 +514,14 @@
destBadge.classList.add('bib-ui-hidden');
destBadge.setAttribute('aria-hidden', 'true');
destBadge.textContent = '';
+ destBadge.removeAttribute('data-bib-anomalies-nav-count');
} else {
+ var strBadgeLabel = bibAnomaliesNavBadgeLabel(intCount);
destBadge.classList.remove('bib-ui-hidden');
destBadge.removeAttribute('aria-hidden');
- destBadge.textContent = strTodo;
- destBadge.setAttribute('title', strTodo);
+ destBadge.textContent = strBadgeLabel;
+ destBadge.setAttribute('title', strBadgeLabel);
+ destBadge.setAttribute('data-bib-anomalies-nav-count', String(intCount));
}
}
}
diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php
index 68aa37e..2b659ac 100644
--- a/php/inc_fx_promoteur.php
+++ b/php/inc_fx_promoteur.php
@@ -3332,6 +3332,7 @@ function fxBibStaticFallback($clef) {
'bib_v4_event_config_title' => ['fr' => "Configuration globale pour l'assignation de dossard", 'en' => 'Global bib assignment settings'],
'bib_v4_event_config_inter_epr_on' => ['fr' => 'Inter épreuve', 'en' => 'Inter-race'],
'bib_v4_anomalies_nav_todo' => ['fr' => 'Élément à valider', 'en' => 'Item to review'],
+ 'bib_v4_anomalies_nav_todo_fmt' => ['fr' => 'Élément à valider : %d', 'en' => 'Item to review: %d'],
'bib_v4_qty_summary_title' => ['fr' => 'Sommaire des quantités', 'en' => 'Quantity summary'],
'bib_v4_qty_summary_a_assigner' => ['fr' => 'À assigner', 'en' => 'To assign'],
'bib_v4_qty_summary_bib_restant' => ['fr' => 'Dossards restants', 'en' => 'Bibs remaining'],
@@ -3579,7 +3580,8 @@ function fxBibModuleJsDataAttrs() {
'assign-full' => 'bib_v4_ajax_assign_full',
'assign-partial' => 'bib_v4_ajax_assign_partial',
'assign-none' => 'bib_v4_ajax_assign_none',
- 'anomalies-nav-todo' => 'bib_v4_anomalies_nav_todo',
+ 'anomalies-nav-todo' => 'bib_v4_anomalies_nav_todo',
+ 'anomalies-nav-todo-fmt' => 'bib_v4_anomalies_nav_todo_fmt',
];
$html = '';
foreach ($map as $attr => $clef) {
@@ -4421,10 +4423,14 @@ function renderBibAnomaliesNavBadge($intCount = 0, $blnPending = false) {
. '" data-bib-anomalies-nav-badge="1" aria-hidden="true">';
}
- $strLabel = fxBibTexte('bib_v4_anomalies_nav_todo', 0);
+ $strLabel = fxBibMsg('bib_v4_anomalies_nav_todo_fmt', (int)$intCount);
+ if ($strLabel === '' || $strLabel === 'bib_v4_anomalies_nav_todo_fmt') {
+ $strLabel = fxBibTexte('bib_v4_anomalies_nav_todo', 0) . ' : ' . (int)$intCount;
+ }
return '';
diff --git a/php/inc_settings.php b/php/inc_settings.php
index d43d3a7..eaf7b15 100644
--- a/php/inc_settings.php
+++ b/php/inc_settings.php
@@ -7,7 +7,7 @@
* Constantes *
*
**************/
-define('_VERSION_CODE', '4.72.770');
+define('_VERSION_CODE', '4.72.771');
define('_DATE_CODE', '2026-07-08');
//MSIN-4290
define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe');
diff --git a/sql/MSIN-4440-anomalies-nav-badge.sql b/sql/MSIN-4440-anomalies-nav-badge.sql
index 6632520..11e69cc 100644
--- a/sql/MSIN-4440-anomalies-nav-badge.sql
+++ b/sql/MSIN-4440-anomalies-nav-badge.sql
@@ -1,9 +1,15 @@
-- MSIN-4440 — Pastille tuile Anomalies (grille outils bib v4)
--- Libellé « Élément à valider » sur la tuile, style Inter épreuve (pas de compteur rouge).
+-- Libellé « Élément à valider : N » sur la tuile, style Inter épreuve (pas de compteur rouge).
-- Idempotent.
-SELECT 'bib_v4_anomalies_nav_todo', 'fr', 'Élément à valider', 'Pastille tuile Anomalies quand au moins une anomalie est ouverte.', 'compte.php', '', 0, 1, '', '', '', NOW()
+SELECT 'bib_v4_anomalies_nav_todo', 'fr', 'Élément à valider', 'Libellé court pastille tuile Anomalies.', 'compte.php', '', 0, 1, '', '', '', NOW()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'bib_v4_anomalies_nav_todo' AND info_langue = 'fr' AND info_prg = 'compte.php');
-SELECT 'bib_v4_anomalies_nav_todo', 'en', 'Item to review', 'Anomalies tool tile badge when at least one issue is present.', 'compte.php', '', 0, 1, '', '', '', NOW()
+SELECT 'bib_v4_anomalies_nav_todo', 'en', 'Item to review', 'Short label for anomalies tool tile badge.', 'compte.php', '', 0, 1, '', '', '', NOW()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'bib_v4_anomalies_nav_todo' AND info_langue = 'en' AND info_prg = 'compte.php');
+
+SELECT 'bib_v4_anomalies_nav_todo_fmt', 'fr', 'Élément à valider : %d', 'Pastille tuile Anomalies avec quantité.', 'compte.php', '', 0, 1, '', '', '', NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'bib_v4_anomalies_nav_todo_fmt' AND info_langue = 'fr' AND info_prg = 'compte.php');
+
+SELECT 'bib_v4_anomalies_nav_todo_fmt', 'en', 'Item to review: %d', 'Anomalies tool tile badge with count.', 'compte.php', '', 0, 1, '', '', '', NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM info WHERE info_clef = 'bib_v4_anomalies_nav_todo_fmt' AND info_langue = 'en' AND info_prg = 'compte.php');