From 14ea6c9de341a5474210bc8dba862a23c5de7bf0 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 3 Jan 2021 22:29:58 +0000 Subject: [PATCH] Made fixes/updates during pre-release review - 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. --- app/Entities/Models/BookChild.php | 3 +-- app/Entities/Models/Page.php | 2 +- app/Http/Controllers/Api/BookApiController.php | 4 ++-- app/Http/Controllers/Api/BookshelfApiController.php | 4 ++-- app/Http/Controllers/Api/ChapterApiController.php | 4 ++-- app/Http/Controllers/Api/PageApiController.php | 3 ++- dev/api/responses/books-create.json | 1 + dev/api/responses/books-list.json | 2 ++ dev/api/responses/books-read.json | 4 ++++ dev/api/responses/books-update.json | 1 + dev/api/responses/chapters-create.json | 1 + dev/api/responses/chapters-list.json | 6 ++++-- dev/api/responses/chapters-read.json | 4 ++++ dev/api/responses/chapters-update.json | 1 + dev/api/responses/pages-create.json | 4 ++++ dev/api/responses/pages-list.json | 9 ++++++--- dev/api/responses/pages-read.json | 4 ++++ dev/api/responses/pages-update.json | 4 ++++ dev/api/responses/shelves-create.json | 1 + dev/api/responses/shelves-list.json | 3 +++ dev/api/responses/shelves-read.json | 4 ++++ dev/api/responses/shelves-update.json | 1 + resources/js/components/page-editor.js | 3 ++- tests/Api/BooksApiTest.php | 5 ++++- tests/Api/ChaptersApiTest.php | 3 +++ tests/Api/PagesApiTest.php | 3 +++ tests/Api/ShelvesApiTest.php | 5 ++++- 27 files changed, 71 insertions(+), 18 deletions(-) diff --git a/app/Entities/Models/BookChild.php b/app/Entities/Models/BookChild.php index 91f62dc40..8b968cc8b 100644 --- a/app/Entities/Models/BookChild.php +++ b/app/Entities/Models/BookChild.php @@ -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(); } /** diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php index 52c64f048..739927aff 100644 --- a/app/Entities/Models/Page.php +++ b/app/Entities/Models/Page.php @@ -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; diff --git a/app/Http/Controllers/Api/BookApiController.php b/app/Http/Controllers/Api/BookApiController.php index 1b25b9645..1b9bddbb1 100644 --- a/app/Http/Controllers/Api/BookApiController.php +++ b/app/Http/Controllers/Api/BookApiController.php @@ -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); } diff --git a/app/Http/Controllers/Api/BookshelfApiController.php b/app/Http/Controllers/Api/BookshelfApiController.php index c4851b003..57461fce5 100644 --- a/app/Http/Controllers/Api/BookshelfApiController.php +++ b/app/Http/Controllers/Api/BookshelfApiController.php @@ -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']); } diff --git a/app/Http/Controllers/Api/ChapterApiController.php b/app/Http/Controllers/Api/ChapterApiController.php index e69aecc2d..e58c1c8e1 100644 --- a/app/Http/Controllers/Api/ChapterApiController.php +++ b/app/Http/Controllers/Api/ChapterApiController.php @@ -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); diff --git a/app/Http/Controllers/Api/PageApiController.php b/app/Http/Controllers/Api/PageApiController.php index 0b3323ccd..a6db05833 100644 --- a/app/Http/Controllers/Api/PageApiController.php +++ b/app/Http/Controllers/Api/PageApiController.php @@ -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', ]); } diff --git a/dev/api/responses/books-create.json b/dev/api/responses/books-create.json index 0b4336ab2..124305c8c 100644 --- a/dev/api/responses/books-create.json +++ b/dev/api/responses/books-create.json @@ -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", diff --git a/dev/api/responses/books-list.json b/dev/api/responses/books-list.json index 29e83b1c0..9900b5b04 100644 --- a/dev/api/responses/books-list.json +++ b/dev/api/responses/books-list.json @@ -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 } ], diff --git a/dev/api/responses/books-read.json b/dev/api/responses/books-read.json index 815a71c35..0b0bce4e8 100644 --- a/dev/api/responses/books-read.json +++ b/dev/api/responses/books-read.json @@ -13,6 +13,10 @@ "id": 1, "name": "Admin" }, + "owned_by": { + "id": 1, + "name": "Admin" + }, "tags": [ { "id": 13, diff --git a/dev/api/responses/books-update.json b/dev/api/responses/books-update.json index 8f20b5b9f..fd93dc9ae 100644 --- a/dev/api/responses/books-update.json +++ b/dev/api/responses/books-update.json @@ -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 diff --git a/dev/api/responses/chapters-create.json b/dev/api/responses/chapters-create.json index 7aac27687..a990f278b 100644 --- a/dev/api/responses/chapters-create.json +++ b/dev/api/responses/chapters-create.json @@ -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", diff --git a/dev/api/responses/chapters-list.json b/dev/api/responses/chapters-list.json index 0c1fc5fc2..72ed7534d 100644 --- a/dev/api/responses/chapters-list.json +++ b/dev/api/responses/chapters-list.json @@ -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 diff --git a/dev/api/responses/chapters-read.json b/dev/api/responses/chapters-read.json index 0d16f4b6a..41fed80ef 100644 --- a/dev/api/responses/chapters-read.json +++ b/dev/api/responses/chapters-read.json @@ -15,6 +15,10 @@ "id": 1, "name": "Admin" }, + "owned_by": { + "id": 1, + "name": "Admin" + }, "tags": [ { "name": "Category", diff --git a/dev/api/responses/chapters-update.json b/dev/api/responses/chapters-update.json index a7edb15b0..11dedd0ca 100644 --- a/dev/api/responses/chapters-update.json +++ b/dev/api/responses/chapters-update.json @@ -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", diff --git a/dev/api/responses/pages-create.json b/dev/api/responses/pages-create.json index 1f6c970fb..0b19fb473 100644 --- a/dev/api/responses/pages-create.json +++ b/dev/api/responses/pages-create.json @@ -16,6 +16,10 @@ "id": 1, "name": "Admin" }, + "owned_by": { + "id": 1, + "name": "Admin" + }, "draft": false, "markdown": "", "revision_count": 1, diff --git a/dev/api/responses/pages-list.json b/dev/api/responses/pages-list.json index 973934516..9c162c6b6 100644 --- a/dev/api/responses/pages-list.json +++ b/dev/api/responses/pages-list.json @@ -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 diff --git a/dev/api/responses/pages-read.json b/dev/api/responses/pages-read.json index c8acb520a..93f7770ac 100644 --- a/dev/api/responses/pages-read.json +++ b/dev/api/responses/pages-read.json @@ -16,6 +16,10 @@ "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[](http://example.com/uploads/images/gallery/2020-04/yXSrubes.jpg)", "revision_count": 5, diff --git a/dev/api/responses/pages-update.json b/dev/api/responses/pages-update.json index 23f8d221c..ae5c0ea3f 100644 --- a/dev/api/responses/pages-update.json +++ b/dev/api/responses/pages-update.json @@ -16,6 +16,10 @@ "id": 1, "name": "Admin" }, + "owned_by": { + "id": 1, + "name": "Admin" + }, "draft": false, "markdown": "", "revision_count": 5, diff --git a/dev/api/responses/shelves-create.json b/dev/api/responses/shelves-create.json index 64f3c7f53..fafa4c9cd 100644 --- a/dev/api/responses/shelves-create.json +++ b/dev/api/responses/shelves-create.json @@ -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", diff --git a/dev/api/responses/shelves-list.json b/dev/api/responses/shelves-list.json index bccd08626..f5e9d03bb 100644 --- a/dev/api/responses/shelves-list.json +++ b/dev/api/responses/shelves-list.json @@ -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 } ], diff --git a/dev/api/responses/shelves-read.json b/dev/api/responses/shelves-read.json index b0487debe..d663e82c5 100644 --- a/dev/api/responses/shelves-read.json +++ b/dev/api/responses/shelves-read.json @@ -11,6 +11,10 @@ "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": [ diff --git a/dev/api/responses/shelves-update.json b/dev/api/responses/shelves-update.json index 4820150eb..4bde44b54 100644 --- a/dev/api/responses/shelves-update.json +++ b/dev/api/responses/shelves-update.json @@ -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" diff --git a/resources/js/components/page-editor.js b/resources/js/components/page-editor.js index 266e19182..a0d8d38b1 100644 --- a/resources/js/components/page-editor.js +++ b/resources/js/components/page-editor.js @@ -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(); } diff --git a/tests/Api/BooksApiTest.php b/tests/Api/BooksApiTest.php index de4db1469..a36acdd02 100644 --- a/tests/Api/BooksApiTest.php +++ b/tests/Api/BooksApiTest.php @@ -75,7 +75,10 @@ class BooksApiTest extends TestCase ], 'updated_by' => [ 'name' => $book->createdBy->name, - ] + ], + 'owned_by' => [ + 'name' => $book->ownedBy->name + ], ]); } diff --git a/tests/Api/ChaptersApiTest.php b/tests/Api/ChaptersApiTest.php index 422631c3a..c7368eaee 100644 --- a/tests/Api/ChaptersApiTest.php +++ b/tests/Api/ChaptersApiTest.php @@ -106,6 +106,9 @@ class ChaptersApiTest extends TestCase 'updated_by' => [ 'name' => $chapter->createdBy->name, ], + 'owned_by' => [ + 'name' => $chapter->ownedBy->name + ], 'pages' => [ [ 'id' => $page->id, diff --git a/tests/Api/PagesApiTest.php b/tests/Api/PagesApiTest.php index 44fbf5e79..e08e9b1b7 100644 --- a/tests/Api/PagesApiTest.php +++ b/tests/Api/PagesApiTest.php @@ -136,6 +136,9 @@ class PagesApiTest extends TestCase 'updated_by' => [ 'name' => $page->createdBy->name, ], + 'owned_by' => [ + 'name' => $page->ownedBy->name + ], ]); } diff --git a/tests/Api/ShelvesApiTest.php b/tests/Api/ShelvesApiTest.php index 4c5600d15..32715dd0a 100644 --- a/tests/Api/ShelvesApiTest.php +++ b/tests/Api/ShelvesApiTest.php @@ -85,7 +85,10 @@ class ShelvesApiTest extends TestCase ], 'updated_by' => [ 'name' => $shelf->createdBy->name, - ] + ], + 'owned_by' => [ + 'name' => $shelf->ownedBy->name + ], ]); }