v2.4.4: DatabaseEntity migration and bugfixes
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user