- Separated books-list and shelf-show view types to be saved separately.
During review of #1755
public function show(string $slug)
{
$shelf = $this->bookshelfRepo->getBySlug($slug);
- $view = setting()->getForCurrentUser('books_view_type', config('app.views.books'));
$this->checkOwnablePermission('book-view', $shelf);
Views::add($shelf);
$this->entityContextManager->setShelfContext($shelf->id);
+ $view = setting()->getForCurrentUser('bookshelf_view_type', config('app.views.books'));
$this->setPageTitle($shelf->getShortName());
return view('shelves.show', [
use BookStack\Exceptions\UserUpdateException;
use BookStack\Uploads\ImageRepo;
use Illuminate\Http\Request;
-use Illuminate\Http\Response;
use Illuminate\Support\Str;
class UserController extends Controller
/**
* UserController constructor.
- * @param User $user
- * @param UserRepo $userRepo
- * @param UserInviteService $inviteService
- * @param ImageRepo $imageRepo
*/
public function __construct(User $user, UserRepo $userRepo, UserInviteService $inviteService, ImageRepo $imageRepo)
{
/**
* Display a listing of the users.
- * @param Request $request
- * @return Response
*/
public function index(Request $request)
{
/**
* Show the form for creating a new user.
- * @return Response
*/
public function create()
{
/**
* Store a newly created user in storage.
- * @param Request $request
- * @return Response
* @throws UserUpdateException
+ * @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
/**
* Update the specified user in storage.
- * @param Request $request
- * @param int $id
- * @return Response
* @throws UserUpdateException
* @throws \BookStack\Exceptions\ImageUploadException
+ * @throws \Illuminate\Validation\ValidationException
*/
- public function update(Request $request, $id)
+ public function update(Request $request, int $id)
{
$this->preventAccessInDemoMode();
$this->checkPermissionOrCurrentUser('users-manage', $id);
/**
* Show the user delete page.
- * @param int $id
- * @return \Illuminate\View\View
*/
- public function delete($id)
+ public function delete(int $id)
{
$this->checkPermissionOrCurrentUser('users-manage', $id);
/**
* Remove the specified user from storage.
- * @param int $id
- * @return Response
* @throws \Exception
*/
- public function destroy($id)
+ public function destroy(int $id)
{
$this->preventAccessInDemoMode();
$this->checkPermissionOrCurrentUser('users-manage', $id);
/**
* Show the user profile page
- * @param $id
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function showProfilePage($id)
{
/**
* Update the user's preferred book-list display setting.
- * @param Request $request
- * @param $id
- * @return \Illuminate\Http\RedirectResponse
*/
- public function switchBookView(Request $request, $id)
+ public function switchBooksView(Request $request, int $id)
{
return $this->switchViewType($id, $request, 'books');
}
/**
* Update the user's preferred shelf-list display setting.
- * @param Request $request
- * @param $id
- * @return \Illuminate\Http\RedirectResponse
*/
- public function switchShelfView(Request $request, $id)
+ public function switchShelvesView(Request $request, int $id)
{
return $this->switchViewType($id, $request, 'bookshelves');
}
+ /**
+ * Update the user's preferred shelf-view book list display setting.
+ */
+ public function switchShelfView(Request $request, int $id)
+ {
+ return $this->switchViewType($id, $request, 'bookshelf');
+ }
+
/**
* For a type of list, switch with stored view type for a user.
- * @param integer $userId
- * @param Request $request
- * @param string $listName
- * @return \Illuminate\Http\RedirectResponse
*/
- protected function switchViewType($userId, Request $request, string $listName)
+ protected function switchViewType(int $userId, Request $request, string $listName)
{
$this->checkPermissionOrCurrentUser('users-manage', $userId);
/**
* Change the stored sort type for a particular view.
- * @param Request $request
- * @param string $id
- * @param string $type
- * @return \Illuminate\Http\RedirectResponse
*/
public function changeSort(Request $request, string $id, string $type)
{
/**
* Update the stored section expansion preference for the given user.
- * @param Request $request
- * @param string $id
- * @param string $key
- * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
*/
public function updateExpansionPreference(Request $request, string $id, string $key)
{
/**
* Changed the stored preference for a list sort order.
- * @param int $userId
- * @param Request $request
- * @param string $listName
- * @return \Illuminate\Http\RedirectResponse
*/
protected function changeListSort(int $userId, Request $request, string $listName)
{
</a>
@endif
- @include('partials.view-toggle', ['view' => $view, 'type' => 'book'])
+ @include('partials.view-toggle', ['view' => $view, 'type' => 'books'])
</div>
</div>
<div class="actions mb-xl">
<h5>{{ trans('common.actions') }}</h5>
<div class="icon-list text-primary">
- @include('partials.view-toggle', ['view' => $view, 'type' => 'book'])
+ @include('partials.view-toggle', ['view' => $view, 'type' => 'books'])
@include('components.expand-toggle', ['target' => '.entity-list.compact .entity-item-snippet', 'key' => 'home-details'])
</div>
</div>
<div class="actions mb-xl">
<h5>{{ trans('common.actions') }}</h5>
<div class="icon-list text-primary">
- @include('partials.view-toggle', ['view' => $view, 'type' => 'shelf'])
+ @include('partials.view-toggle', ['view' => $view, 'type' => 'shelves'])
@include('components.expand-toggle', ['target' => '.entity-list.compact .entity-item-snippet', 'key' => 'home-details'])
</div>
</div>
<span>{{ trans('entities.shelves_new_action') }}</span>
</a>
@endif
- @include('partials.view-toggle', ['view' => $view, 'type' => 'shelf'])
+ @include('partials.view-toggle', ['view' => $view, 'type' => 'shelves'])
</div>
</div>
</a>
@endif
- @include('partials.view-toggle', ['view' => $view, 'type' => 'book'])
+ @include('partials.view-toggle', ['view' => $view, 'type' => 'shelf'])
<hr class="primary-background">
Route::get('/users', 'UserController@index');
Route::get('/users/create', 'UserController@create');
Route::get('/users/{id}/delete', 'UserController@delete');
- Route::patch('/users/{id}/switch-book-view', 'UserController@switchBookView');
+ Route::patch('/users/{id}/switch-books-view', 'UserController@switchBooksView');
+ Route::patch('/users/{id}/switch-shelves-view', 'UserController@switchShelvesView');
Route::patch('/users/{id}/switch-shelf-view', 'UserController@switchShelfView');
Route::patch('/users/{id}/change-sort/{type}', 'UserController@changeSort');
Route::patch('/users/{id}/update-expansion-preference/{key}', 'UserController@updateExpansionPreference');
<?php namespace Test\User;
+use Activity;
+use BookStack\Auth\User;
+use BookStack\Entities\Bookshelf;
use Tests\BrowserKitTest;
class UserProfileTest extends BrowserKitTest
public function setUp(): void
{
parent::setUp();
- $this->user = \BookStack\Auth\User::all()->last();
+ $this->user = User::all()->last();
}
public function test_profile_page_shows_name()
$newUser = $this->getNewBlankUser();
$this->actingAs($newUser);
$entities = $this->createEntityChainBelongingToUser($newUser, $newUser);
- \Activity::add($entities['book'], 'book_update', $entities['book']->id);
- \Activity::add($entities['page'], 'page_create', $entities['book']->id);
+ Activity::add($entities['book'], 'book_update', $entities['book']->id);
+ Activity::add($entities['page'], 'page_create', $entities['book']->id);
$this->asAdmin()->visit('/user/' . $newUser->id)
->seeInElement('#recent-user-activity', 'updated book')
$newUser = $this->getNewBlankUser();
$this->actingAs($newUser);
$entities = $this->createEntityChainBelongingToUser($newUser, $newUser);
- \Activity::add($entities['book'], 'book_update', $entities['book']->id);
- \Activity::add($entities['page'], 'page_create', $entities['book']->id);
+ Activity::add($entities['book'], 'book_update', $entities['book']->id);
+ Activity::add($entities['page'], 'page_create', $entities['book']->id);
$this->asAdmin()->visit('/')->clickInElement('#recent-activity', $newUser->name)
->seePageIs('/user/' . $newUser->id)
public function test_guest_profile_cannot_be_deleted()
{
- $guestUser = \BookStack\Auth\User::getDefault();
+ $guestUser = User::getDefault();
$this->asAdmin()->visit('/settings/users/' . $guestUser->id . '/delete')
->see('Delete User')->see('Guest')
->press('Confirm')
->pageHasElement('.featured-image-container');
}
+ public function test_shelf_view_type_change()
+ {
+ $editor = $this->getEditor();
+ $shelf = Bookshelf::query()->first();
+ setting()->putUser($editor, 'bookshelf_view_type', 'list');
+
+ $this->actingAs($editor)->visit($shelf->getUrl())
+ ->pageNotHasElement('.featured-image-container')
+ ->pageHasElement('.content-wrap .entity-list-item')
+ ->see('Grid View');
+
+ $req = $this->patch("/settings/users/{$editor->id}/switch-shelf-view", ['view_type' => 'grid']);
+ $req->assertRedirectedTo($shelf->getUrl());
+
+ $this->actingAs($editor)->visit($shelf->getUrl())
+ ->pageHasElement('.featured-image-container')
+ ->pageNotHasElement('.content-wrap .entity-list-item')
+ ->see('List View');
+ }
+
}