From d61f42a3770b9a25c1ade61342d449ff2cbe2fd1 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 11 Dec 2023 12:33:20 +0000 Subject: [PATCH] Default Templates: Started review and updates from PR code --- app/Entities/Controllers/BookController.php | 48 +++++++------------ app/Entities/Controllers/PageController.php | 4 +- app/Entities/Models/Book.php | 3 +- app/Entities/Repos/PageRepo.php | 6 ++- ..._104541_add_default_template_to_books.php} | 0 lang/en/entities.php | 6 +-- resources/views/books/create.blade.php | 5 +- resources/views/books/edit.blade.php | 3 +- resources/views/books/parts/form.blade.php | 4 +- .../parts/template-selector.blade.php} | 7 ++- resources/views/pages/delete.blade.php | 4 +- 11 files changed, 39 insertions(+), 51 deletions(-) rename database/migrations/{2022_12_02_104541_add_default_template_to_books.php => 2023_12_02_104541_add_default_template_to_books.php} (100%) rename resources/views/{entities/template-manager.blade.php => books/parts/template-selector.blade.php} (58%) diff --git a/app/Entities/Controllers/BookController.php b/app/Entities/Controllers/BookController.php index 9b938d89a..12df935b0 100644 --- a/app/Entities/Controllers/BookController.php +++ b/app/Entities/Controllers/BookController.php @@ -7,7 +7,6 @@ use BookStack\Activity\ActivityType; use BookStack\Activity\Models\View; use BookStack\Activity\Tools\UserEntityWatchOptions; use BookStack\Entities\Models\Bookshelf; -use BookStack\Entities\Models\Page; use BookStack\Entities\Repos\BookRepo; use BookStack\Entities\Tools\BookContents; use BookStack\Entities\Tools\Cloner; @@ -25,15 +24,11 @@ use Throwable; class BookController extends Controller { - protected BookRepo $bookRepo; - protected ShelfContext $shelfContext; - protected ReferenceFetcher $referenceFetcher; - - public function __construct(ShelfContext $entityContextManager, BookRepo $bookRepo, ReferenceFetcher $referenceFetcher) - { - $this->bookRepo = $bookRepo; - $this->shelfContext = $entityContextManager; - $this->referenceFetcher = $referenceFetcher; + public function __construct( + protected ShelfContext $shelfContext, + protected BookRepo $bookRepo, + protected ReferenceFetcher $referenceFetcher + ) { } /** @@ -82,14 +77,8 @@ class BookController extends Controller $this->setPageTitle(trans('entities.books_create')); - $templates = Page::visible() - ->where('template', '=', true) - ->orderBy('name', 'asc') - ->get(); - return view('books.create', [ 'bookshelf' => $bookshelf, - 'templates' => $templates, ]); } @@ -103,11 +92,11 @@ class BookController extends Controller { $this->checkPermission('book-create-all'); $validated = $this->validate($request, [ - 'name' => ['required', 'string', 'max:255'], - 'description' => ['string', 'max:1000'], - 'image' => array_merge(['nullable'], $this->getImageValidationRules()), - 'tags' => ['array'], - 'default_template' => ['nullable', 'exists:pages,id'], + 'name' => ['required', 'string', 'max:255'], + 'description' => ['string', 'max:1000'], + 'image' => array_merge(['nullable'], $this->getImageValidationRules()), + 'tags' => ['array'], + 'default_template' => ['nullable', 'integer'], ]); $bookshelf = null; @@ -162,12 +151,7 @@ class BookController extends Controller $this->checkOwnablePermission('book-update', $book); $this->setPageTitle(trans('entities.books_edit_named', ['bookName' => $book->getShortName()])); - $templates = Page::visible() - ->where('template', '=', true) - ->orderBy('name', 'asc') - ->get(); - - return view('books.edit', ['book' => $book, 'current' => $book, 'templates' => $templates]); + return view('books.edit', ['book' => $book, 'current' => $book]); } /** @@ -183,11 +167,11 @@ class BookController extends Controller $this->checkOwnablePermission('book-update', $book); $validated = $this->validate($request, [ - 'name' => ['required', 'string', 'max:255'], - 'description' => ['string', 'max:1000'], - 'image' => array_merge(['nullable'], $this->getImageValidationRules()), - 'tags' => ['array'], - 'default_template' => ['nullable', 'exists:pages,id'], + 'name' => ['required', 'string', 'max:255'], + 'description' => ['string', 'max:1000'], + 'image' => array_merge(['nullable'], $this->getImageValidationRules()), + 'tags' => ['array'], + 'default_template' => ['nullable', 'integer'], ]); if ($request->has('image_reset')) { diff --git a/app/Entities/Controllers/PageController.php b/app/Entities/Controllers/PageController.php index ad75448b3..11f19f72f 100644 --- a/app/Entities/Controllers/PageController.php +++ b/app/Entities/Controllers/PageController.php @@ -259,13 +259,13 @@ class PageController extends Controller $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-delete', $page); $this->setPageTitle(trans('entities.pages_delete_named', ['pageName' => $page->getShortName()])); - $times_used_as_template = Book::where('default_template', '=', $page->id)->count(); + $usedAsTemplate = Book::query()->where('default_template', '=', $page->id)->count() > 0; return view('pages.delete', [ 'book' => $page->book, 'page' => $page, 'current' => $page, - 'times_used_as_template' => $times_used_as_template, + 'usedAsTemplate' => $usedAsTemplate, ]); } diff --git a/app/Entities/Models/Book.php b/app/Entities/Models/Book.php index 8584e755e..19aba0525 100644 --- a/app/Entities/Models/Book.php +++ b/app/Entities/Models/Book.php @@ -20,6 +20,7 @@ use Illuminate\Support\Collection; * @property \Illuminate\Database\Eloquent\Collection $pages * @property \Illuminate\Database\Eloquent\Collection $directPages * @property \Illuminate\Database\Eloquent\Collection $shelves + * @property ?Page $defaultTemplate */ class Book extends Entity implements HasCoverImage { @@ -27,7 +28,7 @@ class Book extends Entity implements HasCoverImage public $searchFactor = 1.2; - protected $fillable = ['name', 'description', 'default_template']; + protected $fillable = ['name', 'description']; protected $hidden = ['pivot', 'image_id', 'deleted_at']; /** diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php index 5269a0bcc..9a183469b 100644 --- a/app/Entities/Repos/PageRepo.php +++ b/app/Entities/Repos/PageRepo.php @@ -136,9 +136,11 @@ class PageRepo $page->book_id = $parent->id; } - if ($page->book->defaultTemplate) { + $defaultTemplate = $page->book->defaultTemplate; + if ($defaultTemplate && userCan('view', $defaultTemplate)) { $page->forceFill([ - 'html' => $page->book->defaultTemplate->html, + 'html' => $defaultTemplate->html, + 'markdown' => $defaultTemplate->markdown, ]); } diff --git a/database/migrations/2022_12_02_104541_add_default_template_to_books.php b/database/migrations/2023_12_02_104541_add_default_template_to_books.php similarity index 100% rename from database/migrations/2022_12_02_104541_add_default_template_to_books.php rename to database/migrations/2023_12_02_104541_add_default_template_to_books.php diff --git a/lang/en/entities.php b/lang/en/entities.php index e4c67f5ca..ee612b7ba 100644 --- a/lang/en/entities.php +++ b/lang/en/entities.php @@ -132,6 +132,8 @@ return [ 'books_edit_named' => 'Edit Book :bookName', 'books_form_book_name' => 'Book Name', 'books_save' => 'Save Book', + 'books_default_template' => 'Default Page Template', + 'books_default_template_explain' => 'Assign a default template that will be used for all new pages in this book. Keep in mind this will only be used if the page creator has view access to those chosen template.', 'books_permissions' => 'Book Permissions', 'books_permissions_updated' => 'Book Permissions Updated', 'books_empty_contents' => 'No pages or chapters have been created for this book.', @@ -204,7 +206,7 @@ return [ 'pages_delete_draft' => 'Delete Draft Page', 'pages_delete_success' => 'Page deleted', 'pages_delete_draft_success' => 'Draft page deleted', - 'pages_delete_warning_template' => '{0}|{1}Be careful: this page is used as a template for :count book.|[2,*]Be careful: this page is used as a template for :count books.', + 'pages_delete_warning_template' => 'This page is in active use as a book default page template. These books will no longer have a page default template assigned after this page is deleted.', 'pages_delete_confirm' => 'Are you sure you want to delete this page?', 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', 'pages_editing_named' => 'Editing Page :pageName', @@ -351,8 +353,6 @@ return [ 'templates_replace_content' => 'Replace page content', 'templates_append_content' => 'Append to page content', 'templates_prepend_content' => 'Prepend to page content', - 'default_template' => 'Default Page Template', - 'default_template_explain' => "Assign a default template that will be used for all new pages in this book.", // Profile View 'profile_user_for_x' => 'User for :time', diff --git a/resources/views/books/create.blade.php b/resources/views/books/create.blade.php index 6253a49bb..318abfcf1 100644 --- a/resources/views/books/create.blade.php +++ b/resources/views/books/create.blade.php @@ -27,10 +27,9 @@

{{ trans('entities.books_create') }}

-
+ @include('books.parts.form', [ - 'templates' => $templates, - 'returnLocation' => isset($bookshelf) ? $bookshelf->getUrl() : url('/books') + 'returnLocation' => $bookshelf?->getUrl() ?? url('/books') ])
diff --git a/resources/views/books/edit.blade.php b/resources/views/books/edit.blade.php index 9ec472935..6efd1caea 100644 --- a/resources/views/books/edit.blade.php +++ b/resources/views/books/edit.blade.php @@ -19,8 +19,7 @@
@include('books.parts.form', [ - 'model' => $book, - 'templates' => $templates, + 'model' => $book, 'returnLocation' => $book->getUrl() ])
diff --git a/resources/views/books/parts/form.blade.php b/resources/views/books/parts/form.blade.php index 9b66b8ac8..a6b0eade2 100644 --- a/resources/views/books/parts/form.blade.php +++ b/resources/views/books/parts/form.blade.php @@ -37,10 +37,10 @@
- @include('entities.template-manager', ['entity' => $book ?? null, 'templates' => $templates]) + @include('books.parts.template-selector', ['entity' => $book ?? null, 'templates' => []])
diff --git a/resources/views/entities/template-manager.blade.php b/resources/views/books/parts/template-selector.blade.php similarity index 58% rename from resources/views/entities/template-manager.blade.php rename to resources/views/books/parts/template-selector.blade.php index fe04d9389..90c5e421b 100644 --- a/resources/views/entities/template-manager.blade.php +++ b/resources/views/books/parts/template-selector.blade.php @@ -1,5 +1,5 @@

- {!! nl2br(e(trans('entities.default_template_explain'))) !!} + {{ trans('entities.books_default_template_explain') }}

\ No newline at end of file + + + +@include('settings.parts.page-picker', ['name' => 'setting-app-homepage', 'placeholder' => trans('settings.app_homepage_select'), 'value' => setting('app-homepage')]) \ No newline at end of file diff --git a/resources/views/pages/delete.blade.php b/resources/views/pages/delete.blade.php index 9ce50d48b..40125dfe2 100644 --- a/resources/views/pages/delete.blade.php +++ b/resources/views/pages/delete.blade.php @@ -19,8 +19,8 @@

{{ $page->draft ? trans('entities.pages_delete_draft') : trans('entities.pages_delete') }}

- @if ($times_used_as_template > 0) -

{{ trans_choice('entities.pages_delete_warning_template', $times_used_as_template) }}

+ @if($usedAsTemplate) +

{{ trans('entities.pages_delete_warning_template') }}

@endif