v2.4.4: DatabaseEntity migration and bugfixes

This commit is contained in:
2024-05-21 12:32:44 +02:00
parent b96d0d053c
commit 037f0fae91
14 changed files with 249 additions and 47 deletions

View File

@@ -125,10 +125,14 @@ class Context {
public function parseCookies(): void {
if ($this->sql) {
if (isset($_COOKIE['session']) && is_string($_COOKIE['session']) && !empty($_COOKIE['session'])) {
$this->loadSession($_COOKIE['session']);
}
$settings = $this->getSettings();
if (!$settings->isInstalled()) {
// we cannot process user sessions or localization yet.
return;
}
if (isset($_COOKIE['session']) && is_string($_COOKIE['session']) && !empty($_COOKIE['session'])) {
$this->loadSession($_COOKIE['session']);
}
// set language by priority: 1. GET parameter, 2. cookie, 3. user's settings, 4. accept-language header

View File

@@ -713,13 +713,13 @@ class DatabaseEntityHandler implements Persistable {
return $res;
}
public function getCreateQueries(SQL $sql): array {
public function getCreateQueries(SQL $sql, bool $canExist = false): array {
$queries = [];
$table = $this->getTableName();
// Create Table
$queries[] = $this->getTableQuery($sql);
$queries[] = $this->getTableQuery($sql, $canExist);
// pre defined values
$getPredefinedValues = $this->entityClass->getMethod("getPredefinedValues");
@@ -733,43 +733,64 @@ class DatabaseEntityHandler implements Persistable {
$entityLogConfig = $entityLogConfig->getValue();
if (isset($entityLogConfig["insert"]) && $entityLogConfig["insert"] === true) {
$queries[] = $sql->createTrigger("${table}_trg_insert")
$trigger = $sql->createTrigger("${table}_trg_insert")
->after()->insert($table)
->exec(new CreateProcedure($sql, "InsertEntityLog"), [
"tableName" => new CurrentTable(),
"entityId" => new CurrentColumn("id"),
"lifetime" => $entityLogConfig["lifetime"] ?? 90,
]);
if ($canExist) {
$trigger->onlyIfNotExist();
}
$queries[] = $trigger;
}
if (isset($entityLogConfig["update"]) && $entityLogConfig["update"] === true) {
$queries[] = $sql->createTrigger("${table}_trg_update")
$trigger = $sql->createTrigger("${table}_trg_update")
->after()->update($table)
->exec(new CreateProcedure($sql, "UpdateEntityLog"), [
"tableName" => new CurrentTable(),
"entityId" => new CurrentColumn("id"),
]);
if ($canExist) {
$trigger->onlyIfNotExist();
}
$queries[] = $trigger;
}
if (isset($entityLogConfig["delete"]) && $entityLogConfig["delete"] === true) {
$queries[] = $sql->createTrigger("${table}_trg_delete")
$trigger = $sql->createTrigger("${table}_trg_delete")
->after()->delete($table)
->exec(new CreateProcedure($sql, "DeleteEntityLog"), [
"tableName" => new CurrentTable(),
"entityId" => new CurrentColumn("id"),
]);
if ($canExist) {
$trigger->onlyIfNotExist();
}
$queries[] = $trigger;
}
return $queries;
}
public function getTableQuery(SQL $sql): CreateTable {
public function getTableQuery(SQL $sql, bool $canExist = false): CreateTable {
$query = $sql->createTable($this->tableName)
->onlyIfNotExists()
->addSerial("id")
->primaryKey("id");
if ($canExist) {
$query->onlyIfNotExists();
}
foreach ($this->columns as $column) {
$query->addColumn($column);
}