diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index e181aec89..aa8f89ea4 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -46,7 +46,7 @@ class BookController extends Controller 'books' => $books, 'recents' => $recents, 'popular' => $popular, - 'new' => $new, + 'new' => $new, 'booksViewType' => $booksViewType ]); } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index fe5c7a243..397bb2922 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -249,4 +249,27 @@ class UserController extends Controller 'assetCounts' => $assetCounts ]); } + + public function switchBookView($id, Request $request) { + $this->checkPermissionOr('users-manage', function () use ($id) { + return $this->currentUser->id == $id; + }); + $viewType = $request->get('book_view_type'); + + if (!in_array($viewType, ['grid', 'list'])) { + $viewType = 'list'; + } + + $user = $this->user->findOrFail($id); + setting()->putUser($user, 'books_view_type', $viewType); + + $previousUrl = url()->previous(); + if (empty($previousUrl)) { + // if no previous URL, redirect to settings + return redirect("/settings/users/$id"); + } else { + // redirect to the previous page. + return redirect($previousUrl); + } + } } diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 4dc5ccc38..6e481d03b 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -99,6 +99,7 @@ return [ 'books_sort_named' => 'Sort Book :bookName', 'books_sort_show_other' => 'Show Other Books', 'books_sort_save' => 'Save New Order', + 'books_toggle_view' => 'Toggle Book View', /** * Chapters diff --git a/resources/views/books/index.blade.php b/resources/views/books/index.blade.php index d392af045..5ca01a550 100644 --- a/resources/views/books/index.blade.php +++ b/resources/views/books/index.blade.php @@ -4,6 +4,11 @@
+
id}/switch-book-view") }}" method="POST" class="inline"> + {!! csrf_field() !!} + + +
@if($currentUser->can('book-create-all')) {{ trans('entities.books_create') }} @endif @@ -52,7 +57,7 @@
@endforeach {!! $books->render() !!} - @else + @else
@foreach($books as $key => $book) @include('books/grid-item', ['book' => $book]) diff --git a/routes/web.php b/routes/web.php index f5e59f109..31de09737 100644 --- a/routes/web.php +++ b/routes/web.php @@ -146,6 +146,7 @@ Route::group(['middleware' => 'auth'], function () { Route::get('/users', 'UserController@index'); Route::get('/users/create', 'UserController@create'); Route::get('/users/{id}/delete', 'UserController@delete'); + Route::post('/users/{id}/switch-book-view', 'UserController@switchBookView'); Route::post('/users/create', 'UserController@store'); Route::get('/users/{id}', 'UserController@edit'); Route::put('/users/{id}', 'UserController@update'); diff --git a/tests/Entity/EntityTest.php b/tests/Entity/EntityTest.php index a43f65b5e..549253417 100644 --- a/tests/Entity/EntityTest.php +++ b/tests/Entity/EntityTest.php @@ -82,6 +82,27 @@ class EntityTest extends BrowserKitTest ->see($firstChapter->name); } + public function test_toggle_book_view() + { + $editor = $this->getEditor(); + setting()->putUser($editor, 'books_view_type', 'grid'); + + $this->actingAs($editor) + ->visit('/books') + ->pageHasElement('.featured-image-container') + ->submitForm('Toggle Book View') + // Check redirection. + ->seePageIs('/books') + ->pageNotHasElement('.featured-image-container'); + + $this->actingAs($editor) + ->visit('/books') + ->submitForm('Toggle Book View') + ->seePageIs('/books') + ->pageHasElement('.featured-image-container'); + + } + public function pageCreation($chapter) { $page = factory(Page::class)->make([ @@ -155,7 +176,7 @@ class EntityTest extends BrowserKitTest ->type($book->name, '#name') ->type($book->description, '#description') ->press('Save Book'); - + $expectedPattern = '/\/books\/my-first-book-[0-9a-zA-Z]{3}/'; $this->assertRegExp($expectedPattern, $this->currentUri, "Did not land on expected page [$expectedPattern].\n"); diff --git a/tests/UserProfileTest.php b/tests/UserProfileTest.php index 0c66363f0..3262117d5 100644 --- a/tests/UserProfileTest.php +++ b/tests/UserProfileTest.php @@ -103,7 +103,7 @@ class UserProfileTest extends BrowserKitTest $this->actingAs($editor) ->visit('/books') ->pageNotHasElement('.featured-image-container') - ->pageHasElement('.entity-list-item'); + ->pageHasElement('.content .entity-list-item'); } public function test_books_view_is_grid()