X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/7c6fe8c4e2a5b3d26973711a915025ac3a09a924..refs/pull/767/head:/app/Repos/CommentRepo.php diff --git a/app/Repos/CommentRepo.php b/app/Repos/CommentRepo.php index ce71b9234..7f89e7f8d 100644 --- a/app/Repos/CommentRepo.php +++ b/app/Repos/CommentRepo.php @@ -1,105 +1,90 @@ comment = $comment; } - public function create (Page $page, $data = []) { - $userId = user()->id; - $comment = $this->comment->newInstance(); - $comment->fill($data); - // new comment - $comment->page_id = $page->id; - $comment->created_by = $userId; - $comment->updated_at = null; - $comment->save(); - return $comment; + /** + * Get a comment by ID. + * @param $id + * @return Comment|\Illuminate\Database\Eloquent\Model + */ + public function getById($id) + { + return $this->comment->newQuery()->findOrFail($id); } - public function update($comment, $input, $activeOnly = true) { + /** + * Create a new comment on an entity. + * @param Entity $entity + * @param array $data + * @return Comment + */ + public function create(Entity $entity, $data = []) + { $userId = user()->id; + $comment = $this->comment->newInstance($data); + $comment->created_by = $userId; $comment->updated_by = $userId; - $comment->fill($input); - - // only update active comments by default. - $whereClause = ['active' => 1]; - if (!$activeOnly) { - $whereClause = []; - } - $comment->update($whereClause); + $comment->local_id = $this->getNextLocalId($entity); + $entity->comments()->save($comment); 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(); + /** + * Update an existing comment. + * @param Comment $comment + * @param array $input + * @return mixed + */ + public function update($comment, $input) + { + $comment->updated_by = user()->id; + $comment->update($input); return $comment; } - 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 getCommentById($commentId) { - return $this->normalizeComment($this->comment->getCommentById($commentId)); + /** + * Delete a comment from the system. + * @param Comment $comment + * @return mixed + */ + public function delete($comment) + { + return $comment->delete(); } - 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(); + /** + * Get the next local ID relative to the linked entity. + * @param Entity $entity + * @return int + */ + protected function getNextLocalId(Entity $entity) + { + $comments = $entity->comments(false)->orderBy('local_id', 'desc')->first(); + if ($comments === null) { + return 1; } - return $comment; + return $comments->local_id + 1; } -} \ No newline at end of file +}