MSIN-4467 — Implement new workspace architecture for bib management, including preparation, production, and operations sections. Update CSS for improved layout and styling of workspace elements. Increment version code to 4.72.843.
This commit is contained in:
550
css/style.css
550
css/style.css
@ -1073,17 +1073,144 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active {
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
/* MSIN-4440 — Grille boutons outils bib v4 (3+2) + panneau de détail unique. */
|
||||
/* MSIN-4467 — Espaces de travail de la gestion des dossards. */
|
||||
#module-bib .bib-tool-hub{
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-nav{
|
||||
display:flex;
|
||||
align-items:stretch;
|
||||
gap:4px;
|
||||
padding:4px;
|
||||
border:1px solid #c8d6e5;
|
||||
border-radius:8px;
|
||||
background:#f4f8fc;
|
||||
overflow-x:auto;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-tab{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
gap:5px;
|
||||
min-height:42px;
|
||||
padding:8px 16px;
|
||||
border:0;
|
||||
border-radius:6px;
|
||||
background:transparent;
|
||||
color:#495057;
|
||||
font-size:13px;
|
||||
font-weight:600;
|
||||
line-height:1.25;
|
||||
white-space:nowrap;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-tab:hover,
|
||||
#module-bib .bib-workspace-tab:focus{
|
||||
background:#e8f0f8;
|
||||
color:#1e4a9e;
|
||||
outline:none;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-tab.is-active{
|
||||
background:#2f5fd0;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-tab .btn-aide-trad,
|
||||
#module-bib .bib-workspace-tab .btn-trad-admin{
|
||||
margin:0;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-panel{
|
||||
margin-top:8px;
|
||||
padding:16px;
|
||||
border:1px solid #c8d6e5;
|
||||
border-radius:8px;
|
||||
background:#fff;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-panel-heading{
|
||||
margin-bottom:14px;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-panel-heading p{
|
||||
margin:0;
|
||||
color:#495057;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-overview{
|
||||
margin-bottom:16px;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stats{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(4, minmax(0, 1fr));
|
||||
gap:1px;
|
||||
margin:0;
|
||||
overflow:hidden;
|
||||
border:1px solid #dee2e6;
|
||||
border-radius:6px;
|
||||
background:#dee2e6;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stat{
|
||||
margin:0;
|
||||
padding:12px 14px;
|
||||
background:#fff;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stat dd{
|
||||
margin:0 0 2px;
|
||||
color:#212529;
|
||||
font-size:22px;
|
||||
font-weight:700;
|
||||
line-height:1.15;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stat dt{
|
||||
margin:0;
|
||||
color:#6c757d;
|
||||
font-size:11px;
|
||||
font-weight:600;
|
||||
line-height:1.3;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stat--success dd{
|
||||
color:#218838;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stat--warning dd{
|
||||
color:#a36b00;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-races{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:6px;
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
/* MSIN-4440 — Outils contextuels + panneau de détail unique. */
|
||||
#module-bib .bib-tool-nav{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(3, minmax(0, 1fr));
|
||||
gap:8px;
|
||||
}
|
||||
|
||||
#module-bib .bib-tool-nav--preparation,
|
||||
#module-bib .bib-tool-nav--operations{
|
||||
grid-template-columns:repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
#module-bib .bib-tool-nav--settings{
|
||||
grid-template-columns:minmax(0, 1fr);
|
||||
max-width:520px;
|
||||
}
|
||||
|
||||
#module-bib .bib-tool-btn:nth-child(4){
|
||||
grid-column:1;
|
||||
}
|
||||
@ -1365,7 +1492,149 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active {
|
||||
display:none;
|
||||
}
|
||||
|
||||
/* MSIN-4467 — Aperçu du futur parcours de production physique. */
|
||||
#module-bib .bib-production-planned{
|
||||
display:inline-flex;
|
||||
margin-top:8px;
|
||||
padding:3px 8px;
|
||||
border:1px solid #d8b45a;
|
||||
border-radius:999px;
|
||||
background:#fff8e1;
|
||||
color:#664d03;
|
||||
font-size:11px;
|
||||
font-weight:600;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-steps{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(4, minmax(0, 1fr));
|
||||
gap:8px;
|
||||
margin:0 0 20px;
|
||||
padding:0;
|
||||
list-style:none;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-steps li{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:8px;
|
||||
min-width:0;
|
||||
padding:10px;
|
||||
border:1px solid #dee2e6;
|
||||
border-radius:6px;
|
||||
background:#f8f9fa;
|
||||
color:#495057;
|
||||
font-size:12px;
|
||||
font-weight:600;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-step-number{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
flex:0 0 24px;
|
||||
width:24px;
|
||||
height:24px;
|
||||
border-radius:999px;
|
||||
background:#2f5fd0;
|
||||
color:#fff;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category-heading h3{
|
||||
margin:0 0 8px;
|
||||
color:#212529;
|
||||
font-size:15px;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category-list{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
border:1px solid #dee2e6;
|
||||
border-radius:6px;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category{
|
||||
display:grid;
|
||||
grid-template-columns:minmax(180px, 1.2fr) minmax(300px, 2fr) auto;
|
||||
gap:16px;
|
||||
align-items:center;
|
||||
padding:12px 14px;
|
||||
background:#fff;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category + .bib-production-category{
|
||||
border-top:1px solid #dee2e6;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__identity{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:2px;
|
||||
min-width:0;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__identity strong{
|
||||
color:#212529;
|
||||
font-size:13px;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__identity span{
|
||||
color:#6c757d;
|
||||
font-size:11px;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__fields{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(3, minmax(0, 1fr));
|
||||
gap:12px;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__fields > div{
|
||||
min-width:0;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__fields dt{
|
||||
margin:0 0 2px;
|
||||
color:#6c757d;
|
||||
font-size:10px;
|
||||
font-weight:600;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__fields dd{
|
||||
margin:0;
|
||||
color:#212529;
|
||||
font-size:12px;
|
||||
font-weight:600;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__status{
|
||||
padding:3px 8px;
|
||||
border:1px solid #d8b45a;
|
||||
border-radius:999px;
|
||||
background:#fff8e1;
|
||||
color:#664d03;
|
||||
font-size:11px;
|
||||
font-weight:600;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
@media (max-width:768px){
|
||||
#module-bib .bib-workspace-nav{
|
||||
align-items:stretch;
|
||||
}
|
||||
|
||||
#module-bib .bib-workspace-tab{
|
||||
flex:1 0 auto;
|
||||
}
|
||||
|
||||
#module-bib .bib-preparation-stats{
|
||||
grid-template-columns:repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
#module-bib .bib-tool-nav{
|
||||
grid-template-columns:1fr;
|
||||
}
|
||||
@ -1374,6 +1643,18 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active {
|
||||
#module-bib .bib-tool-btn:nth-child(5){
|
||||
grid-column:auto;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-steps{
|
||||
grid-template-columns:1fr;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category{
|
||||
grid-template-columns:1fr;
|
||||
}
|
||||
|
||||
#module-bib .bib-production-category__fields{
|
||||
grid-template-columns:1fr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1658,14 +1939,130 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active {
|
||||
/* MSIN-4379 — Refonte layout dossards v4 : 2 colonnes, Tippy, gestion masquée. */
|
||||
/* CONTENEUR 2 BLOCS — colonne identité étroite + séparation blanche avec la droite. */
|
||||
.epr-row{
|
||||
display:block;
|
||||
border:1px solid #b8c9e8;
|
||||
border-radius:6px;
|
||||
background:#fff;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
.epr-row-detail{
|
||||
display:grid;
|
||||
grid-template-columns:minmax(148px, 178px) minmax(0, 1fr);
|
||||
gap:12px;
|
||||
align-items:start;
|
||||
border:1px solid #b8c9e8;
|
||||
border-radius:6px;
|
||||
padding:12px;
|
||||
border-top:1px solid #dbe4f3;
|
||||
}
|
||||
|
||||
.epr-row:not(.is-expanded) .epr-row-detail{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.bib-race-summary{
|
||||
display:grid;
|
||||
grid-template-columns:minmax(220px, 1.4fr) minmax(300px, 1.4fr) auto 32px;
|
||||
gap:14px;
|
||||
align-items:center;
|
||||
min-height:64px;
|
||||
padding:10px 12px;
|
||||
background:#fff;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.bib-race-summary:hover,
|
||||
.bib-race-summary:focus{
|
||||
background:#f4f8fc;
|
||||
outline:none;
|
||||
}
|
||||
|
||||
.epr-row.is-expanded .bib-race-summary{
|
||||
background:#f4f8fc;
|
||||
}
|
||||
|
||||
.bib-race-summary__identity{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:2px;
|
||||
min-width:0;
|
||||
}
|
||||
|
||||
.bib-race-summary__identity strong{
|
||||
color:#1e3a6e;
|
||||
font-size:14px;
|
||||
line-height:1.3;
|
||||
}
|
||||
|
||||
.bib-race-summary__identity span{
|
||||
overflow:hidden;
|
||||
color:#6c757d;
|
||||
font-size:11px;
|
||||
text-overflow:ellipsis;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
.bib-race-summary__stats{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(3, minmax(0, 1fr));
|
||||
gap:12px;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.bib-race-summary__stats > div{
|
||||
min-width:0;
|
||||
}
|
||||
|
||||
.bib-race-summary__stats dd{
|
||||
margin:0 0 2px;
|
||||
color:#212529;
|
||||
font-size:13px;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.bib-race-summary__stats dt{
|
||||
margin:0;
|
||||
color:#6c757d;
|
||||
font-size:9px;
|
||||
font-weight:600;
|
||||
line-height:1.2;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
.bib-race-summary__status{
|
||||
padding:3px 8px;
|
||||
border:1px solid #d8b45a;
|
||||
border-radius:999px;
|
||||
background:#fff8e1;
|
||||
color:#664d03;
|
||||
font-size:11px;
|
||||
font-weight:600;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
.bib-race-summary__status.is-ready{
|
||||
border-color:#8bc49a;
|
||||
background:#edf8f0;
|
||||
color:#17652c;
|
||||
}
|
||||
|
||||
.bib-race-toggle{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
width:30px;
|
||||
height:30px;
|
||||
padding:0;
|
||||
border:1px solid #8fa8d8;
|
||||
border-radius:4px;
|
||||
background:#fff;
|
||||
color:#2f5fd0;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.bib-race-toggle:hover,
|
||||
.bib-race-toggle:focus{
|
||||
background:#e8f0fc;
|
||||
outline:none;
|
||||
}
|
||||
|
||||
.epr-row .epr-block{
|
||||
@ -2802,11 +3199,156 @@ a.ms1-trad-link.btn-aide-trad{
|
||||
padding-top:2px;
|
||||
}
|
||||
|
||||
/* MSIN-4467 — Parcours progressif dans le détail d'une épreuve. */
|
||||
.bib-assignment-step{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:12px;
|
||||
}
|
||||
|
||||
.bib-assignment-step__header{
|
||||
display:flex;
|
||||
align-items:flex-start;
|
||||
gap:10px;
|
||||
}
|
||||
|
||||
.bib-assignment-step__number{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
flex:0 0 26px;
|
||||
width:26px;
|
||||
height:26px;
|
||||
border-radius:999px;
|
||||
background:#2f5fd0;
|
||||
color:#fff;
|
||||
font-size:12px;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.bib-assignment-step__header h3{
|
||||
margin:1px 0 2px;
|
||||
color:#1e3a6e;
|
||||
font-size:14px;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.bib-assignment-step__header p{
|
||||
margin:0;
|
||||
color:#6c757d;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
.bib-assignment-methods{
|
||||
display:grid;
|
||||
grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));
|
||||
gap:10px;
|
||||
}
|
||||
|
||||
.bib-assignment-method{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
align-items:flex-start;
|
||||
min-width:0;
|
||||
padding:12px;
|
||||
border:1px solid #c8d6e5;
|
||||
border-radius:6px;
|
||||
background:#f8fbfe;
|
||||
}
|
||||
|
||||
.bib-assignment-method h4{
|
||||
margin:0 0 4px;
|
||||
color:#212529;
|
||||
font-size:13px;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.bib-assignment-method p{
|
||||
min-height:34px;
|
||||
margin:0 0 10px;
|
||||
color:#6c757d;
|
||||
font-size:11px;
|
||||
line-height:1.45;
|
||||
}
|
||||
|
||||
.bib-assignment-method .epr-action-group{
|
||||
margin-top:auto;
|
||||
}
|
||||
|
||||
#module-bib .bib-assignment-method .btn-bib-auto:not(.btn-bib-auto--active){
|
||||
border-color:#2f5fd0;
|
||||
background:#fff;
|
||||
color:#2f5fd0;
|
||||
}
|
||||
|
||||
#module-bib .bib-assignment-method .btn-bib-auto:not(.btn-bib-auto--active):hover,
|
||||
#module-bib .bib-assignment-method .btn-bib-auto:not(.btn-bib-auto--active):focus{
|
||||
border-color:#1e4a9e;
|
||||
background:#e8f0fc;
|
||||
color:#1e4a9e;
|
||||
}
|
||||
|
||||
#module-bib .bib-assignment-method .btn-bib-auto:not(.btn-bib-auto--active) + .btn-aide-bib{
|
||||
border-color:#2f5fd0;
|
||||
background:#2f5fd0;
|
||||
}
|
||||
|
||||
#module-bib .bib-assignment-method .btn-bib-auto--active,
|
||||
#module-bib .bib-assignment-method .btn-bib-auto--active:hover,
|
||||
#module-bib .bib-assignment-method .btn-bib-auto--active:focus{
|
||||
border-color:#218838;
|
||||
background:#28a745;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
.bib-advanced-actions{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:10px;
|
||||
padding-top:10px;
|
||||
border-top:1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.bib-advanced-actions__title{
|
||||
color:#6c757d;
|
||||
font-size:11px;
|
||||
font-weight:600;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
/* MOBILE */
|
||||
@media (max-width:768px){
|
||||
.epr-row{
|
||||
.epr-row-detail{
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.bib-race-summary{
|
||||
grid-template-columns:minmax(0, 1fr) auto;
|
||||
}
|
||||
|
||||
.bib-race-summary__stats{
|
||||
grid-column:1 / -1;
|
||||
grid-row:2;
|
||||
}
|
||||
|
||||
.bib-race-summary__status{
|
||||
grid-column:1;
|
||||
grid-row:3;
|
||||
justify-self:start;
|
||||
}
|
||||
|
||||
.bib-race-toggle{
|
||||
grid-column:2;
|
||||
grid-row:1;
|
||||
}
|
||||
|
||||
.bib-assignment-methods{
|
||||
grid-template-columns:1fr;
|
||||
}
|
||||
|
||||
.bib-assignment-method p{
|
||||
min-height:0;
|
||||
}
|
||||
}
|
||||
|
||||
.bib-view {
|
||||
|
||||
@ -498,8 +498,54 @@
|
||||
|
||||
// MSIN-4440 — Grille outils : un panneau de détail, contenu déplacé depuis #bib-tool-store.
|
||||
var bibActiveTool = null;
|
||||
// MSIN-4467 — Espace principal : préparation, production, opérations ou réglages.
|
||||
var bibActiveWorkspace = 'preparation';
|
||||
var bibToolContentSlots = {};
|
||||
|
||||
function bibSetWorkspace(workspaceId, options) {
|
||||
options = options || {};
|
||||
if (!workspaceId) {
|
||||
return;
|
||||
}
|
||||
|
||||
var panel = moduleBib.querySelector('[data-bib-workspace-panel="' + workspaceId + '"]');
|
||||
if (!panel) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (options.keepTool !== true) {
|
||||
bibCloseTool();
|
||||
}
|
||||
|
||||
bibActiveWorkspace = workspaceId;
|
||||
moduleBib.querySelectorAll('.bib-workspace-tab').forEach(function (tab) {
|
||||
var active = tab.getAttribute('data-bib-workspace') === workspaceId;
|
||||
tab.classList.toggle('is-active', active);
|
||||
tab.setAttribute('aria-selected', active ? 'true' : 'false');
|
||||
});
|
||||
moduleBib.querySelectorAll('[data-bib-workspace-panel]').forEach(function (workspacePanel) {
|
||||
workspacePanel.classList.toggle(
|
||||
'bib-ui-hidden',
|
||||
workspacePanel.getAttribute('data-bib-workspace-panel') !== workspaceId
|
||||
);
|
||||
});
|
||||
|
||||
var races = document.getElementById('bib-preparation-races');
|
||||
if (races) {
|
||||
races.classList.toggle('bib-ui-hidden', workspaceId !== 'preparation');
|
||||
}
|
||||
}
|
||||
|
||||
function bibWorkspaceForTool(toolId) {
|
||||
if (toolId === 'event_config') {
|
||||
return 'settings';
|
||||
}
|
||||
if (toolId === 'anomalies' || toolId === 'dist_print') {
|
||||
return 'operations';
|
||||
}
|
||||
return 'preparation';
|
||||
}
|
||||
|
||||
function bibGetToolPanel(toolId) {
|
||||
return document.querySelector('#bib-tool-store [data-bib-tool="' + toolId + '"]');
|
||||
}
|
||||
@ -718,6 +764,11 @@
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var workspaceId = bibWorkspaceForTool(toolId);
|
||||
if (bibActiveWorkspace !== workspaceId) {
|
||||
bibSetWorkspace(workspaceId, { keepTool: true });
|
||||
}
|
||||
|
||||
if (bibActiveTool === toolId) {
|
||||
bibCloseTool();
|
||||
return Promise.resolve();
|
||||
@ -1918,6 +1969,12 @@
|
||||
if (e.key !== 'Enter' && e.key !== ' ') {
|
||||
return;
|
||||
}
|
||||
var workspaceTab = e.target.closest('.bib-workspace-tab[role="tab"]');
|
||||
if (workspaceTab && moduleBib.contains(workspaceTab)) {
|
||||
e.preventDefault();
|
||||
bibSetWorkspace(workspaceTab.getAttribute('data-bib-workspace'));
|
||||
return;
|
||||
}
|
||||
var toolBtn = e.target.closest('.bib-tool-btn[role="button"]');
|
||||
if (!toolBtn || !moduleBib.contains(toolBtn)) {
|
||||
return;
|
||||
@ -1927,6 +1984,16 @@
|
||||
});
|
||||
|
||||
moduleBib.addEventListener('click', function (e) {
|
||||
var workspaceTab = e.target.closest('.bib-workspace-tab');
|
||||
if (workspaceTab && moduleBib.contains(workspaceTab)) {
|
||||
if (e.target.closest('.btn-aide-trad, .btn-trad-admin, .ms1-trad-link')) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
bibSetWorkspace(workspaceTab.getAttribute('data-bib-workspace'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.target.closest('.btn-global-batch-complete-reload')) {
|
||||
e.preventDefault();
|
||||
location.reload();
|
||||
@ -2124,22 +2191,71 @@
|
||||
return parseInt(row.dataset.bibAAssigner || '0', 10) || 0;
|
||||
}
|
||||
|
||||
function bibRefreshPreparationOverview() {
|
||||
var rows = Array.from(moduleBib.querySelectorAll('.epr-row[data-epr-id]'));
|
||||
var total = 0;
|
||||
var assigned = 0;
|
||||
var pending = 0;
|
||||
|
||||
rows.forEach(function (raceRow) {
|
||||
total += parseInt((raceRow.querySelector('.bib-race-summary-total') || {}).textContent || '0', 10) || 0;
|
||||
assigned += parseInt((raceRow.querySelector('.bib-race-summary-assigned') || {}).textContent || '0', 10) || 0;
|
||||
pending += parseInt((raceRow.querySelector('.bib-race-summary-pending') || {}).textContent || '0', 10) || 0;
|
||||
});
|
||||
|
||||
var values = {
|
||||
bib_v5_stat_races: rows.length,
|
||||
bib_v5_stat_registered: total,
|
||||
bib_v5_stat_assigned: assigned,
|
||||
bib_v5_stat_pending: pending
|
||||
};
|
||||
Object.keys(values).forEach(function (key) {
|
||||
var el = moduleBib.querySelector('[data-bib-overview-stat="' + key + '"]');
|
||||
if (el) {
|
||||
el.textContent = values[key];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function bibSyncRaceSummaryStatus(row) {
|
||||
if (!row) return;
|
||||
var pendingEl = row.querySelector('.bib-race-summary-pending');
|
||||
var rangesEl = row.querySelector('.bib-race-summary-ranges');
|
||||
var statusEl = row.querySelector('.bib-race-summary__status');
|
||||
var pending = parseInt(pendingEl ? pendingEl.textContent : '0', 10) || 0;
|
||||
var ranges = parseInt(rangesEl ? rangesEl.textContent : '0', 10) || 0;
|
||||
var ready = pending === 0 && ranges > 0;
|
||||
|
||||
if (statusEl) {
|
||||
statusEl.classList.toggle('is-ready', ready);
|
||||
statusEl.textContent = statusEl.getAttribute(ready ? 'data-label-ready' : 'data-label-incomplete') || '';
|
||||
}
|
||||
bibRefreshPreparationOverview();
|
||||
}
|
||||
|
||||
function bibSyncEprBibStats(row, info) {
|
||||
if (!row || !info) return;
|
||||
|
||||
if (info.total !== undefined) {
|
||||
let totalEl = row.querySelector('.bib-total');
|
||||
if (totalEl) totalEl.textContent = info.total;
|
||||
let summaryTotal = row.querySelector('.bib-race-summary-total');
|
||||
if (summaryTotal) summaryTotal.textContent = info.total;
|
||||
}
|
||||
if (info.avec_bib !== undefined) {
|
||||
let avecEl = row.querySelector('.bib-avec');
|
||||
if (avecEl) avecEl.textContent = info.avec_bib;
|
||||
let summaryAssigned = row.querySelector('.bib-race-summary-assigned');
|
||||
if (summaryAssigned) summaryAssigned.textContent = info.avec_bib;
|
||||
}
|
||||
|
||||
let pending = (info.a_assigner !== undefined && info.a_assigner !== null)
|
||||
? info.a_assigner
|
||||
: (info.sans_bib || 0);
|
||||
row.dataset.bibAAssigner = String(parseInt(pending, 10) || 0);
|
||||
let summaryPending = row.querySelector('.bib-race-summary-pending');
|
||||
if (summaryPending) summaryPending.textContent = parseInt(pending, 10) || 0;
|
||||
bibSyncRaceSummaryStatus(row);
|
||||
}
|
||||
|
||||
function bibAlertAutoPendingBibs(row) {
|
||||
@ -2267,6 +2383,45 @@
|
||||
}
|
||||
|
||||
// MSIN-4379 — Réduire / développer les blocs gestion, assignation et sections anomalies.
|
||||
function bibSetRaceRowExpanded(row, expanded) {
|
||||
if (!row) {
|
||||
return;
|
||||
}
|
||||
row.classList.toggle('is-expanded', expanded);
|
||||
var summary = row.querySelector('.bib-race-summary');
|
||||
var button = row.querySelector('.bib-race-toggle');
|
||||
if (summary) {
|
||||
summary.setAttribute('aria-expanded', expanded ? 'true' : 'false');
|
||||
}
|
||||
if (button) {
|
||||
var label = button.getAttribute(expanded ? 'data-label-collapse' : 'data-label-expand') || '';
|
||||
if (label) {
|
||||
button.setAttribute('aria-label', label);
|
||||
button.setAttribute('title', label);
|
||||
}
|
||||
var icon = button.querySelector('.fa');
|
||||
if (icon) {
|
||||
icon.classList.toggle('fa-chevron-up', expanded);
|
||||
icon.classList.toggle('fa-chevron-down', !expanded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bibToggleRaceRow(row) {
|
||||
if (!row) {
|
||||
return;
|
||||
}
|
||||
var willExpand = !row.classList.contains('is-expanded');
|
||||
if (willExpand) {
|
||||
moduleBib.querySelectorAll('.epr-row.is-expanded').forEach(function (otherRow) {
|
||||
if (otherRow !== row) {
|
||||
bibSetRaceRowExpanded(otherRow, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
bibSetRaceRowExpanded(row, willExpand);
|
||||
}
|
||||
|
||||
function bibToggleCollapsibleBlock(block, btnToggle) {
|
||||
if (!block || !btnToggle) {
|
||||
return;
|
||||
@ -2341,6 +2496,16 @@
|
||||
return;
|
||||
}
|
||||
|
||||
let raceSummary = e.target.closest('.bib-race-summary');
|
||||
if (raceSummary && moduleBib.contains(raceSummary)) {
|
||||
if (e.target.closest('a, input, select, textarea, button:not(.bib-race-toggle)')) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
bibToggleRaceRow(raceSummary.closest('.epr-row'));
|
||||
return;
|
||||
}
|
||||
|
||||
let anomalyHdr = e.target.closest('.bib-anomaly-block-header');
|
||||
if (anomalyHdr && moduleBib.contains(anomalyHdr) && !e.target.closest('.epr-block-toggle')) {
|
||||
e.preventDefault();
|
||||
@ -2407,6 +2572,16 @@
|
||||
return;
|
||||
}
|
||||
|
||||
let raceSummary = e.target.closest('.bib-race-summary');
|
||||
if (raceSummary && moduleBib.contains(raceSummary)) {
|
||||
if (e.target !== raceSummary && !e.target.closest('.bib-race-toggle')) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
bibToggleRaceRow(raceSummary.closest('.epr-row'));
|
||||
return;
|
||||
}
|
||||
|
||||
let globalBatchHdr = e.target.closest('.bib-global-batch__section-header');
|
||||
if (globalBatchHdr && moduleBib.contains(globalBatchHdr)) {
|
||||
e.preventDefault();
|
||||
@ -2527,6 +2702,19 @@
|
||||
}
|
||||
if (el) {
|
||||
el.classList.toggle('bib-ui-hidden', !show);
|
||||
if (el.classList.contains('epr-action-reset-group')) {
|
||||
let advanced = el.closest('.bib-advanced-actions');
|
||||
if (advanced) {
|
||||
advanced.classList.toggle('bib-ui-hidden', !show);
|
||||
}
|
||||
}
|
||||
if (el.classList.contains('epr-action-batch-group')
|
||||
|| el.classList.contains('epr-action-auto-group')) {
|
||||
let method = el.closest('.bib-assignment-method');
|
||||
if (method) {
|
||||
method.classList.toggle('bib-ui-hidden', !show);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2598,6 +2786,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
bibSetWorkspace(bibWorkspaceForTool(toolId), { keepTool: true });
|
||||
bibOpenTool(toolId).then(function () {
|
||||
let detail = document.getElementById('bib-tool-detail');
|
||||
if (detail) {
|
||||
@ -2799,6 +2988,19 @@
|
||||
summaries.innerHTML = opts.summaryHtml;
|
||||
}
|
||||
}
|
||||
if (typeof opts.seqCount !== 'undefined') {
|
||||
let summaryRanges = row.querySelector('.bib-race-summary-ranges');
|
||||
if (summaryRanges) {
|
||||
summaryRanges.textContent = parseInt(opts.seqCount, 10) || 0;
|
||||
}
|
||||
let productionRanges = moduleBib.querySelector(
|
||||
'.bib-production-category[data-epr-id="' + row.dataset.eprId + '"] .bib-production-range-count'
|
||||
);
|
||||
if (productionRanges) {
|
||||
productionRanges.textContent = parseInt(opts.seqCount, 10) || 0;
|
||||
}
|
||||
bibSyncRaceSummaryStatus(row);
|
||||
}
|
||||
if (typeof opts.autoActive !== 'undefined') {
|
||||
let blnAuto = !!opts.autoActive && opts.autoActive !== '0' && opts.autoActive !== 0;
|
||||
row.dataset.autoActive = blnAuto ? '1' : '0';
|
||||
@ -2824,6 +3026,9 @@
|
||||
if (data && data.summary_html != null) {
|
||||
opts.summaryHtml = data.summary_html;
|
||||
}
|
||||
if (data && typeof data.seq_count !== 'undefined') {
|
||||
opts.seqCount = data.seq_count;
|
||||
}
|
||||
if (data && typeof data.auto_active !== 'undefined') {
|
||||
opts.autoActive = data.auto_active;
|
||||
}
|
||||
|
||||
@ -3559,6 +3559,41 @@ function fxBibStaticFallback($clef) {
|
||||
'bib_v4_batch_order_none' => ['fr' => '— Aucun —', 'en' => '— None —'],
|
||||
'bib_v4_batch_sort_group_fixed' => ['fr' => 'Critères fixes', 'en' => 'Fixed criteria'],
|
||||
'bib_v4_summary_teams_unit' => ['fr' => 'équipes', 'en' => 'teams'],
|
||||
// MSIN-4467 — Nouvelle architecture visuelle du module.
|
||||
'bib_v5_workspace_label' => ['fr' => 'Gestion des dossards', 'en' => 'Bib management'],
|
||||
'bib_v5_workspace_preparation' => ['fr' => 'Préparation', 'en' => 'Preparation'],
|
||||
'bib_v5_workspace_production' => ['fr' => 'Production de dossards', 'en' => 'Bib production'],
|
||||
'bib_v5_workspace_operations' => ['fr' => 'Opérations', 'en' => 'Operations'],
|
||||
'bib_v5_workspace_settings' => ['fr' => 'Réglages', 'en' => 'Settings'],
|
||||
'bib_v5_preparation_intro' => ['fr' => 'Préparez les épreuves et attribuez les dossards aux inscriptions.', 'en' => 'Prepare races and assign bibs to registrations.'],
|
||||
'bib_v5_stat_races' => ['fr' => 'Épreuves actives', 'en' => 'Active races'],
|
||||
'bib_v5_stat_registered' => ['fr' => 'Inscriptions', 'en' => 'Registrations'],
|
||||
'bib_v5_stat_assigned' => ['fr' => 'Dossards attribués', 'en' => 'Assigned bibs'],
|
||||
'bib_v5_stat_pending' => ['fr' => 'À attribuer', 'en' => 'To assign'],
|
||||
'bib_v5_race_ready' => ['fr' => 'Prête', 'en' => 'Ready'],
|
||||
'bib_v5_race_incomplete' => ['fr' => 'À compléter', 'en' => 'To complete'],
|
||||
'bib_v5_ranges_title' => ['fr' => 'Plages de numéros', 'en' => 'Number ranges'],
|
||||
'bib_v5_ranges_hint' => ['fr' => 'Définissez les numéros disponibles pour cette épreuve.', 'en' => 'Define the numbers available for this race.'],
|
||||
'bib_v5_method_title' => ['fr' => 'Méthode d’attribution', 'en' => 'Assignment method'],
|
||||
'bib_v5_batch_title' => ['fr' => 'Attribuer maintenant', 'en' => 'Assign now'],
|
||||
'bib_v5_batch_hint' => ['fr' => 'Attribuer en lot aux inscriptions qui n’ont pas encore de dossard.', 'en' => 'Assign in bulk to registrations that do not have a bib yet.'],
|
||||
'bib_v5_auto_title' => ['fr' => 'Nouvelles inscriptions', 'en' => 'New registrations'],
|
||||
'bib_v5_auto_hint' => ['fr' => 'Attribuer automatiquement un dossard lors des prochaines inscriptions.', 'en' => 'Automatically assign a bib to future registrations.'],
|
||||
'bib_v5_advanced_actions' => ['fr' => 'Actions avancées', 'en' => 'Advanced actions'],
|
||||
'bib_v5_production_intro' => ['fr' => 'Préparez les informations nécessaires à l’impression des dossards à partir des plages déjà configurées.', 'en' => 'Prepare the information required to print bibs using the ranges already configured.'],
|
||||
'bib_v5_production_planned' => ['fr' => 'Fonctionnalité prévue — aucune donnée ne sera enregistrée pour le moment.', 'en' => 'Planned feature — no data will be saved yet.'],
|
||||
'bib_v5_production_step_ranges' => ['fr' => 'Choisir les plages', 'en' => 'Choose ranges'],
|
||||
'bib_v5_production_step_answers' => ['fr' => 'Répondre par catégorie', 'en' => 'Answer by category'],
|
||||
'bib_v5_production_step_review' => ['fr' => 'Réviser la production', 'en' => 'Review production'],
|
||||
'bib_v5_production_step_printer' => ['fr' => 'Transmettre à l’imprimeur', 'en' => 'Send to printer'],
|
||||
'bib_v5_production_categories' => ['fr' => 'Préparation par épreuve et catégorie', 'en' => 'Preparation by race and category'],
|
||||
'bib_v5_production_ranges' => ['fr' => 'Plages existantes', 'en' => 'Existing ranges'],
|
||||
'bib_v5_production_color' => ['fr' => 'Couleur du dossard', 'en' => 'Bib colour'],
|
||||
'bib_v5_production_questions' => ['fr' => 'Questions de production', 'en' => 'Production questions'],
|
||||
'bib_v5_production_to_define' => ['fr' => 'À définir', 'en' => 'To be defined'],
|
||||
'bib_v5_production_status' => ['fr' => 'À préparer', 'en' => 'To prepare'],
|
||||
'bib_v5_operations_intro' => ['fr' => 'Contrôlez les anomalies et préparez les documents pour la distribution.', 'en' => 'Review anomalies and prepare distribution documents.'],
|
||||
'bib_v5_settings_intro' => ['fr' => 'Gérez les règles qui s’appliquent à l’ensemble de l’événement.', 'en' => 'Manage rules that apply to the entire event.'],
|
||||
'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'],
|
||||
@ -4500,16 +4535,37 @@ function renderBibAssignActions($epr_id, $eve_id, $strLangue, $infoBib, $blnAuto
|
||||
ob_start();
|
||||
?>
|
||||
<div class="epr-actions">
|
||||
<div class="epr-action-row epr-action-row-main">
|
||||
<?php echo fxBibActionGroupOpen('epr-action-batch-group', $blnHasSequences); ?>
|
||||
<?php echo fxBibBtnAideSegmentOpen(); ?>
|
||||
<button type="button" class="btn btn-sm btn-secondary btn-assign-batch"<?php echo fxBibTippyAttr('bib_v4_tip_assign_seq'); ?>>
|
||||
<?php fxBibTexte('bib_v4_assign_seq', 1); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_assign_seq', 'secondary', false); ?>
|
||||
<?php echo fxBibBtnAideSegmentClose('bib_v4_assign_seq'); ?>
|
||||
<?php echo fxBibActionGroupClose(); ?>
|
||||
<div class="bib-assignment-methods">
|
||||
<section class="bib-assignment-method">
|
||||
<h4><?php fxBibTexteTrad('bib_v5_batch_title', 1); ?></h4>
|
||||
<p><?php fxBibTexteTrad('bib_v5_batch_hint', 1); ?></p>
|
||||
<?php echo fxBibActionGroupOpen('epr-action-batch-group', $blnHasSequences); ?>
|
||||
<?php echo fxBibBtnAideSegmentOpen(); ?>
|
||||
<button type="button" class="btn btn-sm btn-primary btn-assign-batch"<?php echo fxBibTippyAttr('bib_v4_tip_assign_seq'); ?>>
|
||||
<?php fxBibTexte('bib_v4_assign_seq', 1); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_assign_seq', 'secondary', false); ?>
|
||||
<?php echo fxBibBtnAideSegmentClose('bib_v4_assign_seq'); ?>
|
||||
<?php echo fxBibActionGroupClose(); ?>
|
||||
</section>
|
||||
|
||||
<section class="bib-assignment-method">
|
||||
<h4><?php fxBibTexteTrad('bib_v5_auto_title', 1); ?></h4>
|
||||
<p><?php fxBibTexteTrad('bib_v5_auto_hint', 1); ?></p>
|
||||
<?php echo fxBibActionGroupOpen('epr-action-auto-group', $blnHasSequences); ?>
|
||||
<?php echo fxBibBtnAideSegmentOpen(); ?>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-secondary btn-auto btn-bib-auto<?php echo $blnAutoActive ? ' btn-bib-auto--active' : ''; ?>"<?php echo fxBibTippyAttr('bib_v4_tip_auto'); ?>>
|
||||
<?php echo fxBibEsc($blnAutoActive ? fxBibTexte('bib_v4_auto_config', 0) : fxBibTexte('bib_v4_auto', 0)); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_auto', 'auto', false); ?>
|
||||
<?php echo fxBibBtnAideSegmentClose($blnAutoActive ? 'bib_v4_auto_config' : 'bib_v4_auto'); ?>
|
||||
<?php echo fxBibActionGroupClose(); ?>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="bib-advanced-actions<?php echo $blnShowReset ? '' : ' bib-ui-hidden'; ?>">
|
||||
<span class="bib-advanced-actions__title"><?php fxBibTexteTrad('bib_v5_advanced_actions', 1); ?></span>
|
||||
<?php echo fxBibActionGroupOpen('epr-action-reset-group', $blnShowReset); ?>
|
||||
<?php echo fxBibBtnAideSegmentOpen(); ?>
|
||||
<button type="button"
|
||||
@ -4519,16 +4575,6 @@ function renderBibAssignActions($epr_id, $eve_id, $strLangue, $infoBib, $blnAuto
|
||||
<?php echo fxBibAideButton('bib_v4_reset', 'danger', false); ?>
|
||||
<?php echo fxBibBtnAideSegmentClose('bib_v4_reset'); ?>
|
||||
<?php echo fxBibActionGroupClose(); ?>
|
||||
|
||||
<?php echo fxBibActionGroupOpen('epr-action-auto-group', $blnHasSequences); ?>
|
||||
<?php echo fxBibBtnAideSegmentOpen(); ?>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-auto btn-bib-auto<?php echo $blnAutoActive ? ' btn-bib-auto--active' : ''; ?>"<?php echo fxBibTippyAttr('bib_v4_tip_auto'); ?>>
|
||||
<?php echo fxBibEsc($blnAutoActive ? fxBibTexte('bib_v4_auto_config', 0) : fxBibTexte('bib_v4_auto', 0)); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_auto', 'auto', false); ?>
|
||||
<?php echo fxBibBtnAideSegmentClose($blnAutoActive ? 'bib_v4_auto_config' : 'bib_v4_auto'); ?>
|
||||
<?php echo fxBibActionGroupClose(); ?>
|
||||
</div>
|
||||
|
||||
<?php echo renderBibBatchPickPrompt(); ?>
|
||||
@ -4754,8 +4800,129 @@ function renderBibToolNavBtn($strTool, $strTitleClef, $strBadgesHtml = '', $blnA
|
||||
return $html;
|
||||
}
|
||||
|
||||
/** MSIN-4467 — Onglet principal de l'espace de travail dossards. */
|
||||
function renderBibWorkspaceTab($strWorkspace, $strTitleClef, $blnActive = false) {
|
||||
$strClass = 'bib-workspace-tab' . ($blnActive ? ' is-active' : '');
|
||||
return '<button type="button" class="' . $strClass . '"'
|
||||
. ' data-bib-workspace="' . fxBibEsc($strWorkspace) . '"'
|
||||
. ' aria-selected="' . ($blnActive ? 'true' : 'false') . '"'
|
||||
. ' role="tab">'
|
||||
. fxBibEsc(fxBibTexte($strTitleClef, 0))
|
||||
. fxBibTradButton($strTitleClef)
|
||||
. '</button>';
|
||||
}
|
||||
|
||||
/** MSIN-4467 — Résumé événement affiché avant le détail des épreuves. */
|
||||
function renderBibPreparationOverview(array $tabEpreuves) {
|
||||
$intRegistered = 0;
|
||||
$intAssigned = 0;
|
||||
|
||||
foreach ($tabEpreuves as $tabEpreuve) {
|
||||
if (!is_array($tabEpreuve)) {
|
||||
continue;
|
||||
}
|
||||
$tabInfo = fxInfosBibEpreuve((int)($tabEpreuve['epr_id'] ?? 0));
|
||||
$intRegistered += (int)($tabInfo['total'] ?? 0);
|
||||
$intAssigned += (int)($tabInfo['avec_bib'] ?? 0);
|
||||
}
|
||||
|
||||
$intPending = max(0, $intRegistered - $intAssigned);
|
||||
$tabStats = [
|
||||
['value' => count($tabEpreuves), 'key' => 'bib_v5_stat_races', 'tone' => ''],
|
||||
['value' => $intRegistered, 'key' => 'bib_v5_stat_registered', 'tone' => ''],
|
||||
['value' => $intAssigned, 'key' => 'bib_v5_stat_assigned', 'tone' => 'success'],
|
||||
['value' => $intPending, 'key' => 'bib_v5_stat_pending', 'tone' => $intPending > 0 ? 'warning' : 'success'],
|
||||
];
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="bib-preparation-overview">
|
||||
<div class="bib-workspace-panel-heading">
|
||||
<p><?php fxBibTexteTrad('bib_v5_preparation_intro', 1); ?></p>
|
||||
</div>
|
||||
<dl class="bib-preparation-stats">
|
||||
<?php foreach ($tabStats as $tabStat) { ?>
|
||||
<div class="bib-preparation-stat<?php echo $tabStat['tone'] !== '' ? ' bib-preparation-stat--' . fxBibEsc($tabStat['tone']) : ''; ?>">
|
||||
<dd data-bib-overview-stat="<?php echo fxBibEsc($tabStat['key']); ?>"><?php echo (int)$tabStat['value']; ?></dd>
|
||||
<dt><?php fxBibTexteTrad($tabStat['key'], 1); ?></dt>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</dl>
|
||||
</div>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* MSIN-4440 — Grille 3+2 des outils bib v4 + coquille panneau de détail unique.
|
||||
* MSIN-4467 — Aperçu seulement de la future production physique.
|
||||
* Aucune saisie ni persistance : la structure réserve le futur parcours.
|
||||
*/
|
||||
function renderBibProductionPreview(array $tabEpreuves, $strLangue = 'fr') {
|
||||
ob_start();
|
||||
?>
|
||||
<div class="bib-production-preview">
|
||||
<div class="bib-workspace-panel-heading">
|
||||
<p><?php fxBibTexteTrad('bib_v5_production_intro', 1); ?></p>
|
||||
<span class="bib-production-planned"><?php fxBibTexteTrad('bib_v5_production_planned', 1); ?></span>
|
||||
</div>
|
||||
|
||||
<ol class="bib-production-steps" aria-label="<?php echo fxBibEsc(fxBibTexte('bib_v5_workspace_production', 0)); ?>">
|
||||
<?php
|
||||
$tabStepKeys = [
|
||||
'bib_v5_production_step_ranges',
|
||||
'bib_v5_production_step_answers',
|
||||
'bib_v5_production_step_review',
|
||||
'bib_v5_production_step_printer',
|
||||
];
|
||||
foreach ($tabStepKeys as $intIndex => $strStepKey) { ?>
|
||||
<li>
|
||||
<span class="bib-production-step-number"><?php echo $intIndex + 1; ?></span>
|
||||
<span><?php fxBibTexteTrad($strStepKey, 1); ?></span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ol>
|
||||
|
||||
<div class="bib-production-category-heading">
|
||||
<h3><?php fxBibTexteTrad('bib_v5_production_categories', 1); ?></h3>
|
||||
</div>
|
||||
<div class="bib-production-category-list">
|
||||
<?php foreach ($tabEpreuves as $tabEpreuve) {
|
||||
if (!is_array($tabEpreuve)) {
|
||||
continue;
|
||||
}
|
||||
$intEprId = (int)($tabEpreuve['epr_id'] ?? 0);
|
||||
$intRangeCount = fxBibCountSavedRanges(fxInfosBibRange($intEprId, 0, false));
|
||||
?>
|
||||
<article class="bib-production-category" data-epr-id="<?php echo $intEprId; ?>">
|
||||
<div class="bib-production-category__identity">
|
||||
<strong><?php echo fxBibEsc(fxBibEpreuveDisplayName($tabEpreuve, $strLangue)); ?></strong>
|
||||
<span><?php echo fxBibEsc(trim($tabEpreuve['epr_nom_' . $strLangue] ?? '')); ?></span>
|
||||
</div>
|
||||
<dl class="bib-production-category__fields">
|
||||
<div>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_production_ranges', 1); ?></dt>
|
||||
<dd class="bib-production-range-count"><?php echo $intRangeCount; ?></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_production_color', 1); ?></dt>
|
||||
<dd><?php fxBibTexteTrad('bib_v5_production_to_define', 1); ?></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_production_questions', 1); ?></dt>
|
||||
<dd><?php fxBibTexteTrad('bib_v5_production_to_define', 1); ?></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<span class="bib-production-category__status"><?php fxBibTexteTrad('bib_v5_production_status', 1); ?></span>
|
||||
</article>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* MSIN-4440 / MSIN-4467 — Espaces principaux + outils et panneau de détail unique.
|
||||
*/
|
||||
function renderBibToolNav($int_eve_id, $tabEpreuves, $strLangue = 'fr') {
|
||||
$int_eve_id = (int)$int_eve_id;
|
||||
@ -4771,20 +4938,51 @@ function renderBibToolNav($int_eve_id, $tabEpreuves, $strLangue = 'fr') {
|
||||
$strEventBadges = renderBibEventConfigHeaderNote($blnAllow);
|
||||
$strAnomBadges = renderBibAnomaliesNavBadge(0, true);
|
||||
|
||||
$strNavLabel = ($strLangue === 'en') ? 'Bib management tools' : 'Outils gestion dossards';
|
||||
$strNavLabel = fxBibTexte('bib_v5_workspace_label', 0);
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="bib-tool-hub">
|
||||
<nav class="bib-tool-nav" aria-label="<?php echo fxBibEsc($strNavLabel); ?>">
|
||||
<?php echo renderBibToolNavBtn('event_config', 'bib_v4_event_config_title', $strEventBadges); ?>
|
||||
<?php echo renderBibToolNavBtn('qty_summary', 'bib_v4_qty_summary_title'); ?>
|
||||
<?php echo renderBibToolNavBtn('anomalies', 'bib_v4_anomalies_title', $strAnomBadges); ?>
|
||||
<?php echo renderBibToolNavBtn('dist_print', 'bib_v4_dist_print_title'); ?>
|
||||
<?php if (fxBibGlobalBatchToolIsAvailable($int_eve_id, $tabEpreuves)) {
|
||||
echo renderBibToolNavBtn('global_batch', 'bib_v4_global_batch_title');
|
||||
} ?>
|
||||
<nav class="bib-workspace-nav" role="tablist" aria-label="<?php echo fxBibEsc($strNavLabel); ?>">
|
||||
<?php echo renderBibWorkspaceTab('preparation', 'bib_v5_workspace_preparation', true); ?>
|
||||
<?php echo renderBibWorkspaceTab('production', 'bib_v5_workspace_production'); ?>
|
||||
<?php echo renderBibWorkspaceTab('operations', 'bib_v5_workspace_operations'); ?>
|
||||
<?php echo renderBibWorkspaceTab('settings', 'bib_v5_workspace_settings'); ?>
|
||||
</nav>
|
||||
|
||||
<section class="bib-workspace-panel" data-bib-workspace-panel="preparation">
|
||||
<?php echo renderBibPreparationOverview($tabEpreuves); ?>
|
||||
<nav class="bib-tool-nav bib-tool-nav--preparation" aria-label="<?php echo fxBibEsc(fxBibTexte('bib_v5_workspace_preparation', 0)); ?>">
|
||||
<?php echo renderBibToolNavBtn('qty_summary', 'bib_v4_qty_summary_title'); ?>
|
||||
<?php if (fxBibGlobalBatchToolIsAvailable($int_eve_id, $tabEpreuves)) {
|
||||
echo renderBibToolNavBtn('global_batch', 'bib_v4_global_batch_title');
|
||||
} ?>
|
||||
</nav>
|
||||
</section>
|
||||
|
||||
<section class="bib-workspace-panel bib-ui-hidden" data-bib-workspace-panel="production">
|
||||
<?php echo renderBibProductionPreview($tabEpreuves, $strLangue); ?>
|
||||
</section>
|
||||
|
||||
<section class="bib-workspace-panel bib-ui-hidden" data-bib-workspace-panel="operations">
|
||||
<div class="bib-workspace-panel-heading">
|
||||
<p><?php fxBibTexteTrad('bib_v5_operations_intro', 1); ?></p>
|
||||
</div>
|
||||
<nav class="bib-tool-nav bib-tool-nav--operations" aria-label="<?php echo fxBibEsc(fxBibTexte('bib_v5_workspace_operations', 0)); ?>">
|
||||
<?php echo renderBibToolNavBtn('anomalies', 'bib_v4_anomalies_title', $strAnomBadges); ?>
|
||||
<?php echo renderBibToolNavBtn('dist_print', 'bib_v4_dist_print_title'); ?>
|
||||
</nav>
|
||||
</section>
|
||||
|
||||
<section class="bib-workspace-panel bib-ui-hidden" data-bib-workspace-panel="settings">
|
||||
<div class="bib-workspace-panel-heading">
|
||||
<p><?php fxBibTexteTrad('bib_v5_settings_intro', 1); ?></p>
|
||||
</div>
|
||||
<nav class="bib-tool-nav bib-tool-nav--settings" aria-label="<?php echo fxBibEsc(fxBibTexte('bib_v5_workspace_settings', 0)); ?>">
|
||||
<?php echo renderBibToolNavBtn('event_config', 'bib_v4_event_config_title', $strEventBadges); ?>
|
||||
</nav>
|
||||
</section>
|
||||
|
||||
<div id="bib-tool-detail" class="bib-tool-detail bib-ui-hidden" aria-live="polite">
|
||||
<div class="bib-tool-detail__header epr-header">
|
||||
<span id="bib-tool-detail-title" class="bib-tool-detail__title"></span>
|
||||
@ -5299,6 +5497,7 @@ function fxShowBibTool4($str_code, $int_eve_id, $strLangue){
|
||||
<?php echo renderBibGlobalBatchPanelShell((int)$int_eve_id, $tabEpreuves, $strLangue); ?>
|
||||
</div>
|
||||
|
||||
<div id="bib-preparation-races" class="bib-preparation-races">
|
||||
<?php for($i = 1; $i <= count($tabEpreuves); $i++){ ?>
|
||||
|
||||
<?php
|
||||
@ -5325,11 +5524,15 @@ function fxShowBibTool4($str_code, $int_eve_id, $strLangue){
|
||||
// Prochain tour : étape 6–7 (assignation à l'achat).
|
||||
$blnAutoActive = fxIsBibAutoActive((int)$tabEpreuves[$i]['epr_id']);
|
||||
$blnHasLockedRanges = fxBibEpreuveHasLockedRanges((int)$tabEpreuves[$i]['epr_id']);
|
||||
$intSeqCount = fxBibCountSavedRanges($tabBibStats);
|
||||
$intPending = (int)($infoBib['a_assigner'] ?? 0);
|
||||
$blnRaceExpanded = ($i === 1);
|
||||
$blnRaceReady = ($intPending === 0 && $intSeqCount > 0);
|
||||
|
||||
?>
|
||||
|
||||
<?php /* MSIN-4379 — Étape 2 : attributs/data pour l'état auto au chargement de la page. */ ?>
|
||||
<div class="epr-row <?php echo $strClass ?><?php echo $blnAutoActive ? ' auto-enabled' : ''; ?>"
|
||||
<div class="epr-row <?php echo $strClass ?><?php echo $blnAutoActive ? ' auto-enabled' : ''; ?><?php echo $blnRaceExpanded ? ' is-expanded' : ''; ?>"
|
||||
data-epr-id="<?php echo (int)$tabEpreuves[$i]['epr_id']; ?>"
|
||||
data-auto-active="<?php echo $blnAutoActive ? '1' : '0'; ?>"
|
||||
data-auto-label="<?php echo fxBibEsc(fxBibTexte('bib_v4_auto', 0)); ?>"
|
||||
@ -5340,6 +5543,45 @@ function fxShowBibTool4($str_code, $int_eve_id, $strLangue){
|
||||
data-reset-cancel-label="<?php echo fxBibEsc(fxBibTexte('bib_v4_reset_cancel', 0)); ?>"
|
||||
data-go-label="<?php echo fxBibEsc(fxBibTexte('bib_v4_batch_go', 0)); ?>"
|
||||
data-bib-a-assigner="<?php echo (int)($infoBib['a_assigner'] ?? 0); ?>">
|
||||
<div class="bib-race-summary"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
aria-expanded="<?php echo $blnRaceExpanded ? 'true' : 'false'; ?>"
|
||||
aria-controls="bib-race-detail-<?php echo (int)$tabEpreuves[$i]['epr_id']; ?>">
|
||||
<div class="bib-race-summary__identity">
|
||||
<strong><?php echo fxBibEsc(fxBibEpreuveDisplayName($tabEpreuves[$i], $strLangue)); ?></strong>
|
||||
<span><?php echo fxBibEsc(trim($tabEpreuves[$i]['epr_nom_' . $strLangue] ?? '')); ?></span>
|
||||
</div>
|
||||
<dl class="bib-race-summary__stats">
|
||||
<div>
|
||||
<dd><span class="bib-race-summary-assigned"><?php echo (int)($infoBib['avec_bib'] ?? 0); ?></span> / <span class="bib-race-summary-total"><?php echo (int)($infoBib['total'] ?? 0); ?></span></dd>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_stat_assigned', 1); ?></dt>
|
||||
</div>
|
||||
<div>
|
||||
<dd class="bib-race-summary-ranges"><?php echo $intSeqCount; ?></dd>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_production_ranges', 1); ?></dt>
|
||||
</div>
|
||||
<div>
|
||||
<dd class="bib-race-summary-pending"><?php echo $intPending; ?></dd>
|
||||
<dt><?php fxBibTexteTrad('bib_v5_stat_pending', 1); ?></dt>
|
||||
</div>
|
||||
</dl>
|
||||
<span class="bib-race-summary__status<?php echo $blnRaceReady ? ' is-ready' : ''; ?>"
|
||||
data-label-ready="<?php echo fxBibEsc(fxBibTexte('bib_v5_race_ready', 0)); ?>"
|
||||
data-label-incomplete="<?php echo fxBibEsc(fxBibTexte('bib_v5_race_incomplete', 0)); ?>">
|
||||
<?php fxBibTexteTrad($blnRaceReady ? 'bib_v5_race_ready' : 'bib_v5_race_incomplete', 1); ?>
|
||||
</span>
|
||||
<button type="button"
|
||||
class="bib-race-toggle"
|
||||
data-label-expand="<?php echo fxBibEsc(fxBibTexte('bib_v4_expand', 0)); ?>"
|
||||
data-label-collapse="<?php echo fxBibEsc(fxBibTexte('bib_v4_collapse', 0)); ?>"
|
||||
aria-label="<?php echo fxBibEsc(fxBibTexte($blnRaceExpanded ? 'bib_v4_collapse' : 'bib_v4_expand', 0)); ?>"
|
||||
title="<?php echo fxBibEsc(fxBibTexte($blnRaceExpanded ? 'bib_v4_collapse' : 'bib_v4_expand', 0)); ?>">
|
||||
<i class="fa <?php echo $blnRaceExpanded ? 'fa-chevron-up' : 'fa-chevron-down'; ?>" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="epr-row-detail" id="bib-race-detail-<?php echo (int)$tabEpreuves[$i]['epr_id']; ?>">
|
||||
<!-- GAUCHE — identité épreuve (titre dans la bande bleue, cohérent avec la droite) -->
|
||||
<div class="epr-block epr-block-identity">
|
||||
<?php echo renderBibEpreuveIdentityHeader($tabEpreuves[$i], $infoBib, $strLangue); ?>
|
||||
@ -5411,7 +5653,7 @@ if ($teamMode <= 0) {
|
||||
</div>
|
||||
|
||||
<?php /* MSIN-4379 — Assignation de dossard : séquences + actions (ex 3e colonne). */ ?>
|
||||
<div class="epr-block epr-block-assign is-collapsed">
|
||||
<div class="epr-block epr-block-assign">
|
||||
<div class="epr-header epr-header--collapsible">
|
||||
<div class="epr-header-start">
|
||||
<?php echo fxBibBlockHeader('bib_v4_assign_title', 'bib_v4_assign_doc'); ?>
|
||||
@ -5419,9 +5661,17 @@ if ($teamMode <= 0) {
|
||||
<?php echo fxBibAssignHeaderSummary(fxBibCountSavedRanges($tabBibStats), $blnAutoActive); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php echo fxBibBlockCollapseToggle($strLangue, true); ?>
|
||||
<?php echo fxBibBlockCollapseToggle($strLangue, false); ?>
|
||||
</div>
|
||||
<div class="epr-content">
|
||||
<section class="bib-assignment-step">
|
||||
<div class="bib-assignment-step__header">
|
||||
<span class="bib-assignment-step__number" aria-hidden="true">1</span>
|
||||
<div>
|
||||
<h3><?php fxBibTexteTrad('bib_v5_ranges_title', 1); ?></h3>
|
||||
<p><?php fxBibTexteTrad('bib_v5_ranges_hint', 1); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (count($tabBibStats) == 0) { ?>
|
||||
|
||||
@ -5432,8 +5682,16 @@ if ($teamMode <= 0) {
|
||||
<?php echo renderBibRanges($tabBibStats, $tabEpreuves[$i]['epr_id']); ?>
|
||||
|
||||
<?php } ?>
|
||||
</section>
|
||||
|
||||
<div class="epr-assign-divider" role="separator" aria-hidden="true"></div>
|
||||
<section class="bib-assignment-step">
|
||||
<div class="bib-assignment-step__header">
|
||||
<span class="bib-assignment-step__number" aria-hidden="true">2</span>
|
||||
<div>
|
||||
<h3><?php fxBibTexteTrad('bib_v5_method_title', 1); ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo renderBibAssignActions(
|
||||
(int)$tabEpreuves[$i]['epr_id'],
|
||||
(int)$int_eve_id,
|
||||
@ -5444,14 +5702,17 @@ if ($teamMode <= 0) {
|
||||
count($tabBibStats) > 0,
|
||||
$tabEpreuves[$i]
|
||||
); ?>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@ -7,8 +7,8 @@
|
||||
* Constantes *
|
||||
*
|
||||
**************/
|
||||
define('_VERSION_CODE', '4.72.842');
|
||||
define('_DATE_CODE', '2026-07-20');
|
||||
define('_VERSION_CODE', '4.72.843');
|
||||
define('_DATE_CODE', '2026-07-21');
|
||||
//MSIN-4290
|
||||
define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe');
|
||||
|
||||
|
||||
42
sql/MSIN-4467-refonte-visuelle-dossards-rollback.sql
Normal file
42
sql/MSIN-4467-refonte-visuelle-dossards-rollback.sql
Normal file
@ -0,0 +1,42 @@
|
||||
-- MSIN-4467 — Rollback des libellés de la refonte visuelle
|
||||
-- À exécuter seulement après retour à une version du code antérieure à MSIN-4467.
|
||||
-- Supprime uniquement les nouvelles clés Info ajoutées par ce ticket.
|
||||
|
||||
DELETE FROM info
|
||||
WHERE info_prg = 'compte.php'
|
||||
AND info_clef IN (
|
||||
'bib_v5_workspace_label',
|
||||
'bib_v5_workspace_preparation',
|
||||
'bib_v5_workspace_production',
|
||||
'bib_v5_workspace_operations',
|
||||
'bib_v5_workspace_settings',
|
||||
'bib_v5_preparation_intro',
|
||||
'bib_v5_stat_races',
|
||||
'bib_v5_stat_registered',
|
||||
'bib_v5_stat_assigned',
|
||||
'bib_v5_stat_pending',
|
||||
'bib_v5_race_ready',
|
||||
'bib_v5_race_incomplete',
|
||||
'bib_v5_ranges_title',
|
||||
'bib_v5_ranges_hint',
|
||||
'bib_v5_method_title',
|
||||
'bib_v5_batch_title',
|
||||
'bib_v5_batch_hint',
|
||||
'bib_v5_auto_title',
|
||||
'bib_v5_auto_hint',
|
||||
'bib_v5_advanced_actions',
|
||||
'bib_v5_production_intro',
|
||||
'bib_v5_production_planned',
|
||||
'bib_v5_production_step_ranges',
|
||||
'bib_v5_production_step_answers',
|
||||
'bib_v5_production_step_review',
|
||||
'bib_v5_production_step_printer',
|
||||
'bib_v5_production_categories',
|
||||
'bib_v5_production_ranges',
|
||||
'bib_v5_production_color',
|
||||
'bib_v5_production_questions',
|
||||
'bib_v5_production_to_define',
|
||||
'bib_v5_production_status',
|
||||
'bib_v5_operations_intro',
|
||||
'bib_v5_settings_intro'
|
||||
);
|
||||
108
sql/MSIN-4467-refonte-visuelle-dossards.sql
Normal file
108
sql/MSIN-4467-refonte-visuelle-dossards.sql
Normal file
@ -0,0 +1,108 @@
|
||||
-- MSIN-4467 — Refonte visuelle de la gestion des dossards
|
||||
-- Ajoute uniquement de nouvelles clés Info pour la navigation et l'aperçu de production.
|
||||
-- Idempotent. Aucun libellé existant ni aucune donnée métier ne sont modifiés.
|
||||
|
||||
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,
|
||||
src.info_aide,
|
||||
'compte.php',
|
||||
'MSIN-4467',
|
||||
0,
|
||||
1,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
NOW()
|
||||
FROM (
|
||||
SELECT 'bib_v5_workspace_label' info_clef, 'fr' info_langue, 'Gestion des dossards' info_texte, '' info_aide
|
||||
UNION ALL SELECT 'bib_v5_workspace_label', 'en', 'Bib management', ''
|
||||
UNION ALL SELECT 'bib_v5_workspace_preparation', 'fr', 'Préparation', 'Préparer les épreuves, les plages de numéros et l''attribution des dossards.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_preparation', 'en', 'Preparation', 'Prepare races, number ranges and bib assignment.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_production', 'fr', 'Production de dossards', 'Préparer les choix à transmettre à l''imprimeur à partir des plages existantes.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_production', 'en', 'Bib production', 'Prepare printer instructions using existing bib ranges.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_operations', 'fr', 'Opérations', 'Vérifier les anomalies et préparer la distribution.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_operations', 'en', 'Operations', 'Review anomalies and prepare distribution.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_settings', 'fr', 'Réglages', 'Règles qui s''appliquent à l''ensemble de l''événement.'
|
||||
UNION ALL SELECT 'bib_v5_workspace_settings', 'en', 'Settings', 'Rules that apply to the entire event.'
|
||||
UNION ALL SELECT 'bib_v5_preparation_intro', 'fr', 'Préparez les épreuves et attribuez les dossards aux inscriptions.', ''
|
||||
UNION ALL SELECT 'bib_v5_preparation_intro', 'en', 'Prepare races and assign bibs to registrations.', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_races', 'fr', 'Épreuves actives', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_races', 'en', 'Active races', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_registered', 'fr', 'Inscriptions', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_registered', 'en', 'Registrations', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_assigned', 'fr', 'Dossards attribués', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_assigned', 'en', 'Assigned bibs', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_pending', 'fr', 'À attribuer', ''
|
||||
UNION ALL SELECT 'bib_v5_stat_pending', 'en', 'To assign', ''
|
||||
UNION ALL SELECT 'bib_v5_race_ready', 'fr', 'Prête', ''
|
||||
UNION ALL SELECT 'bib_v5_race_ready', 'en', 'Ready', ''
|
||||
UNION ALL SELECT 'bib_v5_race_incomplete', 'fr', 'À compléter', ''
|
||||
UNION ALL SELECT 'bib_v5_race_incomplete', 'en', 'To complete', ''
|
||||
UNION ALL SELECT 'bib_v5_ranges_title', 'fr', 'Plages de numéros', ''
|
||||
UNION ALL SELECT 'bib_v5_ranges_title', 'en', 'Number ranges', ''
|
||||
UNION ALL SELECT 'bib_v5_ranges_hint', 'fr', 'Définissez les numéros disponibles pour cette épreuve.', ''
|
||||
UNION ALL SELECT 'bib_v5_ranges_hint', 'en', 'Define the numbers available for this race.', ''
|
||||
UNION ALL SELECT 'bib_v5_method_title', 'fr', 'Méthode d’attribution', ''
|
||||
UNION ALL SELECT 'bib_v5_method_title', 'en', 'Assignment method', ''
|
||||
UNION ALL SELECT 'bib_v5_batch_title', 'fr', 'Attribuer maintenant', ''
|
||||
UNION ALL SELECT 'bib_v5_batch_title', 'en', 'Assign now', ''
|
||||
UNION ALL SELECT 'bib_v5_batch_hint', 'fr', 'Attribuer en lot aux inscriptions qui n’ont pas encore de dossard.', ''
|
||||
UNION ALL SELECT 'bib_v5_batch_hint', 'en', 'Assign in bulk to registrations that do not have a bib yet.', ''
|
||||
UNION ALL SELECT 'bib_v5_auto_title', 'fr', 'Nouvelles inscriptions', ''
|
||||
UNION ALL SELECT 'bib_v5_auto_title', 'en', 'New registrations', ''
|
||||
UNION ALL SELECT 'bib_v5_auto_hint', 'fr', 'Attribuer automatiquement un dossard lors des prochaines inscriptions.', ''
|
||||
UNION ALL SELECT 'bib_v5_auto_hint', 'en', 'Automatically assign a bib to future registrations.', ''
|
||||
UNION ALL SELECT 'bib_v5_advanced_actions', 'fr', 'Actions avancées', ''
|
||||
UNION ALL SELECT 'bib_v5_advanced_actions', 'en', 'Advanced actions', ''
|
||||
UNION ALL SELECT 'bib_v5_production_intro', 'fr', 'Préparez les informations nécessaires à l’impression des dossards à partir des plages déjà configurées.', ''
|
||||
UNION ALL SELECT 'bib_v5_production_intro', 'en', 'Prepare the information required to print bibs using the ranges already configured.', ''
|
||||
UNION ALL SELECT 'bib_v5_production_planned', 'fr', 'Fonctionnalité prévue — aucune donnée ne sera enregistrée pour le moment.', ''
|
||||
UNION ALL SELECT 'bib_v5_production_planned', 'en', 'Planned feature — no data will be saved yet.', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_ranges', 'fr', 'Choisir les plages', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_ranges', 'en', 'Choose ranges', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_answers', 'fr', 'Répondre par catégorie', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_answers', 'en', 'Answer by category', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_review', 'fr', 'Réviser la production', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_review', 'en', 'Review production', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_printer', 'fr', 'Transmettre à l’imprimeur', ''
|
||||
UNION ALL SELECT 'bib_v5_production_step_printer', 'en', 'Send to printer', ''
|
||||
UNION ALL SELECT 'bib_v5_production_categories', 'fr', 'Préparation par épreuve et catégorie', ''
|
||||
UNION ALL SELECT 'bib_v5_production_categories', 'en', 'Preparation by race and category', ''
|
||||
UNION ALL SELECT 'bib_v5_production_ranges', 'fr', 'Plages existantes', ''
|
||||
UNION ALL SELECT 'bib_v5_production_ranges', 'en', 'Existing ranges', ''
|
||||
UNION ALL SELECT 'bib_v5_production_color', 'fr', 'Couleur du dossard', ''
|
||||
UNION ALL SELECT 'bib_v5_production_color', 'en', 'Bib colour', ''
|
||||
UNION ALL SELECT 'bib_v5_production_questions', 'fr', 'Questions de production', ''
|
||||
UNION ALL SELECT 'bib_v5_production_questions', 'en', 'Production questions', ''
|
||||
UNION ALL SELECT 'bib_v5_production_to_define', 'fr', 'À définir', ''
|
||||
UNION ALL SELECT 'bib_v5_production_to_define', 'en', 'To be defined', ''
|
||||
UNION ALL SELECT 'bib_v5_production_status', 'fr', 'À préparer', ''
|
||||
UNION ALL SELECT 'bib_v5_production_status', 'en', 'To prepare', ''
|
||||
UNION ALL SELECT 'bib_v5_operations_intro', 'fr', 'Contrôlez les anomalies et préparez les documents pour la distribution.', ''
|
||||
UNION ALL SELECT 'bib_v5_operations_intro', 'en', 'Review anomalies and prepare distribution documents.', ''
|
||||
UNION ALL SELECT 'bib_v5_settings_intro', 'fr', 'Gérez les règles qui s’appliquent à l’ensemble de l’événement.', ''
|
||||
UNION ALL SELECT 'bib_v5_settings_intro', 'en', 'Manage rules that apply to the entire event.', ''
|
||||
) 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'
|
||||
);
|
||||
Reference in New Issue
Block a user