Upload via GUI (267 Dateien)

This commit is contained in:
2026-10-19 18:05:55 +00:00
parent 1b29349219
commit f3e53e6182
9 changed files with 308 additions and 31 deletions
+127
View File
@@ -1016,6 +1016,133 @@ function run_migrations(PDO $pdo, bool $verbose = false): array
}
}
// Migration 0033: Eigenes Ticket-Formular pro Abteilung (Felder + Texte, unabhängig vom Standardformular).
if (!isset($done['php_0033_department_forms'])) {
try {
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$colsOf = function (string $table) use ($pdo, $drv): array {
$cols = [];
foreach ($pdo->query($drv === 'sqlite' ? "PRAGMA table_info($table)" : "SHOW COLUMNS FROM $table")->fetchAll() as $col) {
$cols[] = $drv === 'sqlite' ? ($col['name'] ?? '') : ($col['Field'] ?? '');
}
return $cols;
};
if (!in_array('department_id', $colsOf('custom_fields'), true)) $pdo->exec("ALTER TABLE custom_fields ADD COLUMN department_id INT NULL");
$dc = $colsOf('departments');
if (!in_array('own_form', $dc, true)) $pdo->exec("ALTER TABLE departments ADD COLUMN own_form TINYINT(1) NOT NULL DEFAULT 0");
if (!in_array('form_config', $dc, true)) $pdo->exec("ALTER TABLE departments ADD COLUMN form_config TEXT NULL");
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0033_department_forms']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0033_department_forms';
} catch (Throwable $e) {
$result['errors'][] = 'php_0033_department_forms: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0033_department_forms - ' . $e->getMessage();
}
}
// Migration 0034: Abschnitt eines Abteilungsfeldes im Ticket-Formular (Kontaktdaten, Anliegen, eigene Abschnitte).
if (!isset($done['php_0034_field_sections'])) {
try {
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$cols = [];
foreach ($pdo->query($drv === 'sqlite' ? "PRAGMA table_info(custom_fields)" : "SHOW COLUMNS FROM custom_fields")->fetchAll() as $col) {
$cols[] = $drv === 'sqlite' ? ($col['name'] ?? '') : ($col['Field'] ?? '');
}
if (!in_array('form_section', $cols, true)) $pdo->exec("ALTER TABLE custom_fields ADD COLUMN form_section VARCHAR(100) NULL");
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0034_field_sections']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0034_field_sections';
} catch (Throwable $e) {
$result['errors'][] = 'php_0034_field_sections: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0034_field_sections - ' . $e->getMessage();
}
}
// Migration 0035: Feldtyp "Radio-Auswahl" (MySQL: ENUM erweitern; SQLite kennt keine ENUMs).
if (!isset($done['php_0035_field_type_radio'])) {
try {
if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME) === 'mysql') {
$pdo->exec("ALTER TABLE custom_fields MODIFY COLUMN field_type ENUM('text','textarea','select','checkbox','number','date','list','radio') NOT NULL DEFAULT 'text'");
}
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0035_field_type_radio']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0035_field_type_radio';
} catch (Throwable $e) {
$result['errors'][] = 'php_0035_field_type_radio: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0035_field_type_radio - ' . $e->getMessage();
}
}
// Migration 0036: Breite eines Formularfeldes (volle Breite, Hälfte, Drittel, zwei Drittel).
if (!isset($done['php_0036_field_width'])) {
try {
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$cols = [];
foreach ($pdo->query($drv === 'sqlite' ? "PRAGMA table_info(custom_fields)" : "SHOW COLUMNS FROM custom_fields")->fetchAll() as $col) {
$cols[] = $drv === 'sqlite' ? ($col['name'] ?? '') : ($col['Field'] ?? '');
}
if (!in_array('form_width', $cols, true)) $pdo->exec("ALTER TABLE custom_fields ADD COLUMN form_width VARCHAR(10) NULL");
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0036_field_width']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0036_field_width';
} catch (Throwable $e) {
$result['errors'][] = 'php_0036_field_width: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0036_field_width - ' . $e->getMessage();
}
}
// Migration 0037: Anordnung der Radio-Optionen (nebeneinander oder untereinander).
if (!isset($done['php_0037_radio_inline'])) {
try {
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$cols = [];
foreach ($pdo->query($drv === 'sqlite' ? "PRAGMA table_info(custom_fields)" : "SHOW COLUMNS FROM custom_fields")->fetchAll() as $col) {
$cols[] = $drv === 'sqlite' ? ($col['name'] ?? '') : ($col['Field'] ?? '');
}
if (!in_array('radio_inline', $cols, true)) $pdo->exec("ALTER TABLE custom_fields ADD COLUMN radio_inline TINYINT(1) NOT NULL DEFAULT 0");
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0037_radio_inline']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0037_radio_inline';
} catch (Throwable $e) {
$result['errors'][] = 'php_0037_radio_inline: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0037_radio_inline - ' . $e->getMessage();
}
}
// Migration 0038: Hinweistext (mit Links) zu einem Formularfeld, z. B. für die Zustimmung zu Nutzerbedingungen.
if (!isset($done['php_0038_field_help_text'])) {
try {
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$cols = [];
foreach ($pdo->query($drv === 'sqlite' ? "PRAGMA table_info(custom_fields)" : "SHOW COLUMNS FROM custom_fields")->fetchAll() as $col) {
$cols[] = $drv === 'sqlite' ? ($col['name'] ?? '') : ($col['Field'] ?? '');
}
if (!in_array('help_text', $cols, true)) $pdo->exec("ALTER TABLE custom_fields ADD COLUMN help_text TEXT NULL");
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0038_field_help_text']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0038_field_help_text';
} catch (Throwable $e) {
$result['errors'][] = 'php_0038_field_help_text: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0038_field_help_text - ' . $e->getMessage();
}
}
// Migration 0039: Regel-Aktion "Ticket schließen" (MySQL: ENUM erweitern; SQLite kennt keine ENUMs).
if (!isset($done['php_0039_rule_close'])) {
try {
if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME) === 'mysql') {
$pdo->exec("ALTER TABLE ticket_rule_actions MODIFY COLUMN action_type
ENUM('set_department','set_priority','set_help_topic','assign_staff','add_tag','reject','auto_reply','close') NOT NULL");
}
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0039_rule_close']);
$result['applied']++;
if ($verbose) $result['log'][] = ' [OK] php_0039_rule_close';
} catch (Throwable $e) {
$result['errors'][] = 'php_0039_rule_close: ' . $e->getMessage();
if ($verbose) $result['log'][] = ' [FAIL] php_0039_rule_close - ' . $e->getMessage();
}
}
return $result;
}