comments->ensureCategory($category); $hasUser = $this->context->isLoggedIn(); $info->user = $hasUser ? $this->context->getActiveUser() : null; $info->colour = $hasUser ? $this->users->getUserColour($info->user) : null; $info->perms = $hasUser ? perms_for_comments($info->user->getId()) : []; $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]; $userColour = $this->userColours[$userId]; } else { try { $userInfo = $this->users->getUser($userId, 'id'); $userColour = $this->users->getUserColour($userInfo); } catch(RuntimeException $ex) { $userInfo = null; $userColour = null; } $this->userInfos[$userId] = $userInfo; $this->userColours[$userId] = $userColour; } } else { $userInfo = null; $userColour = null; } $info = new stdClass; $info->post = $postInfo; $info->user = $userInfo; $info->colour = $userColour; $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; } }