summaryrefslogtreecommitdiff
path: root/src/application/actions/viewtopic/get.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/application/actions/viewtopic/get.php')
-rw-r--r--src/application/actions/viewtopic/get.php76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/application/actions/viewtopic/get.php b/src/application/actions/viewtopic/get.php
new file mode 100644
index 0000000..45dc824
--- /dev/null
+++ b/src/application/actions/viewtopic/get.php
@@ -0,0 +1,76 @@
+<?php
+
+/** @var Post[] $posts */
+
+use mystic\forum\orm\Attachment;
+use mystic\forum\orm\Post;
+use mystic\forum\orm\TopicLogMessage;
+use mystic\forum\orm\User;
+use mystic\forum\utils\RequestUtils;
+
+$posts = $db->fetchCustom(Post::class, 'WHERE topic_id = $1 ORDER BY post_date', [ $topicId ]);
+/** @var TopicLogMessage[] $logMessages */
+$logMessages = $db->fetchCustom(TopicLogMessage::class, 'WHERE topic_id = $1 ORDER BY post_date', [ $topicId ]);
+$userCache = [];
+
+$topicAuthor = null;
+if ($topic->createdBy !== null) {
+ $topicAuthor = new User();
+ $topicAuthor->id = $topic->createdBy;
+ if (!$db->fetch($topicAuthor)) {
+ $topicAuthor = null;
+ }
+}
+
+$allItems = [...$posts, ...$logMessages];
+usort($allItems, fn(Post|TopicLogMessage $a, Post|TopicLogMessage $b): int => $a->postDate <=> $b->postDate);
+
+_view("template_start", ["_title" => $topic->title]);
+_view("template_navigation_start");
+_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]);
+_view("template_navigation_end");
+_view("view_topic_start", ["topic" => $topic, "topicAuthor" => $topicAuthor]);
+
+foreach ($allItems as $item) {
+ /** @var ?User $postAuthor */
+ $postAuthor = null;
+ if ($item->authorId !== null && !isset($userCache[$item->authorId])) {
+ $usr = new User();
+ $usr->id = $item->authorId;
+ if ($db->fetch($usr))
+ $userCache[$item->authorId] = &$usr;
+ }
+ if (isset($userCache[$item->authorId]))
+ $postAuthor = &$userCache[$item->authorId];
+
+ if ($item instanceof Post) {
+ $attachments = $db->fetchCustom(Attachment::class, 'WHERE post_id = $1', [ $item->id ]);
+
+ _view("view_post", [
+ "post" => $item,
+ "postAuthor" => $postAuthor,
+ "topicAuthor" => $topicAuthor,
+ "attachments" => $attachments,
+ "topic" => $topic,
+ ]);
+ } else {
+ _view("view_topiclog", [
+ "logMessage" => $item,
+ "postAuthor" => $postAuthor,
+ "topicAuthor" => $topicAuthor,
+ "topic" => $topic,
+ ]);
+ }
+}
+
+_view("view_topic_end");
+
+if ($topic->isLocked) {
+ _view("view_topic_locked");
+} elseif ($currentUser) {
+ _view("form_addpost");
+} else {
+ _view("view_logintoreply");
+}
+
+_view("template_end", [...getThemeAndLangInfo()]);