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()]);