]> BookStack Code Mirror - bookstack/commitdiff
Made fixes/updates during pre-release review
authorDan Brown <redacted>
Sun, 3 Jan 2021 22:29:58 +0000 (22:29 +0000)
committerDan Brown <redacted>
Sun, 3 Jan 2021 22:29:58 +0000 (22:29 +0000)
- Fixed page editor default focus not working as expected due to
  misnamed attribute.
- Added owned_by to relevant areas of the API including the docs.
- Made book relation on page accessible even if deleted since it could cause an issue on views, such as audit trail, when the relation is accessed when the book is deleted.

27 files changed:
app/Entities/Models/BookChild.php
app/Entities/Models/Page.php
app/Http/Controllers/Api/BookApiController.php
app/Http/Controllers/Api/BookshelfApiController.php
app/Http/Controllers/Api/ChapterApiController.php
app/Http/Controllers/Api/PageApiController.php
dev/api/responses/books-create.json
dev/api/responses/books-list.json
dev/api/responses/books-read.json
dev/api/responses/books-update.json
dev/api/responses/chapters-create.json
dev/api/responses/chapters-list.json
dev/api/responses/chapters-read.json
dev/api/responses/chapters-update.json
dev/api/responses/pages-create.json
dev/api/responses/pages-list.json
dev/api/responses/pages-read.json
dev/api/responses/pages-update.json
dev/api/responses/shelves-create.json
dev/api/responses/shelves-list.json
dev/api/responses/shelves-read.json
dev/api/responses/shelves-update.json
resources/js/components/page-editor.js
tests/Api/BooksApiTest.php
tests/Api/ChaptersApiTest.php
tests/Api/PagesApiTest.php
tests/Api/ShelvesApiTest.php

