diff --git a/css/style.css b/css/style.css index 7f4bcdd..28fb03f 100644 --- a/css/style.css +++ b/css/style.css @@ -1078,7 +1078,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { margin-top:10px; } -#module-bib .bib-workspace-nav{ +#module-bib .bib-workspace-bar{ display:flex; align-items:stretch; gap:4px; @@ -1089,6 +1089,12 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { overflow-x:auto; } +#module-bib .bib-workspace-nav{ + display:flex; + align-items:stretch; + gap:4px; +} + #module-bib .bib-workspace-tab{ display:inline-flex; align-items:center; @@ -1107,6 +1113,41 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { cursor:pointer; } +/* MSIN-4470 — L'impression PDF reste accessible à droite des espaces principaux. */ +#module-bib .bib-workspace-action{ + display:flex; + flex:0 0 auto; + margin-left:auto; +} + +#module-bib .bib-workspace-action .bib-tool-btn{ + width:auto; + min-height:42px; + padding:8px 16px; + border-width:0; + background:transparent; + color:#495057; + font-size:13px; + font-weight:600; + line-height:1.25; +} + +#module-bib .bib-workspace-action .bib-tool-btn:not(.is-active):hover, +#module-bib .bib-workspace-action .bib-tool-btn:not(.is-active):focus{ + background:#e8f0f8; + color:#1e4a9e; + box-shadow:none; +} + +#module-bib .bib-workspace-action .bib-tool-btn.is-active, +#module-bib .bib-workspace-action .bib-tool-btn.is-active:hover, +#module-bib .bib-workspace-action .bib-tool-btn.is-active:focus{ + background:#2f5fd0; + color:#fff; + border-color:transparent; + box-shadow:none; +} + #module-bib .bib-workspace-tab:hover, #module-bib .bib-workspace-tab:focus{ background:#e8f0f8; @@ -1655,6 +1696,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { } @media (max-width:768px){ + #module-bib .bib-workspace-bar, #module-bib .bib-workspace-nav{ align-items:stretch; } @@ -2103,13 +2145,18 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { .bib-race-summary__group h4{ margin:0 0 5px; - color:#6c757d; - font-size:10px; - font-weight:700; - letter-spacing:.03em; + color:#1e3a6e; + font-size:11px; + font-weight:800; + letter-spacing:.06em; text-transform:uppercase; } +/* MSIN-4470 — Accentue légèrement les deux repères principaux de chaque épreuve. */ +.bib-race-summary__group--bibs h4{ + color:#1e4fbf; +} + .bib-race-summary__stats{ display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); diff --git a/js/v2/bib-assignments.js b/js/v2/bib-assignments.js index f2c0e7f..5430b74 100644 --- a/js/v2/bib-assignments.js +++ b/js/v2/bib-assignments.js @@ -540,9 +540,14 @@ if (toolId === 'event_config') { return 'settings'; } - if (toolId === 'global_batch' || toolId === 'dist_print') { + if (toolId === 'global_batch') { return 'operations'; } + // MSIN-4470 — L'action PDF est globale et s'ouvre depuis la barre supérieure + // sans déplacer l'utilisateur vers un autre espace de travail. + if (toolId === 'dist_print') { + return bibActiveWorkspace; + } return 'preparation'; } @@ -1983,6 +1988,15 @@ bibOpenTool(toolBtn.getAttribute('data-bib-tool')); }); + // MSIN-4469 — Le téléchargement part dans un nouvel onglet; + // l’écran principal revient aussitôt à Quantités et assignation. + moduleBib.addEventListener('submit', function (e) { + var productionForm = e.target.closest('.bib-production-return-preparation-form'); + if (productionForm && moduleBib.contains(productionForm)) { + bibSetWorkspace('preparation'); + } + }); + moduleBib.addEventListener('click', function (e) { var workspaceTab = e.target.closest('.bib-workspace-tab'); if (workspaceTab && moduleBib.contains(workspaceTab)) { diff --git a/php/inc_fx_bib_production.php b/php/inc_fx_bib_production.php index cbb3713..a9ef2b1 100644 --- a/php/inc_fx_bib_production.php +++ b/php/inc_fx_bib_production.php @@ -160,6 +160,8 @@ function fxBibProductionCollectSnapshot($intEveId, $strLangue = 'fr') { continue; } + // MSIN-4469 — La commande porte sur toute la séquence à imprimer, + // même lorsqu’aucun coureur ni aucun dossard assigné ne s’y trouve encore. $tabRangesRaw = $objDatabase->fxGetResults( "SELECT epr_bib_id, epr_bib_start, epr_bib_finish FROM inscriptions_epreuves_bib diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 9c6023d..559acd2 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -5048,7 +5048,8 @@ function renderBibProductionPreview(array $tabEpreuves, $strLangue = 'fr') {

