From 65c7d8723ec1b665c499a717c61b3c527ca99e71 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Tue, 17 Mar 2026 15:32:02 +0100 Subject: [PATCH] [FIX] simulate.html: card BIG + training user_ids array fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- public/simulate.html | 30 +++++++++++++++++++++--------- simulate-nis2-big.php | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/public/simulate.html b/public/simulate.html index 1da0b01..a52ac31 100644 --- a/public/simulate.html +++ b/public/simulate.html @@ -219,6 +219,11 @@

B2B License Provisioning

Invite token → org + user + API key creati atomicamente. SSO JWT.

+
+
BIG
+

Big Simulation — 10 Aziende

+

Copertura totale: 18 fasi, 800 risposte assessment, 55+ rischi, incidenti Art.23, NCR/CAPA, whistleblowing, audit chain, Services API.

+
@@ -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; diff --git a/simulate-nis2-big.php b/simulate-nis2-big.php index 57b6575..86125bf 100644 --- a/simulate-nis2-big.php +++ b/simulate-nis2-big.php @@ -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'])) {