]> BookStack Code Mirror - bookstack/blobdiff - app/Activity/Controllers/CommentApiController.php
Merge pull request #5917 from BookStackApp/copy_references
[bookstack] / app / Activity / Controllers / CommentApiController.php
index 7ba9b5b645d86e57e54fe7fa222fc3d195eb1998..6c60de9da5220db87abb1789267b487196012548 100644 (file)
@@ -18,14 +18,12 @@ use Illuminate\Http\Response;
  * scoped to the page which the comment is on. The 'parent_id' is used for replies
  * and refers to the 'local_id' of the parent comment on the same page, not the main
  * globally unique 'id'.
+ *
+ * If you want to get all comments for a page in a tree-like structure, as reflected in
+ * the UI, then that is provided on pages-read API responses.
  */
 class CommentApiController extends ApiController
 {
-    // TODO - Add tree-style comment listing to page-show responses.
-
-    // TODO - Test visibility controls
-    // TODO - Test permissions of each action
-
     protected array $rules = [
         'create' => [
             'page_id' => ['required', 'integer'],
@@ -34,7 +32,7 @@ class CommentApiController extends ApiController
             'content_ref' => ['string'],
         ],
         'update' => [
-            'html' => ['required', 'string'],
+            'html' => ['string'],
             'archived' => ['boolean'],
         ]
     ];
@@ -85,6 +83,7 @@ class CommentApiController extends ApiController
     public function read(string $id): JsonResponse
     {
         $comment = $this->commentRepo->getVisibleById(intval($id));
+        $comment->load('createdBy', 'updatedBy');
 
         $replies = $this->commentRepo->getQueryForVisible()
             ->where('parent_id', '=', $comment->local_id)
@@ -117,17 +116,19 @@ class CommentApiController extends ApiController
         $this->checkOwnablePermission(Permission::CommentUpdate, $comment);
 
         $input = $this->validate($request, $this->rules()['update']);
+        $hasHtml = isset($input['html']);
 
         if (isset($input['archived'])) {
-            $archived = $input['archived'];
-            if ($archived) {
-                $this->commentRepo->archive($comment, false);
+            if ($input['archived']) {
+                $this->commentRepo->archive($comment, !$hasHtml);
             } else {
-                $this->commentRepo->unarchive($comment, false);
+                $this->commentRepo->unarchive($comment, !$hasHtml);
             }
         }
 
-        $comment = $this->commentRepo->update($comment, $input['html']);
+        if ($hasHtml) {
+            $comment = $this->commentRepo->update($comment, $input['html']);
+        }
 
         return response()->json($comment);
     }