index 91f62dc403c64fdde0079b223e4574bd84199251..8b968cc8b8d8268ae755bbc79ad42bd24419031e 100644 (file)
@@ -31,11 +31,10 @@ abstract class BookChild extends Entity
 
     /**
      * Get the book this page sits in.
-     * @return BelongsTo
      */
     public function book(): BelongsTo
     {
-        return $this->belongsTo(Book::class);
+        return $this->belongsTo(Book::class)->withTrashed();
     }
 
     /**
index 52c64f0480af78fc64a30bae48c8f05b1d108407..739927aff6dad8561672a5687d504d18848079ee 100644 (file)
@@ -121,7 +121,7 @@ class Page extends BookChild
      */
     public function forJsonDisplay(): Page
     {
-        $refreshed = $this->refresh()->unsetRelations()->load(['tags', 'createdBy', 'updatedBy']);
+        $refreshed = $this->refresh()->unsetRelations()->load(['tags', 'createdBy', 'updatedBy', 'ownedBy']);
         $refreshed->setHidden(array_diff($refreshed->getHidden(), ['html', 'markdown']));
         $refreshed->html = (new PageContent($refreshed))->render();
         return $refreshed;
index 1b25b9645288e9ccc3afc80b2a631423d509c98a..1b9bddbb166321d33c7ae4c65dd931f46141365b 100644 (file)
@@ -37,7 +37,7 @@ class BookApiController extends ApiController
     {
         $books = Book::visible();
         return $this->apiListingResponse($books, [
-            'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'image_id',
+            'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'owned_by', 'image_id',
         ]);
     }
 
@@ -59,7 +59,7 @@ class BookApiController extends ApiController
      */
     public function read(string $id)
     {
-        $book = Book::visible()->with(['tags', 'cover', 'createdBy', 'updatedBy'])->findOrFail($id);
+        $book = Book::visible()->with(['tags', 'cover', 'createdBy', 'updatedBy', 'ownedBy'])->findOrFail($id);
         return response()->json($book);
     }
 
index c4851b003f6cc012d12658362e40f3d1608336f4..57461fce55c9ce71e38d058524d5ec87fbe00ac5 100644 (file)
@@ -43,7 +43,7 @@ class BookshelfApiController extends ApiController
     {
         $shelves = Bookshelf::visible();
         return $this->apiListingResponse($shelves, [
-            'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'image_id',
+            'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'owned_by', 'image_id',
         ]);
     }
 
@@ -70,7 +70,7 @@ class BookshelfApiController extends ApiController
     public function read(string $id)
     {
         $shelf = Bookshelf::visible()->with([
-            'tags', 'cover', 'createdBy', 'updatedBy',
+            'tags', 'cover', 'createdBy', 'updatedBy', 'ownedBy',
             'books' => function (BelongsToMany $query) {
                 $query->visible()->get(['id', 'name', 'slug']);
             }
index e69aecc2ddcd9df9141e30f30edd2bcd821bd590..e58c1c8e147dd6b8549ef10135fb9c1fa7c17730 100644 (file)
@@ -43,7 +43,7 @@ class ChapterApiController extends ApiController
         $chapters = Chapter::visible();
         return $this->apiListingResponse($chapters, [
             'id', 'book_id', 'name', 'slug', 'description', 'priority',
-            'created_at', 'updated_at', 'created_by', 'updated_by',
+            'created_at', 'updated_at', 'created_by', 'updated_by', 'owned_by',
         ]);
     }
 
@@ -67,7 +67,7 @@ class ChapterApiController extends ApiController
      */
     public function read(string $id)
     {
-        $chapter = Chapter::visible()->with(['tags', 'createdBy', 'updatedBy', 'pages' => function (HasMany $query) {
+        $chapter = Chapter::visible()->with(['tags', 'createdBy', 'updatedBy', 'ownedBy', 'pages' => function (HasMany $query) {
             $query->visible()->get(['id', 'name', 'slug']);
         }])->findOrFail($id);
         return response()->json($chapter);
index 0b3323ccd61bffaabcd1e3df45fcf31acaedb6ea..a6db0583380e610626cef1794e8e5d8a2e501ea1 100644 (file)
@@ -47,7 +47,8 @@ class PageApiController extends ApiController
         return $this->apiListingResponse($pages, [
             'id', 'book_id', 'chapter_id', 'name', 'slug', 'priority',
             'draft', 'template',
-            'created_at', 'updated_at', 'created_by', 'updated_by',
+            'created_at', 'updated_at',
+            'created_by', 'updated_by', 'owned_by',
         ]);
     }
 
index 0b4336ab2a2b846950c5a01367161650b94da449..124305c8cd3527fca0c3117d78005d0fd989e93a 100644 (file)
@@ -3,6 +3,7 @@
   "description": "This is a book created via the API",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "slug": "my-new-book",
   "updated_at": "2020-01-12 14:05:11",
   "created_at": "2020-01-12 14:05:11",
index 29e83b1c024279f823bb6295d3238645a7384dc6..9900b5b0445a3d157237ec95830ccf735672b00e 100644 (file)
@@ -9,6 +9,7 @@
       "updated_at": "2019-12-11 20:57:31",
       "created_by": 1,
       "updated_by": 1,
+      "owned_by": 1,
       "image_id": 3
     },
     {
@@ -20,6 +21,7 @@
       "updated_at": "2019-12-11 20:57:23",
       "created_by": 4,
       "updated_by": 3,
+      "owned_by": 3,
       "image_id": 34
     }
   ],
index 815a71c3573d139806145654a5547ef21dccd410..0b0bce4e8f91571e443063623766ee61c84efb55 100644 (file)
     "id": 1,
     "name": "Admin"
   },
+  "owned_by": {
+    "id": 1,
+    "name": "Admin"
+  },
   "tags": [
     {
       "id": 13,
index 8f20b5b9f545c92a17a52c6bc7d1f7de60ef9c12..fd93dc9aef1a3045ed874be2c9451adc7074b910 100644 (file)
@@ -7,5 +7,6 @@
   "updated_at": "2020-01-12 14:16:10",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "image_id": 452
 }
\ No newline at end of file
index 7aac2768789786f192c84b41f8c07e98dff82487..a990f278bac30e02c907e824c3a66841902b5bb2 100644 (file)
@@ -5,6 +5,7 @@
   "description": "This is a great new chapter that I've created via the API",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "slug": "my-fantastic-new-chapter",
   "updated_at": "2020-05-22 22:59:55",
   "created_at": "2020-05-22 22:59:55",
index 0c1fc5fc2a6f46992a3fd1ad7963608a5f5239b3..72ed7534df2eba47e16fa883dde9d216cb37c809 100644 (file)
@@ -10,7 +10,8 @@
       "created_at": "2019-05-05 21:49:56",
       "updated_at": "2019-09-28 11:24:23",
       "created_by": 1,
-      "updated_by": 1
+      "updated_by": 1,
+      "owned_by": 1
     },
     {
       "id": 2,
@@ -22,7 +23,8 @@
       "created_at": "2019-05-05 21:58:07",
       "updated_at": "2019-10-17 15:05:34",
       "created_by": 3,
-      "updated_by": 3
+      "updated_by": 3,
+      "owned_by": 3
     }
   ],
   "total": 40
index 0d16f4b6a30ffadc438e0c3dc9e7d0eafc6b5c98..41fed80efc1a3786ca4919c9d8d33a7937e2197a 100644 (file)
     "id": 1,
     "name": "Admin"
   },
+  "owned_by": {
+    "id": 1,
+    "name": "Admin"
+  },
   "tags": [
     {
       "name": "Category",
index a7edb15b05411a389448deb10fc2c720dd43dcb0..11dedd0ca897f6efd4ebbc207e3ed988ba418ca3 100644 (file)
@@ -9,6 +9,7 @@
   "updated_at": "2020-05-22 23:07:20",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "book": {
     "id": 1,
     "name": "BookStack User Guide",
index 1f6c970fb374717860e7957c72622e00a1b40da8..0b19fb47309d11af43a5bc8ddbb9eabeb2c49713 100644 (file)
                "id": 1,
                "name": "Admin"
        },
+       "owned_by": {
+               "id": 1,
+               "name": "Admin"
+       },
        "draft": false,
        "markdown": "",
        "revision_count": 1,
index 97393451666aebc47daa6f55b991e86b214ae56a..9c162c6b6ee1200a9477cbed1d4ce6f977477efc 100644 (file)
@@ -12,7 +12,8 @@
                        "created_at": "2019-05-05 21:49:58",
                        "updated_at": "2020-07-04 15:50:58",
                        "created_by": 1,
-                       "updated_by": 1
+                       "updated_by": 1,
+                       "owned_by": 1
                },
                {
                        "id": 2,
@@ -26,7 +27,8 @@
                        "created_at": "2019-05-05 21:53:30",
                        "updated_at": "2019-06-06 12:03:04",
                        "created_by": 1,
-                       "updated_by": 1
+                       "updated_by": 1,
+                       "owned_by": 1
                },
                {
                        "id": 3,
@@ -40,7 +42,8 @@
                        "created_at": "2019-05-05 21:53:49",
                        "updated_at": "2019-12-18 21:56:52",
                        "created_by": 1,
-                       "updated_by": 1
+                       "updated_by": 1,
+                       "owned_by": 1
                }
        ],
        "total": 322
index c8acb520a3330b03db87a515ecd64eb58e5cdd0f..93f7770ac7850650496087ff191c570c7bd3787e 100644 (file)
                "id": 1,
                "name": "Admin"
        },
