[FIX] simulate.html: card BIG + training user_ids array fix

- simulate.html: aggiunta card BIG (10 aziende, 18 fasi) con url
  simulate-nis2-big.php, label BIG in SIM_LABELS, confirm dialog dedicato
- simulate-nis2-big.php: fix training assign user_id → user_ids (array)
  come richiesto da TrainingController::assignCourse()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-03-17 15:32:02 +01:00
parent 56df54f8b1
commit 65c7d8723e
2 changed files with 22 additions and 10 deletions

View File

@ -219,6 +219,11 @@
<h4>B2B License Provisioning</h4>
<p>Invite token → org + user + API key creati atomicamente. SSO JWT.</p>
</div>
<div class="sim-card" onclick="selectSim(this, 'big')" style="border-color:#7c3aed;">
<div class="sim-badge" style="background:rgba(124,58,237,.2);color:#c4b5fd;border:1px solid rgba(124,58,237,.4);">BIG</div>
<h4>Big Simulation — 10 Aziende</h4>
<p>Copertura totale: 18 fasi, 800 risposte assessment, 55+ rischi, incidenti Art.23, NCR/CAPA, whistleblowing, audit chain, Services API.</p>
</div>
</div>
<!-- Controlli -->
@ -297,6 +302,7 @@ const SIM_LABELS = {
sim04: 'SIM-04 Whistleblowing',
sim05: 'SIM-05 Audit Chain',
sim06: 'SIM-06 B2B License',
big: 'BIG — 10 Aziende (18 fasi)',
};
// ── Selezione scenario ────────────────────────────────────────────────────
@ -447,20 +453,24 @@ function runSimulation() {
sim04: 'SIM-04 — Whistleblowing SCADA',
sim05: 'SIM-05 — Audit Trail Hash Chain',
sim06: 'SIM-06 — B2B License Provisioning',
big: 'BIG — 10 Aziende, 18 Fasi, Copertura Totale',
};
const scenarioName = labels[selectedSim] || selectedSim;
const resetNote = selectedSim !== 'sim06'
const resetNote = (selectedSim !== 'sim06' && selectedSim !== 'big')
? '\n↺ I dati demo precedenti verranno ripuliti automaticamente.'
: '\n(SIM-06 è indipendente — nessun reset automatico)';
: selectedSim === 'big'
? '\n↺ Auto-reset dei dati demo incluso nella FASE 0.'
: '\n(SIM-06 è indipendente — nessun reset automatico)';
const bigNote = selectedSim === 'big'
? '\n\n10 aziende: InfraTech, MedSalute, DistribuzionePlus, BancaRegionale,\nAquaPura, LogisticaRapida, SmartCity, EduDigital, AgriTech, ManufacturingPro\n\n⚠ Target: ✓200+ — Durata stimata: ~15-20 minuti'
: '';
if (!confirm(
'Avvia Simulazione NIS2 Agile?\n\n' +
'▸ ' + scenarioName + '\n\n' +
'• DataCore S.r.l. (IT/Cloud - Essential)\n' +
'• MedClinic Italia S.p.A. (Sanità - Important)\n' +
'• EnerNet Distribuzione S.r.l. (Energia - Critical)\n' +
resetNote + '\n' +
'\nDurata stimata: ~8-12 minuti'
'▸ ' + scenarioName +
(selectedSim !== 'big' ? '\n\n• DataCore S.r.l. (IT/Cloud - Essential)\n• MedClinic Italia S.p.A. (Sanità - Important)\n• EnerNet Distribuzione S.r.l. (Energia - Critical)' : '') +
bigNote + resetNote + '\n' +
(selectedSim !== 'big' ? '\nDurata stimata: ~8-12 minuti' : '')
)) return;
if (evtSource) { evtSource.close(); evtSource = null; }
@ -473,7 +483,9 @@ function runSimulation() {
document.getElementById('statsGrid').style.display = 'none';
document.getElementById('consoleTitle').textContent = 'NIS2 Agile Simulator v2.0 — ' + (SIM_LABELS[selectedSim] || selectedSim);
const url = `simulate-nis2.php?sim=${selectedSim}&t=${Date.now()}`;
const url = selectedSim === 'big'
? `simulate-nis2-big.php?t=${Date.now()}`
: `simulate-nis2.php?sim=${selectedSim}&t=${Date.now()}`;
evtSource = new EventSource(url);
let phaseCount = 0;

View File

@ -1307,7 +1307,7 @@ foreach ($COMPANIES as $slug => $comp) {
if ($uid) {
$assignRes = api('POST', '/training/assign', [
'course_id' => $courseId,
'user_id' => $uid,
'user_ids' => [$uid],
'due_date' => date('Y-m-d', strtotime('+30 days')),
], $jwt, $orgId);
if (!empty($assignRes['success'])) {