-
+ @@ -5080,7 +5081,8 @@ function renderBibProductionPreview(array $tabEpreuves, $strLangue = 'fr') { 0) { ?>

- + @@ -5160,7 +5162,7 @@ function renderBibProductionPreview(array $tabEpreuves, $strLangue = 'fr') { } /** - * MSIN-4440 / MSIN-4467 — Espaces principaux + outils et panneau de détail unique. + * MSIN-4440 / MSIN-4467 / MSIN-4470 — Espaces principaux + outils et panneau de détail unique. */ function renderBibToolNav($int_eve_id, $tabEpreuves, $strLangue = 'fr') { $int_eve_id = (int)$int_eve_id; @@ -5181,12 +5183,17 @@ function renderBibToolNav($int_eve_id, $tabEpreuves, $strLangue = 'fr') { ob_start(); ?>
- +
+ +
+ +
+
@@ -5204,7 +5211,6 @@ function renderBibToolNav($int_eve_id, $tabEpreuves, $strLangue = 'fr') { -
@@ -5697,15 +5703,17 @@ function fxShowBibTool4($str_code, $int_eve_id, $strLangue){ ?> -
-

- -
+ ' . $strPermInspectBadges . '
'; + } + ?>
> diff --git a/php/inc_settings.php b/php/inc_settings.php index af73077..3994a6d 100644 --- a/php/inc_settings.php +++ b/php/inc_settings.php @@ -7,7 +7,7 @@ * Constantes * * **************/ -define('_VERSION_CODE', '4.72.856'); // MSIN-4469 +define('_VERSION_CODE', '4.72.858'); // MSIN-4470 define('_DATE_CODE', '2026-07-21'); //MSIN-4290 define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe'); diff --git a/sql/MSIN-4470-corrections-interface-dossards.sql b/sql/MSIN-4470-corrections-interface-dossards.sql new file mode 100644 index 0000000..2e71615 --- /dev/null +++ b/sql/MSIN-4470-corrections-interface-dossards.sql @@ -0,0 +1,63 @@ +-- MSIN-4470 — Corrections de l'interface des dossards +-- Prérequis : MSIN-4424-bib-allow-inter-epr.sql et MSIN-4467-refonte-visuelle-dossards.sql. +-- Idempotent. Exécuter avant le déploiement PHP/CSS/JS. + +UPDATE info +SET info_texte = 'Autoriser les mêmes numéros de dossard entre épreuves (doublons)', + info_description = 'MSIN-4470' +WHERE info_clef = 'bib_v4_allow_inter_epr' + AND info_langue = 'fr' + AND info_prg = 'compte.php'; + +UPDATE info +SET info_texte = 'Allow the same bib numbers across races (duplicates)', + info_description = 'MSIN-4470' +WHERE info_clef = 'bib_v4_allow_inter_epr' + AND info_langue = 'en' + AND info_prg = 'compte.php'; + +INSERT INTO info ( + info_clef, + info_langue, + info_texte, + info_aide, + info_prg, + info_description, + info_trie, + info_actif, + info_option1, + info_option2, + info_option3, + info_creation +) +SELECT + src.info_clef, + src.info_langue, + src.info_texte, + '', + 'compte.php', + 'MSIN-4470', + 0, + 1, + '', + '', + '', + NOW() +FROM ( + SELECT + 'bib_v4_allow_inter_epr' AS info_clef, + 'fr' AS info_langue, + 'Autoriser les mêmes numéros de dossard entre épreuves (doublons)' AS info_texte + UNION ALL + SELECT + 'bib_v4_allow_inter_epr', + 'en', + 'Allow the same bib numbers across races (duplicates)' +) src +WHERE NOT EXISTS ( + SELECT 1 + FROM info current_info + WHERE current_info.info_clef = src.info_clef + AND current_info.info_langue = src.info_langue + AND current_info.info_prg = 'compte.php' +);