[FIX] ServicesController + simulate-nis2: adatta a schema users reale (full_name, is_active)

- ServicesController::provision(): INSERT users usa full_name/is_active (non first_name/last_name/status)
- ServicesController::ssoLogin(): stesso fix per SSO user creation
- simulate-nis2::ensureUser(): registration payload usa full_name (non first_name+last_name)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-03-09 09:09:07 +01:00
co-authored by Claude Sonnet 4.6
parent eddc2fe79d
commit d51c365e46
2 changed files with 18 additions and 23 deletions
+10 -13
View File
@@ -325,14 +325,10 @@ class ServicesController extends BaseController
if (!$user) {
// Crea utente SSO (senza password — accede solo via token)
$parts = explode(' ', $name, 2);
$firstName = $parts[0] ?? $email;
$lastName = $parts[1] ?? '';
Database::query(
'INSERT INTO users (email, password_hash, first_name, last_name, role, status)
VALUES (?, ?, ?, ?, ?, "active")',
[$email, '', $firstName, $lastName, $role]
'INSERT INTO users (email, password_hash, full_name, role, is_active)
VALUES (?, ?, ?, ?, 1)',
[$email, '', $name ?: $email, $role]
);
$userId = (int) Database::lastInsertId();
} else {
@@ -525,13 +521,14 @@ class ServicesController extends BaseController
$ragioneSociale = trim($company['ragione_sociale'] ?? '');
$partitaIva = preg_replace('/[^0-9]/', '', $company['partita_iva'] ?? '');
$adminEmail = trim($admin['email'] ?? '');
$adminFirst = trim($admin['first_name'] ?? '');
$adminLast = trim($admin['last_name'] ?? '');
// Supporta sia full_name che first_name+last_name
$adminFullName = trim($admin['full_name']
?? trim(($admin['first_name'] ?? '') . ' ' . ($admin['last_name'] ?? '')));
if (!$ragioneSociale) $this->jsonError('company.ragione_sociale obbligatorio', 400, 'MISSING_FIELD');
if (strlen($partitaIva) !== 11) $this->jsonError('company.partita_iva non valida (11 cifre)', 400, 'INVALID_VAT');
if (!filter_var($adminEmail, FILTER_VALIDATE_EMAIL)) $this->jsonError('admin.email non valida', 400, 'INVALID_EMAIL');
if (!$adminFirst || !$adminLast) $this->jsonError('admin.first_name e last_name obbligatori', 400, 'MISSING_FIELD');
if (!$adminFullName) $this->jsonError('admin.full_name obbligatorio', 400, 'MISSING_FIELD');
$db = Database::getInstance();
@@ -603,10 +600,10 @@ class ServicesController extends BaseController
$userId = (int) $existingUser['id'];
} else {
Database::query(
'INSERT INTO users (email, password_hash, first_name, last_name, role, status,
'INSERT INTO users (email, password_hash, full_name, role, is_active,
phone, job_title, must_change_password)
VALUES (?,?,?,?,\'super_admin\',\'active\',?,?,1)',
[$adminEmail, $passwordHash, $adminFirst, $adminLast,
VALUES (?,?,?,\'org_admin\',1,?,?,1)',
[$adminEmail, $passwordHash, $adminFullName,
$admin['phone'] ?? null, $admin['title'] ?? null]
);
$userId = (int) Database::lastInsertId();