diff options
Diffstat (limited to 'src/application')
| -rw-r--r-- | src/application/messages/de.msg | 9 | ||||
| -rw-r--r-- | src/application/mystic/forum/Database.php | 9 | ||||
| -rw-r--r-- | src/application/mystic/forum/orm/TopicLogMessage.php | 23 | ||||
| -rw-r--r-- | src/application/views/view_topiclog.php | 67 | 
4 files changed, 107 insertions, 1 deletions
| diff --git a/src/application/messages/de.msg b/src/application/messages/de.msg index d1b2389..46b48b3 100644 --- a/src/application/messages/de.msg +++ b/src/application/messages/de.msg @@ -464,3 +464,12 @@ metadata({  : "Unlock topic"  = "Thema entsperren" + +: "%user% locked this topic" += "%user% hat dieses Thema gesperrt" + +: "%user% unlocked this topic" += "%user% hat dieses Thema entsperrt" + +: "%user% changed the title of this topic from %old_title% to %new_title%" += "%user% hat den Titel dieses Themas von %old_title% zu %new_title% geƤndert" 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; +} diff --git a/src/application/views/view_topiclog.php b/src/application/views/view_topiclog.php new file mode 100644 index 0000000..be3f78d --- /dev/null +++ b/src/application/views/view_topiclog.php @@ -0,0 +1,67 @@ +<?php + +/** @var \mystic\forum\orm\TopicLogMessage $logMessage */ +/** @var ?\mystic\forum\orm\User $postAuthor */ + +use mystic\forum\orm\TopicLogMessage; + +$hide_actions ??= false; +$hide_pfp ??= false; + +$user = ""; +if ($postAuthor === null) { +    $user = __("(deleted)"); +} else { +    $user = '<a href="?_action=viewuser&user=' . htmlentities(urlencode($postAuthor->id)) . '">' . htmlentities($postAuthor->displayName) . '</a>'; +} + +?> +<div class="media" id="post-<?= htmlentities($logMessage->id) ?>"> +<div class="media-left hidden-sm hidden-xs"> +    <?php if ($postAuthor): ?> +        <?php if ($hide_actions): ?> +            <img class="media-object" alt="<?= __("Profile picture") ?>" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64"> +        <?php else: ?> +            <a href="?_action=viewuser&user=<?= htmlentities(urlencode($postAuthor->id)) ?>"> +                <img class="media-object" alt="<?= __("Profile picture") ?>" src="?_action=profilepicture&user=<?= htmlentities(urlencode($postAuthor->id)) ?>" width="64" height="64"> +            </a> +        <?php endif; ?> +    <?php else: ?> +        <div class="media-object" style="width:64px;height:64px"></div> +    <?php endif; ?> +</div> +<div class="media-body"> +    <?php if ($logMessage->type === TopicLogMessage::LOCKED): ?> +        <div class="well icon-well text-info"> +            <span class="glyphicon glyphicon-lock text-info" aria-hidden="true"></span> +            <em><?= __("%user% locked this topic", [ +                "user" => $user, +            ]) ?></em> +            <br> +            <small class="_time"><?= $logMessage->postDate->format("c") ?></small> +        </div> +    <?php elseif ($logMessage->type === TopicLogMessage::UNLOCKED): ?> +        <div class="well icon-well text-success"> +            <span class="glyphicon glyphicon-globe text-success" aria-hidden="true"></span> +            <em><?= __("%user% unlocked this topic", [ +                "user" => $user, +            ]) ?></em> +            <br> +            <small class="_time"><?= $logMessage->postDate->format("c") ?></small> +        </div> +    <?php elseif ($logMessage->type === TopicLogMessage::TITLE_CHANGED): ?> +        <div class="well icon-well text-info"> +            <span class="glyphicon glyphicon-pencil text-info" aria-hidden="true"></span> +            <em><?= __("%user% changed the title of this topic from %old_title% to %new_title%", [ +                "user" => $user, +                "old_title" => '<strong>' . htmlentities($logMessage->params["old_value"] ?? __("unknown")) . '</strong>', +                "new_title" => '<strong>' . htmlentities($logMessage->params["new_value"] ?? __("unknown")) . '</strong>', +            ]) ?></em> +            <br> +            <small class="_time"><?= $logMessage->postDate->format("c") ?></small> +        </div> +    <?php else: ?> +        <?= __("unknown") ?> +    <?php endif; ?> +</div> +</div> |