]> BookStack Code Mirror - bookstack/blobdiff - app/Repos/CommentRepo.php
Finished migration of last angular code
[bookstack] / app / Repos / CommentRepo.php
index ce71b923498ac0ed376ac25ab154f42852ddfb2b..d8c57bdb32a5b10793b1c7d8bbaab09dbe1a7b47 100644 (file)
 <?php namespace BookStack\Repos;
 
 use BookStack\Comment;
-use BookStack\Page;
+use BookStack\Entity;
 
 /**
- * Class TagRepo
+ * Class CommentRepo
  * @package BookStack\Repos
  */
 class CommentRepo {
+
     /**
-     *
      * @var Comment $comment
      */
     protected $comment;
 
+    /**
+     * CommentRepo constructor.
+     * @param Comment $comment
+     */
     public function __construct(Comment $comment)
     {
         $this->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();
-        }
-        return $comment;
+    /**
+     * 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 $comments->local_id + 1;
     }
 }
\ No newline at end of file