From 28ce5f929e8382863509bbf878f9ea4a296a795a Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 16 Jun 2026 16:08:57 -0400 Subject: [PATCH] MSIN-4379: Refactor bib help system with dynamic inline assistance and improved tooltip handling. Updated JavaScript selectors and added new CSS styles for inline help elements. Introduced new Python scripts for generating translation files in both Excel and SQL formats. --- MSIN-4379-bib_v4-traductions.xlsx | Bin 0 -> 9448 bytes css/style.css | 19 +++ inc_footer_scripts.php | 11 +- php/inc_fx_promoteur.php | 59 +++++---- sql/MSIN-4379-bib_v4-traductions.sql | 67 ++++++++++ tools/gen_bib_v4_traductions_sql.py | 114 +++++++++++++++++ tools/gen_bib_v4_traductions_xlsx.py | 177 +++++++++++++++++++++++++++ ~$MSIN-4379-bib_v4-traductions.xlsx | Bin 0 -> 165 bytes 8 files changed, 420 insertions(+), 27 deletions(-) create mode 100644 MSIN-4379-bib_v4-traductions.xlsx create mode 100644 sql/MSIN-4379-bib_v4-traductions.sql create mode 100644 tools/gen_bib_v4_traductions_sql.py create mode 100644 tools/gen_bib_v4_traductions_xlsx.py create mode 100644 ~$MSIN-4379-bib_v4-traductions.xlsx diff --git a/MSIN-4379-bib_v4-traductions.xlsx b/MSIN-4379-bib_v4-traductions.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c1e79c8cc068f215c33c11dcc85dec6298f0681f GIT binary patch literal 9448 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 T9YH`Ky?*^(qZW|jkGuZ^iY#PU literal 0 HcmV?d00001 diff --git a/css/style.css b/css/style.css index da747ec..0329f48 100644 --- a/css/style.css +++ b/css/style.css @@ -1048,6 +1048,25 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { color:#212529; } +/* (?) inline dans un bouton action — masqué avec le bouton parent. */ +.bib-aide-inline{ + display:inline; + margin-left:0.35em; + font-weight:700; + cursor:help; + white-space:nowrap; +} + +button .bib-aide-inline, +.badge .bib-aide-inline{ + color:inherit; +} + +.bib-aide-inline:focus{ + outline:1px dotted currentColor; + outline-offset:2px; +} + .tippy-box[data-theme~='ms1-bib']{ background-color:#1e293b; color:#f8fafc; diff --git a/inc_footer_scripts.php b/inc_footer_scripts.php index a0b3295..61de8b0 100644 --- a/inc_footer_scripts.php +++ b/inc_footer_scripts.php @@ -2010,7 +2010,7 @@ if ($strLangue == 'fr') { function initModuleBibTippy(root) { if (typeof tippy === 'undefined') return; let scope = root || moduleBib; - scope.querySelectorAll('[data-tippy-content], .btn-aide-bib').forEach(function (el) { + scope.querySelectorAll('[data-tippy-content], .bib-aide-trigger').forEach(function (el) { if (el._tippy) { el._tippy.destroy(); } @@ -2024,7 +2024,7 @@ if ($strLangue == 'fr') { interactive: false }); - tippy(scope.querySelectorAll('.btn-aide-bib'), { + tippy(scope.querySelectorAll('.bib-aide-trigger'), { theme: 'ms1-bib ms1-bib-aide', animation: 'fade', allowHTML: true, @@ -2032,6 +2032,13 @@ if ($strLangue == 'fr') { interactive: true, content: bibTippyAideContent }); + + scope.querySelectorAll('.bib-aide-inline:not([data-bib-aide-bound])').forEach(function (el) { + el.setAttribute('data-bib-aide-bound', '1'); + el.addEventListener('click', function (e) { + e.stopPropagation(); + }); + }); } function setBibContainerHtml(row, html) { diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 6234d3c..35afcdf 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -2725,18 +2725,37 @@ function fxBibTippyAttr($clef) { return ' data-tippy-content="' . fxBibEsc($strTip) . '"'; } -/** Bouton (?) — pop-up long depuis info_aide ; absent si info_aide vide. */ -function fxBibAideButton($clef) { +/** Contenu aide (?) — texte caché + « ? » avec espace après. */ +function fxBibAideInner($clef) { $strAide = trim(fxBibAide($clef, 0)); if ($strAide === '') { return ''; } - // Texte dans un span caché : préserve les retours à la ligne saisis dans traduction.php. - return ''; } +/** (?) inline — à l'intérieur d'un bouton (masqué avec le bouton parent). */ +function fxBibAideInline($clef) { + $strInner = fxBibAideInner($clef); + if ($strInner === '') { + return ''; + } + return '' + . $strInner + . ''; +} + /** Libellé info_texte + bouton (?) si info_aide renseigné. */ function fxBibTexteAide($clef, $mem_echo = 1, $strFallback = '') { $str = fxBibTexte($clef, 0, $strFallback); @@ -2765,9 +2784,8 @@ function renderBibAddRangeButton($epr_id, $extraStyle = '') { - - - - - + style=""> @@ -2830,20 +2844,17 @@ function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAu
- - + - - + -
@@ -2853,15 +2864,13 @@ function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAu
- -
diff --git a/sql/MSIN-4379-bib_v4-traductions.sql b/sql/MSIN-4379-bib_v4-traductions.sql new file mode 100644 index 0000000..8294a5b --- /dev/null +++ b/sql/MSIN-4379-bib_v4-traductions.sql @@ -0,0 +1,67 @@ +-- MSIN-4379 — Traductions écran dossards v4 (table info) +-- Terminologie : séquences de dossards (pas « plages »). +-- info_prg = compte.php uniquement. +-- Exécuter sur la BD client (inscription). + +DELETE FROM info +WHERE info_clef LIKE 'bib_v4_%' + AND info_prg IN ('compte.php', 'ajax_bib_range.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) VALUES ('bib_v4_assign_title', 'fr', 'Assignation de dossard', 'Définissez les séquences de dossards et assignez les numéros aux participants inscrits.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_assign_title', 'en', 'Bib assignment', 'Define bib sequences and assign numbers to registered participants.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_gestion_title', 'fr', 'Gestion de l''épreuve', 'Bloc réservé à la gestion des quantités et paramètres — à venir.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_gestion_title', 'en', 'Event management', 'Reserved for quantities and settings — coming soon.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_gestion_placeholder', 'fr', 'Quantités et paramètres — à venir.', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_gestion_placeholder', 'en', 'Quantities and settings — coming soon.', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_start', 'fr', 'Début', 'Premier numéro de la séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_start', 'en', 'Start', 'First number in the sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_end', 'fr', 'Fin', 'Dernier numéro de la séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_end', 'en', 'End', 'Last number in the sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_ok', 'fr', 'OK', 'Enregistrer cette séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_ok', 'en', 'OK', 'Save this sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_del', 'fr', 'Suppr.', 'Supprimer la séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_del', 'en', 'Del.', 'Delete this sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_last', 'fr', 'Dernier', 'Dernier dossard assigné dans la séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_last', 'en', 'Last', 'Last bib assigned in the sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_used', 'fr', 'Utilisé', 'Nombre de dossards déjà assignés.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_used', 'en', 'Used', 'Number of bibs already assigned.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_avail', 'fr', 'Dispo', 'Dossards encore disponibles dans la séquence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_col_avail', 'en', 'Avail.', 'Bibs still available in the sequence.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_add', 'fr', '+ Ajouter', 'Ajoute une nouvelle séquence de dossards pour cette épreuve.\n\nIndiquez le numéro de début et de fin, puis cliquez OK.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_add', 'en', '+ Add', 'Adds a new bib sequence for this race.\n\nEnter start and end numbers, then click OK.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_add', 'fr', 'Ajouter une séquence de dossards', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_add', 'en', 'Add a bib sequence', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_assign_seq', 'fr', 'Assigner par séquence', 'Mode batch : choisissez une ou plusieurs séquences de dossards et l''ordre d''assignation, puis GO pour assigner tous les participants sans dossard.\n\nUtilisez Simuler pour prévisualiser sans modifier la base.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_assign_seq', 'en', 'Assign by sequence', 'Batch mode: select one or more bib sequences and the assignment order, then GO to assign all participants without a bib.\n\nUse Simulate to preview without saving.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_assign_seq_cancel', 'fr', 'Annuler', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_assign_seq_cancel', 'en', 'Cancel', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_assign_seq', 'fr', 'Assignation groupée par séquences', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_assign_seq', 'en', 'Batch assign by sequences', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_reset', 'fr', 'Réinitialiser', 'Retire les dossards déjà assignés pour les séquences sélectionnées.\n\nAttention : vérifiez l''impact avant de confirmer.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_reset', 'en', 'Reset', 'Removes assigned bibs for the selected sequences.\n\nWarning: check the impact before confirming.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_reset', 'fr', 'Retirer les dossards assignés', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_reset', 'en', 'Remove assigned bibs', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto', 'fr', 'Assignation automatique', 'Active l''assignation automatique à chaque nouvelle inscription dans les séquences choisies.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto', 'en', 'Automatic assignment', 'Automatically assigns a bib on each new registration using the selected sequences.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_config', 'fr', 'Auto — configurer', 'Modifie les séquences utilisées pour l''assignation automatique.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_config', 'en', 'Auto — configure', 'Change the sequences used for automatic assignment.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_auto', 'fr', 'Dossard assigné automatiquement à l''inscription', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_tip_auto', 'en', 'Auto-assign bib on registration', '', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_badge', 'fr', 'Auto actif', 'L''assignation automatique est activée pour cette épreuve.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_badge', 'en', 'Auto on', 'Automatic assignment is enabled for this race.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_select_hint', 'fr', 'Sélectionnez au moins une séquence.', 'Cochez les séquences à utiliser pour l''assignation auto, puis cliquez Accepter.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_select_hint', 'en', 'Select at least one sequence.', 'Check the sequences to use for auto assignment, then click Accept.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_accept', 'fr', 'Accepter', 'Enregistre la configuration d''assignation automatique.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_accept', 'en', 'Accept', 'Saves the automatic assignment configuration.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_cancel', 'fr', 'Annuler', 'Quitte le mode édition sans enregistrer.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_cancel', 'en', 'Cancel', 'Exits edit mode without saving.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_disable', 'fr', 'Désactiver l''auto', 'Désactive l''assignation automatique. Les séquences de dossards restent en place.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_auto_disable', 'en', 'Disable auto', 'Disables automatic assignment. Bib sequences are kept.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_order', 'fr', 'Ordre d''assignation', 'Critère pour trier les participants avant d''attribuer les dossards (nom, date d''inscription, équipe, etc.).', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_order', 'en', 'Assignment order', 'Sort order for participants before assigning bibs (name, registration date, team, etc.).', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_info', 'fr', 'Sélectionnez les séquences puis GO.', 'Le résumé (disponibles / à assigner / manquants) s''affiche ici après simulation ou GO.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_info', 'en', 'Select sequences then click GO.', 'Summary (available / to assign / missing) appears here after simulate or GO.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_simulate', 'fr', 'Simuler', 'Affiche qui recevrait quel dossard sans modifier la base de données.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_simulate', 'en', 'Simulate', 'Shows who would receive which bib without changing the database.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_go', 'fr', 'GO', 'Lance l''assignation batch pour de vrai.', 'compte.php', '', 0, 1, '', '', '', NOW()); +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) VALUES ('bib_v4_batch_go', 'en', 'GO', 'Runs the batch assignment for real.', 'compte.php', '', 0, 1, '', '', '', NOW()); diff --git a/tools/gen_bib_v4_traductions_sql.py b/tools/gen_bib_v4_traductions_sql.py new file mode 100644 index 0000000..fdd471c --- /dev/null +++ b/tools/gen_bib_v4_traductions_sql.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +"""Génère sql/MSIN-4379-bib_v4-traductions.sql depuis le brouillon Excel (terminologie séquences).""" + +def esc(s): + if s is None: + return '' + s = str(s).replace('\r\n', '\n').replace('\r', '\n') + s = s.replace('\\', '\\\\').replace("'", "''").replace('\n', '\\n') + return s + +# clef, texte_fr, aide_fr, texte_en, aide_en +ROWS = [ + ("bib_v4_assign_title", + "Assignation de dossard", + "Définissez les séquences de dossards et assignez les numéros aux participants inscrits.", + "Bib assignment", + "Define bib sequences and assign numbers to registered participants."), + ("bib_v4_gestion_title", + "Gestion de l'épreuve", + "Bloc réservé à la gestion des quantités et paramètres — à venir.", + "Event management", + "Reserved for quantities and settings — coming soon."), + ("bib_v4_gestion_placeholder", + "Quantités et paramètres — à venir.", + "", + "Quantities and settings — coming soon.", + ""), + ("bib_v4_col_start", "Début", "Premier numéro de la séquence.", "Start", "First number in the sequence."), + ("bib_v4_col_end", "Fin", "Dernier numéro de la séquence.", "End", "Last number in the sequence."), + ("bib_v4_col_ok", "OK", "Enregistrer cette séquence.", "OK", "Save this sequence."), + ("bib_v4_col_del", "Suppr.", "Supprimer la séquence.", "Del.", "Delete this sequence."), + ("bib_v4_col_last", "Dernier", "Dernier dossard assigné dans la séquence.", "Last", "Last bib assigned in the sequence."), + ("bib_v4_col_used", "Utilisé", "Nombre de dossards déjà assignés.", "Used", "Number of bibs already assigned."), + ("bib_v4_col_avail", "Dispo", "Dossards encore disponibles dans la séquence.", "Avail.", "Bibs still available in the sequence."), + ("bib_v4_add", "+ Ajouter", + "Ajoute une nouvelle séquence de dossards pour cette épreuve.\n\nIndiquez le numéro de début et de fin, puis cliquez OK.", + "+ Add", + "Adds a new bib sequence for this race.\n\nEnter start and end numbers, then click OK."), + ("bib_v4_tip_add", "Ajouter une séquence de dossards", "", "Add a bib sequence", ""), + ("bib_v4_assign_seq", "Assigner par séquence", + "Mode batch : choisissez une ou plusieurs séquences de dossards et l'ordre d'assignation, puis GO pour assigner tous les participants sans dossard.\n\nUtilisez Simuler pour prévisualiser sans modifier la base.", + "Assign by sequence", + "Batch mode: select one or more bib sequences and the assignment order, then GO to assign all participants without a bib.\n\nUse Simulate to preview without saving."), + ("bib_v4_assign_seq_cancel", "Annuler", "", "Cancel", ""), + ("bib_v4_tip_assign_seq", "Assignation groupée par séquences", "", "Batch assign by sequences", ""), + ("bib_v4_reset", "Réinitialiser", + "Retire les dossards déjà assignés pour les séquences sélectionnées.\n\nAttention : vérifiez l'impact avant de confirmer.", + "Reset", + "Removes assigned bibs for the selected sequences.\n\nWarning: check the impact before confirming."), + ("bib_v4_tip_reset", "Retirer les dossards assignés", "", "Remove assigned bibs", ""), + ("bib_v4_auto", "Assignation automatique", + "Active l'assignation automatique à chaque nouvelle inscription dans les séquences choisies.", + "Automatic assignment", + "Automatically assigns a bib on each new registration using the selected sequences."), + ("bib_v4_auto_config", "Auto — configurer", + "Modifie les séquences utilisées pour l'assignation automatique.", + "Auto — configure", + "Change the sequences used for automatic assignment."), + ("bib_v4_tip_auto", "Dossard assigné automatiquement à l'inscription", "", "Auto-assign bib on registration", ""), + ("bib_v4_auto_badge", "Auto actif", "L'assignation automatique est activée pour cette épreuve.", "Auto on", "Automatic assignment is enabled for this race."), + ("bib_v4_auto_select_hint", "Sélectionnez au moins une séquence.", + "Cochez les séquences à utiliser pour l'assignation auto, puis cliquez Accepter.", + "Select at least one sequence.", + "Check the sequences to use for auto assignment, then click Accept."), + ("bib_v4_auto_accept", "Accepter", "Enregistre la configuration d'assignation automatique.", "Accept", "Saves the automatic assignment configuration."), + ("bib_v4_auto_cancel", "Annuler", "Quitte le mode édition sans enregistrer.", "Cancel", "Exits edit mode without saving."), + ("bib_v4_auto_disable", "Désactiver l'auto", + "Désactive l'assignation automatique. Les séquences de dossards restent en place.", + "Disable auto", + "Disables automatic assignment. Bib sequences are kept."), + ("bib_v4_batch_order", "Ordre d'assignation", + "Critère pour trier les participants avant d'attribuer les dossards (nom, date d'inscription, équipe, etc.).", + "Assignment order", + "Sort order for participants before assigning bibs (name, registration date, team, etc.)."), + ("bib_v4_batch_info", "Sélectionnez les séquences puis GO.", + "Le résumé (disponibles / à assigner / manquants) s'affiche ici après simulation ou GO.", + "Select sequences then click GO.", + "Summary (available / to assign / missing) appears here after simulate or GO."), + ("bib_v4_batch_simulate", "Simuler", + "Affiche qui recevrait quel dossard sans modifier la base de données.", + "Simulate", + "Shows who would receive which bib without changing the database."), + ("bib_v4_batch_go", "GO", "Lance l'assignation batch pour de vrai.", "GO", "Runs the batch assignment for real."), +] + +PRG = 'compte.php' +lines = [ + "-- MSIN-4379 — Traductions écran dossards v4 (table info)", + "-- Terminologie : séquences de dossards (pas « plages »).", + "-- info_prg = compte.php uniquement.", + "-- Exécuter sur la BD client (inscription).", + "", + "DELETE FROM info", + "WHERE info_clef LIKE 'bib_v4_%'", + " AND info_prg IN ('compte.php', 'ajax_bib_range.php');", + "", +] + +for clef, txt_fr, aide_fr, txt_en, aide_en in ROWS: + for lang, txt, aide in (('fr', txt_fr, aide_fr), ('en', txt_en, aide_en)): + lines.append( + "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) " + "VALUES (" + f"'{esc(clef)}', '{lang}', '{esc(txt)}', '{esc(aide)}', '{PRG}', " + "'', 0, 1, '', '', '', NOW());" + ) + +out = r"c:\dev_v4\ms1inscription4\sql\MSIN-4379-bib_v4-traductions.sql" +with open(out, 'w', encoding='utf-8') as f: + f.write('\n'.join(lines) + '\n') + +print(f"Written: {out}") +print(f"INSERT rows: {len(ROWS) * 2}") diff --git a/tools/gen_bib_v4_traductions_xlsx.py b/tools/gen_bib_v4_traductions_xlsx.py new file mode 100644 index 0000000..359ef0d --- /dev/null +++ b/tools/gen_bib_v4_traductions_xlsx.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +"""Génère MSIN-4379-bib_v4-traductions.xlsx — brouillon traductions table info.""" +from openpyxl import Workbook +from openpyxl.styles import Font, PatternFill, Alignment +from openpyxl.utils import get_column_letter + +rows = [ + ("bib_v4_assign_title", "En-tête bloc assignation", "libellé", + "Assignation de dossard", + "Définissez les plages de numéros et assignez les dossards aux participants inscrits.", + "Bib assignment", + "Define bib ranges and assign numbers to registered participants.", + "info_texte max 50 car."), + ("bib_v4_gestion_title", "En-tête bloc gestion (masqué phase 2)", "libellé", + "Gestion de l'épreuve", + "Bloc réservé à la gestion des quantités et paramètres — à venir.", + "Event management", + "Reserved for quantities and settings — coming soon.", + "Phase 2 — masqué pour l'instant"), + ("bib_v4_gestion_placeholder", "Contenu bloc gestion", "libellé", + "Quantités et paramètres — à venir.", + "", + "Quantities and settings — coming soon.", + "", + ""), + ("bib_v4_col_start", "Colonne tableau séquences", "colonne", + "Début", "Premier numéro de la plage.", "Start", "First number in the range.", "aide optionnelle"), + ("bib_v4_col_end", "Colonne tableau séquences", "colonne", + "Fin", "Dernier numéro de la plage.", "End", "Last number in the range.", ""), + ("bib_v4_col_ok", "Colonne tableau séquences", "colonne", + "OK", "Enregistrer cette plage.", "OK", "Save this range.", ""), + ("bib_v4_col_del", "Colonne tableau séquences", "colonne", + "Suppr.", "Supprimer la plage.", "Del.", "Delete this range.", ""), + ("bib_v4_col_last", "Colonne tableau séquences", "colonne", + "Dernier", "Dernier dossard assigné dans la plage.", "Last", "Last bib assigned in the range.", ""), + ("bib_v4_col_used", "Colonne tableau séquences", "colonne", + "Utilisé", "Nombre de dossards déjà assignés.", "Used", "Number of bibs already assigned.", ""), + ("bib_v4_col_avail", "Colonne tableau séquences", "colonne", + "Dispo", "Dossards encore disponibles dans la plage.", "Avail.", "Bibs still available in the range.", ""), + ("bib_v4_add", "Bouton + ajouter séquence", "libellé + ?", + "+ Ajouter", + "Ajoute une nouvelle plage de dossards pour cette épreuve.\n\nIndiquez le numéro de début et de fin, puis cliquez OK.", + "+ Add", + "Adds a new bib range for this race.\n\nEnter start and end numbers, then click OK.", + "Libellé bouton ; aide = pop-up ?"), + ("bib_v4_tip_add", "Survol bouton +", "tip", + "Ajouter une plage de dossards", "", "Add a bib range", "", "info_texte seulement — pas de ?"), + ("bib_v4_assign_seq", "Bouton assignation batch", "libellé + ?", + "Assigner par séquence", + "Mode batch : choisissez une ou plusieurs plages et l'ordre d'assignation, puis GO pour assigner tous les participants sans dossard.\n\nUtilisez Simuler pour prévisualiser sans modifier la base.", + "Assign by range", + "Batch mode: select one or more ranges and the assignment order, then GO to assign all participants without a bib.\n\nUse Simulate to preview without saving.", + ""), + ("bib_v4_assign_seq_cancel", "Libellé JS annuler batch", "libellé", + "Annuler", "", "Cancel", "", "data-batch-label-cancel"), + ("bib_v4_tip_assign_seq", "Survol bouton batch", "tip", + "Assignation groupée par plages", "", "Batch assign by ranges", "", ""), + ("bib_v4_reset", "Bouton réinitialiser", "libellé + ?", + "Réinitialiser", + "Retire les dossards déjà assignés pour les plages sélectionnées.\n\nAttention : vérifiez l'impact avant de confirmer.", + "Reset", + "Removes assigned bibs for the selected ranges.\n\nWarning: check the impact before confirming.", + ""), + ("bib_v4_tip_reset", "Survol bouton reset", "tip", + "Retirer les dossards assignés", "", "Remove assigned bibs", "", ""), + ("bib_v4_auto", "Bouton auto (inactif)", "libellé + ?", + "Assignation automatique", + "Active l'assignation automatique à chaque nouvelle inscription dans les plages choisies.", + "Automatic assignment", + "Automatically assigns a bib on each new registration using the selected ranges.", + "Même info_aide que auto_config"), + ("bib_v4_auto_config", "Bouton auto (actif)", "libellé", + "Auto — configurer", + "Modifie les plages utilisées pour l'assignation automatique.", + "Auto — configure", + "Change the ranges used for automatic assignment.", + "Libellé quand auto déjà actif"), + ("bib_v4_tip_auto", "Survol bouton auto", "tip", + "Dossard assigné automatiquement à l'inscription", "", "Auto-assign bib on registration", "", ""), + ("bib_v4_auto_badge", "Badge « auto actif »", "libellé + ?", + "Auto actif", "L'assignation automatique est activée pour cette épreuve.", + "Auto on", "Automatic assignment is enabled for this race.", ""), + ("bib_v4_auto_select_hint", "Texte mode édition auto", "libellé + ?", + "Sélectionnez au moins une séquence.", + "Cochez les plages à utiliser pour l'assignation auto, puis cliquez Accepter.", + "Select at least one range.", + "Check the ranges to use for auto assignment, then click Accept.", + "Message dynamique JS si sélection"), + ("bib_v4_auto_accept", "Bouton accepter auto", "libellé + ?", + "Accepter", "Enregistre la configuration d'assignation automatique.", + "Accept", "Saves the automatic assignment configuration.", ""), + ("bib_v4_auto_cancel", "Bouton annuler auto", "libellé + ?", + "Annuler", "Quitte le mode édition sans enregistrer.", + "Cancel", "Exits edit mode without saving.", ""), + ("bib_v4_auto_disable", "Bouton désactiver auto", "libellé + ?", + "Désactiver l'auto", + "Désactive l'assignation automatique. Les plages de dossards restent en place.", + "Disable auto", + "Disables automatic assignment. Bib ranges are kept.", ""), + ("bib_v4_batch_order", "Label ordre batch", "libellé + ?", + "Ordre d'assignation", + "Critère pour trier les participants avant d'attribuer les dossards (nom, date d'inscription, équipe, etc.).", + "Assignment order", + "Sort order for participants before assigning bibs (name, registration date, team, etc.).", ""), + ("bib_v4_batch_info", "Texte info batch", "libellé + ?", + "Sélectionnez les plages puis GO.", + "Le résumé (disponibles / à assigner / manquants) s'affiche ici après simulation ou GO.", + "Select ranges then click GO.", + "Summary (available / to assign / missing) appears here after simulate or GO.", + "Texte initial ; message dynamique en JS"), + ("bib_v4_batch_simulate", "Bouton simuler batch", "libellé + ?", + "Simuler", "Affiche qui recevrait quel dossard sans modifier la base de données.", + "Simulate", "Shows who would receive which bib without changing the database.", ""), + ("bib_v4_batch_go", "Bouton GO batch", "libellé + ?", + "GO", "Lance l'assignation batch pour de vrai.", + "GO", "Runs the batch assignment for real.", ""), +] + +headers = [ + "info_clef", "zone_ecran", "type", "info_prg", + "info_texte_fr", "info_aide_fr", "info_texte_en", "info_aide_en", + "statut", "notes", +] + +wb = Workbook() +ws = wb.active +ws.title = "bib_v4_traductions" + +header_fill = PatternFill("solid", fgColor="4472C4") +header_font = Font(bold=True, color="FFFFFF") + +for col, h in enumerate(headers, 1): + cell = ws.cell(row=1, column=col, value=h) + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) + +for r, row in enumerate(rows, 2): + ws.cell(row=r, column=1, value=row[0]) + ws.cell(row=r, column=2, value=row[1]) + ws.cell(row=r, column=3, value=row[2]) + ws.cell(row=r, column=4, value="compte.php") + ws.cell(row=r, column=5, value=row[3]) + ws.cell(row=r, column=6, value=row[4]) + ws.cell(row=r, column=7, value=row[5]) + ws.cell(row=r, column=8, value=row[6]) + ws.cell(row=r, column=9, value="à corriger") + ws.cell(row=r, column=10, value=row[7]) + for c in (5, 6, 7, 8, 10): + ws.cell(row=r, column=c).alignment = Alignment(wrap_text=True, vertical="top") + +widths = [28, 32, 14, 14, 28, 48, 28, 48, 12, 36] +for i, w in enumerate(widths, 1): + ws.column_dimensions[get_column_letter(i)].width = w + +ws.freeze_panes = "A2" + +ws2 = wb.create_sheet("README") +readme = [ + "MSIN-4379 — Traductions écran dossards v4", + "", + "1. Éditez info_texte_fr/en (libellé visible, max ~50 car.) et info_aide_fr/en (pop-up ?).", + "2. Les clés bib_v4_tip_* : info_texte seulement (survol court), pas d'info_aide.", + "3. info_prg = compte.php pour toutes les entrées.", + "4. Mettez statut = OK quand une ligne est validée.", + "5. Renvoyez le fichier ; un script SQL INSERT sera généré (fr + en par clé).", + "", + "Avant import SQL :", + "DELETE FROM info WHERE info_clef LIKE 'bib_v4_%' AND info_prg IN ('compte.php','ajax_bib_range.php');", +] +for i, line in enumerate(readme, 1): + ws2.cell(row=i, column=1, value=line) + +out = r"c:\dev_v4\ms1inscription4\MSIN-4379-bib_v4-traductions.xlsx" +wb.save(out) +print("Created:", out) +print("Rows:", len(rows)) diff --git a/~$MSIN-4379-bib_v4-traductions.xlsx b/~$MSIN-4379-bib_v4-traductions.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1a17c3e7127c83429a23675e161018b63a671910 GIT binary patch literal 165 lcmZQCE=euONX%0p4X`s5Gn6o-G88amFeEbMF(}X!0suY^5w!pS literal 0 HcmV?d00001