Upload via GUI (290 Dateien)
This commit is contained in:
@@ -1227,6 +1227,109 @@ function run_migrations(PDO $pdo, bool $verbose = false): array
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0044: Antworten des digitalen Assistenten (zusätzlich zur Wissensdatenbank).
|
||||
if (!isset($done['php_0044_assistant_answers'])) {
|
||||
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 assistant_answers (
|
||||
id $ai,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
keywords TEXT NULL,
|
||||
answer TEXT NOT NULL,
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
hits INT NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NULL,
|
||||
updated_at DATETIME NULL
|
||||
)$eng");
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0044_assistant_answers']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0044_assistant_answers';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0044_assistant_answers: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0044_assistant_answers - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0045: Protokoll der Fragen an den digitalen Assistenten.
|
||||
if (!isset($done['php_0045_assistant_log'])) {
|
||||
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 assistant_log (
|
||||
id $ai,
|
||||
question VARCHAR(300) NOT NULL,
|
||||
result VARCHAR(20) NOT NULL,
|
||||
source VARCHAR(10) NULL,
|
||||
matched_id INT NULL,
|
||||
matched_title VARCHAR(255) NULL,
|
||||
ticket_number VARCHAR(40) NULL,
|
||||
created_at DATETIME NOT NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE INDEX idx_assistant_log_created ON assistant_log (created_at)');
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0045_assistant_log']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0045_assistant_log';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0045_assistant_log: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0045_assistant_log - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0046: Wiedervorlage, Beobachter, Kundenerinnerung, Rückmeldung zu Antworten des Assistenten.
|
||||
if (!isset($done['php_0046_ticket_extras'])) {
|
||||
try {
|
||||
$drv = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
|
||||
$has = function (string $table, string $col) use ($pdo): bool {
|
||||
try { $pdo->query("SELECT $col FROM $table LIMIT 1"); return true; } catch (Throwable $e) { return false; }
|
||||
};
|
||||
if (!$has('tickets', 'snoozed_until')) $pdo->exec('ALTER TABLE tickets ADD COLUMN snoozed_until DATETIME NULL');
|
||||
if (!$has('tickets', 'snoozed_by')) $pdo->exec('ALTER TABLE tickets ADD COLUMN snoozed_by INT NULL');
|
||||
if (!$has('tickets', 'reminder_sent_at')) $pdo->exec('ALTER TABLE tickets ADD COLUMN reminder_sent_at DATETIME NULL');
|
||||
$eng = $drv === 'sqlite' ? '' : ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4';
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS ticket_followers (
|
||||
ticket_id INT NOT NULL,
|
||||
staff_id INT NOT NULL,
|
||||
created_at DATETIME NOT NULL,
|
||||
PRIMARY KEY (ticket_id, staff_id)
|
||||
)$eng");
|
||||
if (!$has('assistant_log', 'helpful')) $pdo->exec('ALTER TABLE assistant_log ADD COLUMN helpful TINYINT NULL');
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0046_ticket_extras']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0046_ticket_extras';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0046_ticket_extras: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0046_ticket_extras - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Migration 0047: einmalige Anmelde-Adressen für die Übergabe von der App an die Weboberfläche.
|
||||
if (!isset($done['php_0047_web_login_tokens'])) {
|
||||
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 web_login_tokens (
|
||||
id $ai,
|
||||
staff_id INT NOT NULL,
|
||||
token_hash VARCHAR(64) NOT NULL,
|
||||
path VARCHAR(255) NOT NULL,
|
||||
created_at DATETIME NOT NULL,
|
||||
expires_at DATETIME NOT NULL,
|
||||
used_at DATETIME NULL
|
||||
)$eng");
|
||||
$pdo->exec('CREATE UNIQUE INDEX idx_web_login_tokens_hash ON web_login_tokens (token_hash)');
|
||||
$pdo->prepare('INSERT INTO schema_migrations (migration) VALUES (?)')->execute(['php_0047_web_login_tokens']);
|
||||
$result['applied']++;
|
||||
if ($verbose) $result['log'][] = ' [OK] php_0047_web_login_tokens';
|
||||
} catch (Throwable $e) {
|
||||
$result['errors'][] = 'php_0047_web_login_tokens: ' . $e->getMessage();
|
||||
if ($verbose) $result['log'][] = ' [FAIL] php_0047_web_login_tokens - ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user