X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/03e5d61798e6b8df3b4d74b5f3bb1a96fe8199bb..refs/pull/261/head:/app/Repos/CommentRepo.php diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index 10b36eb16..ce71b9234 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -26,25 +26,80 @@ class CommentRepo { // new comment $comment->page_id = $page->id; $comment->created_by = $userId; + $comment->updated_at = null; $comment->save(); return $comment; } - public function update($comment, $input) { + public function update($comment, $input, $activeOnly = true) { $userId = user()->id; $comment->updated_by = $userId; $comment->fill($input); + + // only update active comments by default. + $whereClause = ['active' => 1]; + if (!$activeOnly) { + $whereClause = []; + } + $comment->update($whereClause); + return $comment; + } + + public function delete($comment) { + $comment->text = trans('entities.comment_deleted'); + $comment->html = trans('entities.comment_deleted'); + $comment->active = false; + $userId = user()->id; + $comment->updated_by = $userId; $comment->save(); return $comment; } - public function getCommentsForPage($pageId, $commentId, $count = 20) { - // requesting parent comments - $query = $this->comment->getCommentsByPage($pageId, $commentId); - return $query->paginate($count); + public function getPageComments($pageId) { + $comments = $this->comment->getAllPageComments($pageId); + $index = []; + $totalComments = count($comments); + $finalCommentList = []; + + // normalizing the response. + for ($i = 0; $i < count($comments); ++$i) { + $comment = $this->normalizeComment($comments[$i]); + $parentId = $comment->parent_id; + if (empty($parentId)) { + $finalCommentList[] = $comment; + $index[$comment->id] = $comment; + continue; + } + + if (empty($index[$parentId])) { + // weird condition should not happen. + continue; + } + if (empty($index[$parentId]->sub_comments)) { + $index[$parentId]->sub_comments = []; + } + array_push($index[$parentId]->sub_comments, $comment); + $index[$comment->id] = $comment; + } + return [ + 'comments' => $finalCommentList, + 'total' => $totalComments + ]; } - public function getCommentCount($pageId) { - return $this->comment->where('page_id', '=', $pageId)->count(); + public function getCommentById($commentId) { + return $this->normalizeComment($this->comment->getCommentById($commentId)); + } + + private function normalizeComment($comment) { + if (empty($comment)) { + return; + } + $comment->createdBy->avatar_url = $comment->createdBy->getAvatar(50); + $comment->createdBy->profile_url = $comment->createdBy->getProfileUrl(); + if (!empty($comment->updatedBy)) { + $comment->updatedBy->profile_url = $comment->updatedBy->getProfileUrl(); + } + return $comment; } } \ No newline at end of file