query('SELECT DATABASE()')->fetchColumn(); function col_exists(PDO $p,string $db,string $t,string $c):bool{ $s=$p->prepare("SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=? AND TABLE_NAME=? AND COLUMN_NAME=?"); $s->execute([$db,$t,$c]); return (bool)$s->fetchColumn(); } function add_col(PDO $p,string $db,string $t,string $c,string $ddl):void{ if(col_exists($p,$db,$t,$c)){ echo " = $t.$c\n"; return; } $p->exec("ALTER TABLE `$t` ADD COLUMN $ddl"); echo " + $t.$c\n"; } echo "Migrazione 060 — ciclo di vita documenti ISMS (db=$db)\n"; /* 1) Estensione enum stato (idempotente: MODIFY) */ $pdo->exec("ALTER TABLE isms_documents MODIFY COLUMN status ENUM('draft','review','approved','published','archived') NOT NULL DEFAULT 'draft'"); echo " enum status -> draft/review/approved/published/archived\n"; /* 2) Colonne di tracciamento del ciclo di vita */ add_col($pdo,$db,'isms_documents','reviewed_by', "reviewed_by INT NULL"); add_col($pdo,$db,'isms_documents','reviewed_at', "reviewed_at DATETIME NULL"); add_col($pdo,$db,'isms_documents','approved_by', "approved_by INT NULL"); add_col($pdo,$db,'isms_documents','approved_at', "approved_at DATETIME NULL"); add_col($pdo,$db,'isms_documents','published_by', "published_by INT NULL"); add_col($pdo,$db,'isms_documents','published_at', "published_at DATETIME NULL"); add_col($pdo,$db,'isms_documents','archived_at', "archived_at DATETIME NULL"); add_col($pdo,$db,'isms_documents','review_note', "review_note VARCHAR(500) NULL"); add_col($pdo,$db,'isms_documents','effective_date',"effective_date DATE NULL"); add_col($pdo,$db,'isms_documents','next_review_date',"next_review_date DATE NULL"); /* 3) Tabella storico versioni (snapshot ad ogni approvazione/pubblicazione) */ $pdo->exec("CREATE TABLE IF NOT EXISTS isms_document_versions ( id INT AUTO_INCREMENT PRIMARY KEY, document_id INT NOT NULL, isms_model_id INT NOT NULL, organization_id INT NOT NULL, version VARCHAR(20) NOT NULL, status VARCHAR(20) NOT NULL, body_html LONGTEXT NULL, change_note VARCHAR(255) NULL, created_by INT NULL, created_at DATETIME NULL, INDEX idx_docver_doc (document_id), INDEX idx_docver_org (organization_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); echo " tabella isms_document_versions OK\n"; echo "FATTO. Prossima mig=061.\n";