+       "owned_by": {
+               "id": 1,
+               "name": "Admin"
+       },
        "draft": false,
        "markdown": "# How this is built\r\n\r\nThis page is written in markdown. BookStack stores the page data in HTML.\r\n\r\nHere's a cute picture of my cat:\r\n\r\n[![yXSrubes.jpg](http://example.com/uploads/images/gallery/2020-04/scaled-1680-/yXSrubes.jpg)](http://example.com/uploads/images/gallery/2020-04/yXSrubes.jpg)",
        "revision_count": 5,
index 23f8d221c165b38ebcd77b5812b2956537ed0115..ae5c0ea3fcb7a9a22708d03979545b33bf9bacb5 100644 (file)
                "id": 1,
                "name": "Admin"
        },
+       "owned_by": {
+               "id": 1,
+               "name": "Admin"
+       },
        "draft": false,
        "markdown": "",
        "revision_count": 5,
index 64f3c7f5394b657933ce64c1b793173f3b84dbbc..fafa4c9cd1e64f82bf4e81db8fbcf7aca256b620 100644 (file)
@@ -3,6 +3,7 @@
   "description": "This is my shelf with some books",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "slug": "my-shelf",
   "updated_at": "2020-04-10 13:24:09",
   "created_at": "2020-04-10 13:24:09",
