diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 32e0a743c..02b4789c2 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -33,22 +33,41 @@ class HomeController extends Controller $recents = $this->signedIn ? Views::getUserRecentlyViewed(12*$recentFactor, 0) : $this->entityRepo->getRecentlyCreated('book', 12*$recentFactor); $recentlyUpdatedPages = $this->entityRepo->getRecentlyUpdated('page', 12); - // Custom homepage + $customHomepage = false; - $homepageSetting = setting('app-homepage'); - if ($homepageSetting) { - $id = intval(explode(':', $homepageSetting)[0]); - $customHomepage = $this->entityRepo->getById('page', $id, false, true); - $this->entityRepo->renderPage($customHomepage, true); + $books = false; + $booksViewType = false; + + // Check book homepage + $bookHomepageSetting = setting('app-book-homepage'); + if ($bookHomepageSetting) { + $books = $this->entityRepo->getAllPaginated('book', 18); + $booksViewType = setting()->getUser($this->currentUser, 'books_view_type', config('app.views.books', 'list')); + } else { + // Check custom homepage + $homepageSetting = setting('app-homepage'); + if ($homepageSetting) { + $id = intval(explode(':', $homepageSetting)[0]); + $customHomepage = $this->entityRepo->getById('page', $id, false, true); + $this->entityRepo->renderPage($customHomepage, true); + } } - $view = $customHomepage ? 'home-custom' : 'home'; - return view($view, [ + $view = 'home'; + if ($bookHomepageSetting) { + $view = 'home-book'; + } else if ($customHomepage) { + $view = 'home-custom'; + } + + return view('common/' . $view, [ 'activity' => $activity, 'recents' => $recents, 'recentlyUpdatedPages' => $recentlyUpdatedPages, 'draftPages' => $draftPages, - 'customHomepage' => $customHomepage + 'customHomepage' => $customHomepage, + 'books' => $books, + 'booksViewType' => $booksViewType ]); } @@ -131,7 +150,7 @@ class HomeController extends Controller $allowRobots = $sitePublic; } return response() - ->view('robots', ['allowRobots' => $allowRobots]) + ->view('common/robots', ['allowRobots' => $allowRobots]) ->header('Content-Type', 'text/plain'); } diff --git a/resources/assets/sass/_forms.scss b/resources/assets/sass/_forms.scss index 3ab2de522..6b3ed3815 100644 --- a/resources/assets/sass/_forms.scss +++ b/resources/assets/sass/_forms.scss @@ -9,6 +9,7 @@ color: #666; width: 250px; max-width: 100%; + &.neg, &.invalid { border: 1px solid $negative; } diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index de4894280..b699b5c4b 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -34,6 +34,7 @@ return [ 'app_homepage' => 'Application Homepage', 'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', 'app_homepage_default' => 'Default homepage view chosen', + 'app_homepage_books' => 'Or select the books page as your homepage. This will override any page selected as your homepage.', 'app_disable_comments' => 'Disable comments', 'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.', diff --git a/resources/views/books/index.blade.php b/resources/views/books/index.blade.php index d1435ab66..84150203f 100644 --- a/resources/views/books/index.blade.php +++ b/resources/views/books/index.blade.php @@ -3,16 +3,7 @@ @section('toolbar')
-
id}/switch-book-view") }}" method="POST" class="inline"> - {!! csrf_field() !!} - {!! method_field('PATCH') !!} - - @if ($booksViewType === 'list') - - @else - - @endif -
+ @include('books/view-toggle', ['booksViewType' => $booksViewType])
@@ -52,34 +43,5 @@ @stop @section('body') - @if($booksViewType === 'list') -
- @else -
- @endif -

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

- @if(count($books) > 0) - @if($booksViewType === 'list') - @foreach($books as $book) - @include('books/list-item', ['book' => $book]) -
- @endforeach - {!! $books->render() !!} - @else -
- @foreach($books as $key => $book) - @include('books/grid-item', ['book' => $book]) - @endforeach -
-
- {!! $books->render() !!} -
- @endif - @else -

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

- @if(userCan('books-create-all')) - @icon('edit'){{ trans('entities.create_one_now') }} - @endif - @endif -
+ @include('books/list', ['books' => $books, 'bookViewType' => $booksViewType]) @stop \ No newline at end of file diff --git a/resources/views/books/list.blade.php b/resources/views/books/list.blade.php new file mode 100644 index 000000000..1c2056a79 --- /dev/null +++ b/resources/views/books/list.blade.php @@ -0,0 +1,31 @@ + +@if($booksViewType === 'list') +
+@else +
+@endif +

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

+ @if(count($books) > 0) + @if($booksViewType === 'list') + @foreach($books as $book) + @include('books/list-item', ['book' => $book]) +
+ @endforeach + {!! $books->render() !!} + @else +
+ @foreach($books as $key => $book) + @include('books/grid-item', ['book' => $book]) + @endforeach +
+
+ {!! $books->render() !!} +
+ @endif + @else +

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

