summaryrefslogtreecommitdiff
path: root/src/application/mystic
diff options
context:
space:
mode:
Diffstat (limited to 'src/application/mystic')
-rw-r--r--src/application/mystic/forum/Database.php9
-rw-r--r--src/application/mystic/forum/orm/TopicLogMessage.php23
2 files changed, 31 insertions, 1 deletions
diff --git a/src/application/mystic/forum/Database.php b/src/application/mystic/forum/Database.php
index 8ebc36b..7a417be 100644
--- a/src/application/mystic/forum/Database.php
+++ b/src/application/mystic/forum/Database.php
@@ -142,6 +142,7 @@ class Database {
return "text";
case "object":
case "array":
+ return "jsonb";
case "iterable":
case "callable":
case "mixed":
@@ -241,8 +242,10 @@ class Database {
return strval($value);
elseif (is_a($value, \DateTimeInterface::class))
return $value->format("c");
+ elseif (is_array($value) || is_object($value))
+ return json_encode($value, JSON_UNESCAPED_SLASHES);
else
- throw new \RuntimeException("Don't know how to stringify " . is_object($value) ? get_class($value) : gettype($value));
+ throw new \RuntimeException("Don't know how to stringify " . ((is_object($value) && !is_array($value)) ? get_class($value) : gettype($value)));
}
private static function assignValue(Entity &$entity, array $colProps, ?string $value): void {
@@ -285,7 +288,11 @@ class Database {
}
break;
case "object":
+ $typedValue = json_decode($value);
+ break;
case "array":
+ $typedValue = json_decode($value, true);
+ break;
case "iterable":
case "callable":
case "mixed":
diff --git a/src/application/mystic/forum/orm/TopicLogMessage.php b/src/application/mystic/forum/orm/TopicLogMessage.php
new file mode 100644
index 0000000..1caa3c5
--- /dev/null
+++ b/src/application/mystic/forum/orm/TopicLogMessage.php
@@ -0,0 +1,23 @@
+<?php
+declare(strict_types=1);
+
+namespace mystic\forum\orm;
+
+use mystic\forum\attributes\DefaultValue;
+use mystic\forum\attributes\PrimaryKey;
+use mystic\forum\attributes\References;
+use mystic\forum\attributes\Table;
+
+#[Table("public.topic_log")]
+class TopicLogMessage extends Entity {
+ public const TITLE_CHANGED = 200;
+ public const LOCKED = 201;
+ public const UNLOCKED = 202;
+
+ #[PrimaryKey] public string $id;
+ #[References("public.topics", onDelete: References::CASCADE)] public string $topicId;
+ public int $type;
+ public \DateTimeImmutable $postDate;
+ public array $params;
+ #[References("public.users", onDelete: References::SET_NULL)] public ?string $authorId;
+}