Upload via GUI (335 Dateien)
This commit is contained in:
@@ -1330,6 +1330,114 @@ function run_migrations(PDO $pdo, bool $verbose = false): array
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0048: Zufriedenheitsabfrage (CSAT), Statusseite für Kunden und Ticket-Vorlagen.
|
||||
if (!isset($done['php_0048_csat_status_templates'])) {
|
||||
try {
|
||||
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
|
||||
$ai = $drv === 'sqlite' ? 'INTEGER PRIMARY KEY AUTOINCREMENT' : 'INT AUTO_INCREMENT PRIMARY KEY';
|
||||
$eng = $drv === 'sqlite' ? '' : ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4';
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS ticket_csat (
|
||||
id $ai,
|
||||
ticket_id INT NOT NULL,
|
||||
token VARCHAR(64) NOT NULL,
|
||||
staff_id INT NULL,
|
||||
department_id INT NULL,
|
||||
rating TINYINT NULL,
|
||||
comment TEXT NULL,
|
||||
sent_at DATETIME NOT NULL,
|
||||
answered_at DATETIME NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE UNIQUE INDEX idx_ticket_csat_ticket ON ticket_csat (ticket_id)');
|
||||
$pdo->exec('CREATE UNIQUE INDEX idx_ticket_csat_token ON ticket_csat (token)');
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS status_components (
|
||||
id $ai,
|
||||
name VARCHAR(120) NOT NULL,
|
||||
description VARCHAR(255) NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'operational',
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NOT NULL
|
||||
)$eng");
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS status_incidents (
|
||||
id $ai,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
body TEXT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'investigating',
|
||||
impact VARCHAR(20) NOT NULL DEFAULT 'minor',
|
||||
component_id INT NULL,
|
||||
created_by INT NULL,
|
||||
created_at DATETIME NOT NULL,
|
||||
updated_at DATETIME NOT NULL,
|
||||
resolved_at DATETIME NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE INDEX idx_status_incidents_created ON status_incidents (created_at)');
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS status_incident_updates (
|
||||
id $ai,
|
||||
incident_id INT NOT NULL,
|
||||
status VARCHAR(20) NOT NULL,
|
||||
body TEXT NULL,
|
||||
created_by INT NULL,
|
||||
created_at DATETIME NOT NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE INDEX idx_status_incident_updates_incident ON status_incident_updates (incident_id)');
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS ticket_templates (
|
||||
id $ai,
|
||||
name VARCHAR(120) NOT NULL,
|
||||
description VARCHAR(255) NULL,
|
||||
subject VARCHAR(200) NOT NULL DEFAULT '',
|
||||
body TEXT NULL,
|
||||
department_id INT NULL,
|
||||
help_topic_id INT NULL,
|
||||
priority_id INT NULL,
|
||||
is_public TINYINT NOT NULL DEFAULT 1,
|
||||
is_active TINYINT NOT NULL DEFAULT 1,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NOT NULL
|
||||
)$eng");
|
||||
$defaults = ['csat_enabled' => '0', 'csat_delay_minutes' => '30', 'status_page_enabled' => '0', 'status_page_title' => 'Systemstatus'];
|
||||
$chk = $pdo->prepare('SELECT COUNT(*) FROM settings WHERE setting_key = ?');
|
||||
$ins = $pdo->prepare('INSERT INTO settings (setting_key, setting_value) VALUES (?,?)');
|
||||
foreach ($defaults as $k => $v) {
|
||||
$chk->execute([$k]);
|
||||
if ((int) $chk->fetchColumn() === 0) $ins->execute([$k, $v]);
|
||||
}
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0048_csat_status_templates']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0048_csat_status_templates';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0048_csat_status_templates: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0048_csat_status_templates - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0049: gesammelte, noch nicht übersetzte Texte (Sammelmodus der Mehrsprachigkeit).
|
||||
if (!isset($done['php_0049_i18n_missing'])) {
|
||||
try {
|
||||
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
|
||||
$ai = $drv === 'sqlite' ? 'INTEGER PRIMARY KEY AUTOINCREMENT' : 'INT AUTO_INCREMENT PRIMARY KEY';
|
||||
$eng = $drv === 'sqlite' ? '' : ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4';
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS i18n_missing (
|
||||
id $ai,
|
||||
text_hash CHAR(32) NOT NULL,
|
||||
text VARCHAR(400) NOT NULL,
|
||||
hits INT NOT NULL DEFAULT 1,
|
||||
last_seen DATETIME NOT NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE UNIQUE INDEX idx_i18n_missing_hash ON i18n_missing (text_hash)');
|
||||
$chk = $pdo->prepare('SELECT COUNT(*) FROM settings WHERE setting_key = ?');
|
||||
$ins = $pdo->prepare('INSERT INTO settings (setting_key, setting_value) VALUES (?,?)');
|
||||
foreach (['default_language' => 'de', 'i18n_collect' => '0'] as $k => $v) {
|
||||
$chk->execute([$k]);
|
||||
if ((int) $chk->fetchColumn() === 0) $ins->execute([$k, $v]);
|
||||
}
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0049_i18n_missing']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0049_i18n_missing';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0049_i18n_missing: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0049_i18n_missing - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user