index bccd08626176c84262f62477b4410ac802788b30..f5e9d03bb6f10ba6df1ed1677782ca788c7bc0a6 100644 (file)
@@ -9,6 +9,7 @@
       "updated_at": "2020-04-10 13:00:45",
       "created_by": 4,
       "updated_by": 1,
+      "owned_by": 1,
       "image_id": 31
     },
     {
@@ -20,6 +21,7 @@
       "updated_at": "2020-04-10 13:00:58",
       "created_by": 4,
       "updated_by": 1,
+      "owned_by": 1,
       "image_id": 28
     },
     {
@@ -31,6 +33,7 @@
       "updated_at": "2020-04-10 13:00:53",
       "created_by": 4,
       "updated_by": 1,
+      "owned_by": 4,
       "image_id": 30
     }
   ],
index b0487debe7f0a98796beab3b9b5892c4d1f0aab8..d663e82c5fe2bd074c9ee1e7c24f87869094d35f 100644 (file)
     "id": 1,
     "name": "Admin"
   },
+  "owned_by": {
+    "id": 1,
+    "name": "Admin"
+  },
   "created_at": "2020-04-10 13:24:09",
   "updated_at": "2020-04-10 13:31:04",
   "tags": [
index 4820150eb0afdc6c76a3b81bde2105a8858d7bb2..4bde44b54d5f2e2a188788d306fae0b0cdede022 100644 (file)
@@ -5,6 +5,7 @@
   "description": "This is my update shelf with some books",
   "created_by": 1,
   "updated_by": 1,
+  "owned_by": 1,
   "image_id": 501,
   "created_at": "2020-04-10 13:24:09",
   "updated_at": "2020-04-10 13:48:22"
index 266e1918251d805fe4bc6735e5b3f801212fc2a6..a0d8d38b129b3c4c8d4c8fde8eeb4f51e4a3f4a8 100644 (file)
@@ -12,7 +12,7 @@ class PageEditor {
         this.editorType = this.$opts.editorType;
         this.pageId = Number(this.$opts.pageId);
         this.isNewDraft = this.$opts.pageNewDraft === 'true';
-        this.hasDefaultTitle = this.$opts.isDefaultTitle || false;
+        this.hasDefaultTitle = this.$opts.hasDefaultTitle || false;
 
         // Elements
         this.container = this.$el;
@@ -74,6 +74,7 @@ class PageEditor {
     }
 
     setInitialFocus() {
+        console.log({'HAS': this.hasDefaultTitle});
         if (this.hasDefaultTitle) {
             return this.titleElem.select();
         }
index de4db1469acade17af9d9f1c1f9481bf4be81ff3..a36acdd0253bf961b0c3d44844cae14cd557f4ff 100644 (file)
@@ -75,7 +75,10 @@ class BooksApiTest extends TestCase
             ],
             'updated_by' => [
                 'name' => $book->createdBy->name,
-            ]
+            ],
+            'owned_by' => [
+                'name' => $book->ownedBy->name
+            ],
         ]);
     }
 
index 422631c3af9e9bb674da98333d74a94a0c63bca2..c7368eaee1835209d64df5ce90642f864bf3131b 100644 (file)
@@ -106,6 +106,9 @@ class ChaptersApiTest extends TestCase
             'updated_by' => [
                 'name' => $chapter->createdBy->name,
             ],
+            'owned_by' => [
+                'name' => $chapter->ownedBy->name
+            ],
             'pages' => [
                 [
                     'id' => $page->id,
index 44fbf5e794dc033dc4e3b4a67d5c5249a235d625..e08e9b1b742b1424f4b6dba465ea994395d80908 100644 (file)
@@ -136,6 +136,9 @@ class PagesApiTest extends TestCase
             'updated_by' => [
                 'name' => $page->createdBy->name,
             ],
+            'owned_by' => [
+                'name' => $page->ownedBy->name
+            ],
         ]);
     }
 
index 4c5600d159935e17f313f6dd2fb75080378b62cc..32715dd0a1630165af36f5f86254931bd8874ff8 100644 (file)
@@ -85,7 +85,10 @@ class ShelvesApiTest extends TestCase
             ],
             'updated_by' => [
                 'name' => $shelf->createdBy->name,
-            ]
+            ],
+            'owned_by' => [
+                'name' => $shelf->ownedBy->name
+            ],
         ]);
     }