diff --git a/css/style.css b/css/style.css index 9c0bad9..fcd0bf6 100644 --- a/css/style.css +++ b/css/style.css @@ -988,10 +988,16 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { .epr-block-assign .epr-content{ display:flex; flex-direction:column; - gap:10px; + gap:0; min-width:0; } +.epr-assign-divider{ + border-top:1px solid #ced4da; + margin:14px 0 12px; + flex-shrink:0; +} + .epr-block-assign .bib-container{ width:100%; min-width:0; @@ -1019,6 +1025,10 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { line-height:1.2; } +.epr-col-header-label--empty{ + gap:0; +} + .epr-line-header .btn-aide-bib{ width:18px; height:18px; @@ -1064,10 +1074,6 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { gap:8px; } -.epr-add-range-row{ - margin-top:4px; -} - .epr-header-label{ display:inline-flex; align-items:center; @@ -1211,7 +1217,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { width:100%; } -/* MSIN-4379 — View en 1re col. ; Début/Fin largeur fixe ; stats en fr. */ +/* MSIN-4379 — View/OK/Suppr icônes ; stats regroupées ; marge droite libre acceptée. */ .epr-line{ display:grid; grid-template-columns: @@ -1220,10 +1226,8 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { 58px 44px 48px - minmax(52px, 1fr) - minmax(52px, 1fr) - minmax(52px, 1fr) - 0fr; + auto + minmax(0, 1fr); gap:8px; align-items:center; width:100%; @@ -1237,12 +1241,34 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { 58px 44px 48px - minmax(48px, 1fr) - minmax(48px, 1fr) - minmax(48px, 1fr) + auto 28px; } +.epr-col-stats{ + display:grid; + grid-template-columns:56px 48px 48px; + gap:4px; + align-items:center; + justify-content:start; + min-width:0; +} + +.epr-col-stats > .bib-last, +.epr-col-stats > .bib-used, +.epr-col-stats > .bib-dispo{ + text-align:center; + font-size:13px; + min-width:0; +} + +.epr-line-header .epr-col-stats > div{ + display:flex; + align-items:center; + justify-content:center; + min-width:0; +} + .epr-line .bib-start, .epr-line .bib-end{ width:100%; @@ -1252,7 +1278,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { } .epr-add-range-row{ - margin-top:4px; + margin-top:6px; } .epr-col-batch{ @@ -1275,6 +1301,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { flex-direction:column; gap:10px; width:100%; + padding-top:2px; } /* MOBILE */ diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index d61ff0f..cdfab36 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -2681,17 +2681,32 @@ function fxBibGetInfoRow($clef) { return $bibInfoCache[$clef]; } -/** Libellé bib v4 — sur compte.php auto-crée si absent ; en AJAX, lecture seule + repli. */ -function fxBibTexte($clef, $mem_echo = 0, $strFallback = '') { +/** Libellé bib v4 — sur compte.php auto-crée si absent ; en AJAX, lecture seule + repli. + * $blnAllowEmptyLabel : si true, info_texte vide en BD reste vide (en-têtes colonnes éditables). */ +function fxBibTexte($clef, $mem_echo = 0, $strFallback = '', $blnAllowEmptyLabel = false) { $row = fxBibGetInfoRow($clef); + $blnHasDbRow = !empty($row) && array_key_exists('info_texte', $row); $str = trim($row['info_texte'] ?? ''); + if ($blnAllowEmptyLabel && $blnHasDbRow && $str === '') { + if ($mem_echo) { + echo ''; + } + return ''; + } + if ($str === '' || $str === $clef || $str === '*' . $clef . '*') { if (!defined('MS1_BIB_AJAX') || !MS1_BIB_AJAX) { - $str = trim(afficheTexte($clef, 0)); + if (!$blnAllowEmptyLabel || $strFallback !== '') { + $str = trim(afficheTexte($clef, 0)); + } } if ($str === '' || $str === $clef || $str === '*' . $clef . '*') { - $str = $strFallback !== '' ? $strFallback : $clef; + if ($strFallback !== '') { + $str = $strFallback; + } else { + $str = $blnAllowEmptyLabel ? '' : $clef; + } } } @@ -2769,10 +2784,15 @@ function fxBibBlockHeader($clef, $strFallback = '') { return '' . fxBibEsc(fxBibTexte($clef, 0, $strFallback)) . fxBibAideButton($clef) . ''; } -/** Cellule d'en-tête de colonne séquence + aide optionnelle. */ -function fxBibColHeader($clef, $strFallback) { - return '' - . fxBibEsc(fxBibTexte($clef, 0, $strFallback)) +/** Cellule d'en-tête de colonne séquence + aide optionnelle (info_texte peut être vide). */ +function fxBibColHeader($clef, $strFallback = '') { + $strLabel = fxBibTexte($clef, 0, $strFallback, true); + $strClass = 'epr-col-header-label'; + if ($strLabel === '') { + $strClass .= ' epr-col-header-label--empty'; + } + return '' + . fxBibEsc($strLabel) . fxBibAideButton($clef) . ''; } @@ -2809,14 +2829,16 @@ function renderBibRangeHeader() { ob_start(); ?>
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
- -
-
- +
+
+
+
diff --git a/sql/MSIN-4379-bib_v4-traductions.sql b/sql/MSIN-4379-bib_v4-traductions.sql index 8ed8197..e2f8924 100644 --- a/sql/MSIN-4379-bib_v4-traductions.sql +++ b/sql/MSIN-4379-bib_v4-traductions.sql @@ -13,16 +13,16 @@ INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_ 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_view', 'fr', 'View', 'Voir la grille des dossards de 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_view', 'en', 'View', 'View the bib grid for 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_view', 'fr', '', 'Voir la grille des dossards de 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_view', 'en', '', 'View the bib grid for 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_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_ok', 'fr', '', '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', '', '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', '', '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', '', '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()); @@ -67,3 +67,6 @@ INSERT INTO info (info_clef, info_langue, info_texte, info_aide, info_prg, info_ 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()); + +-- Mise à jour légère (BD déjà importée) — colonnes icône sans libellé, aide (?) inchangée : +-- UPDATE info SET info_texte = '' WHERE info_clef IN ('bib_v4_col_view','bib_v4_col_ok','bib_v4_col_del') AND info_prg = 'compte.php'; diff --git a/tools/gen_bib_v4_traductions_sql.py b/tools/gen_bib_v4_traductions_sql.py index 3488852..61221a1 100644 --- a/tools/gen_bib_v4_traductions_sql.py +++ b/tools/gen_bib_v4_traductions_sql.py @@ -25,11 +25,11 @@ ROWS = [ "", "Quantities and settings — coming soon.", ""), - ("bib_v4_col_view", "View", "Voir la grille des dossards de cette séquence.", "View", "View the bib grid for this sequence."), + ("bib_v4_col_view", "", "Voir la grille des dossards de cette séquence.", "", "View the bib grid for this sequence."), ("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_ok", "", "Enregistrer cette séquence.", "", "Save this sequence."), + ("bib_v4_col_del", "", "Supprimer la séquence.", "", "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."), diff --git a/tools/gen_bib_v4_traductions_xlsx.py b/tools/gen_bib_v4_traductions_xlsx.py index 68fa2fb..4c7f9a1 100644 --- a/tools/gen_bib_v4_traductions_xlsx.py +++ b/tools/gen_bib_v4_traductions_xlsx.py @@ -24,15 +24,15 @@ rows = [ "", ""), ("bib_v4_col_view", "Colonne tableau séquences", "colonne", - "View", "Voir la grille des dossards de cette séquence.", "View", "View the bib grid for this sequence.", ""), + "", "Voir la grille des dossards de cette séquence.", "", "View the bib grid for this sequence.", "info_texte vide — icône œil + ?"), ("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.", ""), + "", "Enregistrer cette plage.", "", "Save this range.", "icône OK + ?"), ("bib_v4_col_del", "Colonne tableau séquences", "colonne", - "Suppr.", "Supprimer la plage.", "Del.", "Delete this range.", ""), + "", "Supprimer la plage.", "", "Delete this range.", "icône poubelle + ?"), ("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",