comments->ensureCategory($category); $hasUser = $this->authInfo->isLoggedIn(); $info->user = $hasUser ? $this->authInfo->getUserInfo() : null; $info->colour = $this->usersCtx->getUserColour($info->user); $info->perms = $this->authInfo->getPerms('global')->checkMany([ 'can_post' => Perm::G_COMMENTS_CREATE, 'can_delete' => Perm::G_COMMENTS_DELETE_OWN | Perm::G_COMMENTS_DELETE_ANY, 'can_delete_any' => Perm::G_COMMENTS_DELETE_ANY, 'can_pin' => Perm::G_COMMENTS_PIN, 'can_lock' => Perm::G_COMMENTS_LOCK, 'can_vote' => Perm::G_COMMENTS_VOTE, ]); $info->category = $category; $info->posts = []; $root = $this->comments->getPosts($category, includeRepliesCount: true, includeVotesCount: true, replies: false); foreach($root as $postInfo) $info->posts[] = $this->decorateComment($postInfo); return $info; } public function decorateComment(CommentsPostInfo $postInfo): object { $userInfo = $postInfo->hasUserId() ? $this->usersCtx->getUserInfo($postInfo->getUserId()) : null; $info = new stdClass; $info->post = $postInfo; $info->user = $userInfo; $info->colour = $this->usersCtx->getUserColour($userInfo); $info->vote = $this->comments->getPostVote($postInfo, $userInfo); $info->replies = []; $root = $this->comments->getPosts(parentInfo: $postInfo, includeRepliesCount: true, includeVotesCount: true); foreach($root as $childInfo) $info->replies[] = $this->decorateComment($childInfo); return $info; } }