+ @if(userCan('books-create-all')) + @icon('edit'){{ trans('entities.create_one_now') }} + @endif + @endif +
\ No newline at end of file diff --git a/resources/views/books/view-toggle.blade.php b/resources/views/books/view-toggle.blade.php new file mode 100644 index 000000000..61df7ab8d --- /dev/null +++ b/resources/views/books/view-toggle.blade.php @@ -0,0 +1,10 @@ +
id}/switch-book-view") }}" method="POST" class="inline"> + {!! csrf_field() !!} + {!! method_field('PATCH') !!} + + @if ($booksViewType === 'list') + + @else + + @endif +
\ No newline at end of file diff --git a/resources/views/common/home-book.blade.php b/resources/views/common/home-book.blade.php new file mode 100644 index 000000000..2849d5ecd --- /dev/null +++ b/resources/views/common/home-book.blade.php @@ -0,0 +1,18 @@ +@extends('sidebar-layout') + +@section('toolbar') +
+
+ @icon('expand-text'){{ trans('common.toggle_details') }} + @include('books/view-toggle', ['booksViewType' => $booksViewType]) +
+
+@stop + +@section('sidebar') + @include('common/home-sidebar') +@stop + +@section('body') + @include('books/list', ['books' => $books, 'bookViewType' => $booksViewType]) +@stop \ No newline at end of file diff --git a/resources/views/common/home-custom.blade.php b/resources/views/common/home-custom.blade.php new file mode 100644 index 000000000..89154ee13 --- /dev/null +++ b/resources/views/common/home-custom.blade.php @@ -0,0 +1,19 @@ +@extends('sidebar-layout') + +@section('toolbar') + +@stop + +@section('sidebar') + @include('common/home-sidebar') +@stop + +@section('body') +
+ @include('pages/page-display', ['page' => $customHomepage]) +
+@stop diff --git a/resources/views/common/home-sidebar.blade.php b/resources/views/common/home-sidebar.blade.php new file mode 100644 index 000000000..221029481 --- /dev/null +++ b/resources/views/common/home-sidebar.blade.php @@ -0,0 +1,31 @@ +@if(count($draftPages) > 0) +
+

@icon('edit') {{ trans('entities.my_recent_drafts') }}

+ @include('partials/entity-list', ['entities' => $draftPages, 'style' => 'compact']) +
+@endif + +
+

@icon($signedIn ? 'view' : 'star-circle') {{ trans('entities.' . ($signedIn ? 'my_recently_viewed' : 'books_recent')) }}

+ @include('partials/entity-list', [ + 'entities' => $recents, + 'style' => 'compact', + 'emptyText' => $signedIn ? trans('entities.no_pages_viewed') : trans('entities.books_empty') + ]) +
+ +
+

@icon('file') {{ trans('entities.recently_updated_pages') }}

+
+ @include('partials/entity-list', [ + 'entities' => $recentlyUpdatedPages, + 'style' => 'compact', + 'emptyText' => trans('entities.no_pages_recently_updated') + ]) +
+
+ +
+

@icon('time') {{ trans('entities.recent_activity') }}

+ @include('partials/activity-list', ['activity' => $activity]) +
\ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/common/home.blade.php similarity index 100% rename from resources/views/home.blade.php rename to resources/views/common/home.blade.php diff --git a/resources/views/robots.blade.php b/resources/views/common/robots.blade.php similarity index 100% rename from resources/views/robots.blade.php rename to resources/views/common/robots.blade.php diff --git a/resources/views/home-custom.blade.php b/resources/views/home-custom.blade.php deleted file mode 100644 index d9fbab887..000000000 --- a/resources/views/home-custom.blade.php +++ /dev/null @@ -1,56 +0,0 @@ -@extends('sidebar-layout') - -@section('toolbar') - -@stop - -@section('sidebar') - @if(count($draftPages) > 0) -
-

@icon('edit') {{ trans('entities.my_recent_drafts') }}

- @include('partials/entity-list', ['entities' => $draftPages, 'style' => 'compact']) -
- @endif - -
-

@icon($signedIn ? 'view' : 'star-circle') {{ trans('entities.' . ($signedIn ? 'my_recently_viewed' : 'books_recent')) }}

- @include('partials/entity-list', [ - 'entities' => $recents, - 'style' => 'compact', - 'emptyText' => $signedIn ? trans('entities.no_pages_viewed') : trans('entities.books_empty') - ]) -
- -
-

@icon('file') {{ trans('entities.recently_updated_pages') }}

-
- @include('partials/entity-list', [ - 'entities' => $recentlyUpdatedPages, - 'style' => 'compact', - 'emptyText' => trans('entities.no_pages_recently_updated') - ]) -
-
- -
-

@icon('time') {{ trans('entities.recent_activity') }}

- @include('partials/activity-list', ['activity' => $activity]) -
-@stop - -@section('body') -
- @include('pages/page-display', ['page' => $customHomepage]) -
-@stop - -@section('scripts') - -@stop - diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 16f967179..3448a164a 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -118,7 +118,7 @@ @stop @section('body') -
+
diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php index 51ca8ccb4..64017e6e0 100644 --- a/resources/views/settings/index.blade.php +++ b/resources/views/settings/index.blade.php @@ -80,6 +80,8 @@

{{ trans('settings.app_homepage_desc') }}

@include('components.page-picker', ['name' => 'setting-app-homepage', 'placeholder' => trans('settings.app_homepage_default'), 'value' => setting('app-homepage')]) +

{{ trans('settings.app_homepage_books') }}

+ @include('components.toggle-switch', ['name' => 'setting-app-book-homepage', 'value' => setting('app-book-homepage')])
diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php index 8570ed00b..29e0985c3 100644 --- a/tests/HomepageTest.php +++ b/tests/HomepageTest.php @@ -49,4 +49,23 @@ class HomepageTest extends TestCase $homeVisit->assertSee($name); $homeVisit->assertStatus(200); } + + public function test_set_book_homepage() + { + $editor = $this->getEditor(); + setting()->putUser($editor, 'books_view_type', 'grid'); + + $this->setSettings(['app-book-homepage' => true]); + + $this->asEditor(); + $homeVisit = $this->get('/'); + $homeVisit->assertSee('Books'); + $homeVisit->assertSee('book-grid-item grid-card'); + $homeVisit->assertSee('grid-card-content'); + $homeVisit->assertSee('grid-card-footer'); + $homeVisit->assertSee('featured-image-container'); + + $this->setSettings(['app-book-homepage' => false]); + $this->test_default_homepage_visible(); + } }