comments = $comments; $this->userInfos = $userInfos; } public function getCommentsForLayout(CommentsCategoryInfo|string $category): object { $info = new stdClass; if(is_string($category)) $category = $this->comments->ensureCategory($category); $info->user = User::getCurrent(); $info->category = $category; $info->posts = []; $root = $this->comments->getPosts($category, includeRepliesCount: true, includeVotesCount: true, includeDeleted: true); foreach($root as $postInfo) $info->posts[] = $this->decorateComment($postInfo); return $info; } public function decorateComment(CommentsPostInfo $postInfo): object { if($postInfo->hasUserId()) { $userId = $postInfo->getUserId(); if(array_key_exists($userId, $this->userInfos)) { $userInfo = $this->userInfos[$userId]; } else { try { $userInfo = User::byId($userId); } catch(UserNotFoundException $ex) { $userInfo = null; } $this->userInfos[$userId] = $userInfo; } } else $userInfo = null; $info = new stdClass; $info->post = $postInfo; $info->user = $userInfo; $info->vote = $this->comments->getPostVote($postInfo, $userInfo); $info->replies = []; $root = $this->comments->getPosts(parent: $postInfo, includeRepliesCount: true, includeVotesCount: true, includeDeleted: true); foreach($root as $childInfo) $info->replies[] = $this->decorateComment($childInfo); return $info; } }