diff options
Diffstat (limited to 'src/application/actions/viewtopic/get.php')
| -rw-r--r-- | src/application/actions/viewtopic/get.php | 76 | 
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()]); |