X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ee24635e06a8c01d751f80caba47c57f76e8989d..refs/pull/3918/head:/app/Http/Controllers/BookshelfController.php diff --git a/app/Http/Controllers/BookshelfController.php b/app/Http/Controllers/BookshelfController.php index ccbeb6484..537ea915b 100644 --- a/app/Http/Controllers/BookshelfController.php +++ b/app/Http/Controllers/BookshelfController.php @@ -6,10 +6,11 @@ use BookStack\Actions\ActivityQueries; use BookStack\Actions\View; use BookStack\Entities\Models\Book; use BookStack\Entities\Repos\BookshelfRepo; -use BookStack\Entities\Tools\PermissionsUpdater; use BookStack\Entities\Tools\ShelfContext; use BookStack\Exceptions\ImageUploadException; use BookStack\Exceptions\NotFoundException; +use BookStack\References\ReferenceFetcher; +use BookStack\Util\SimpleListOptions; use Exception; use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; @@ -18,28 +19,28 @@ class BookshelfController extends Controller { protected BookshelfRepo $shelfRepo; protected ShelfContext $shelfContext; + protected ReferenceFetcher $referenceFetcher; - public function __construct(BookshelfRepo $shelfRepo, ShelfContext $shelfContext) + public function __construct(BookshelfRepo $shelfRepo, ShelfContext $shelfContext, ReferenceFetcher $referenceFetcher) { $this->shelfRepo = $shelfRepo; $this->shelfContext = $shelfContext; + $this->referenceFetcher = $referenceFetcher; } /** * Display a listing of the book. */ - public function index() + public function index(Request $request) { $view = setting()->getForCurrentUser('bookshelves_view_type'); - $sort = setting()->getForCurrentUser('bookshelves_sort', 'name'); - $order = setting()->getForCurrentUser('bookshelves_sort_order', 'asc'); - $sortOptions = [ + $listOptions = SimpleListOptions::fromRequest($request, 'bookshelves')->withSortOptions([ 'name' => trans('common.sort_name'), 'created_at' => trans('common.sort_created_at'), 'updated_at' => trans('common.sort_updated_at'), - ]; + ]); - $shelves = $this->shelfRepo->getAllPaginated(18, $sort, $order); + $shelves = $this->shelfRepo->getAllPaginated(18, $listOptions->getSort(), $listOptions->getOrder()); $recents = $this->isSignedIn() ? $this->shelfRepo->getRecentlyViewed(4) : false; $popular = $this->shelfRepo->getPopular(4); $new = $this->shelfRepo->getRecentlyCreated(4); @@ -53,9 +54,7 @@ class BookshelfController extends Controller 'popular' => $popular, 'new' => $new, 'view' => $view, - 'sort' => $sort, - 'order' => $order, - 'sortOptions' => $sortOptions, + 'listOptions' => $listOptions, ]); } @@ -98,16 +97,21 @@ class BookshelfController extends Controller * * @throws NotFoundException */ - public function show(ActivityQueries $activities, string $slug) + public function show(Request $request, ActivityQueries $activities, string $slug) { $shelf = $this->shelfRepo->getBySlug($slug); $this->checkOwnablePermission('bookshelf-view', $shelf); - $sort = setting()->getForCurrentUser('shelf_books_sort', 'default'); - $order = setting()->getForCurrentUser('shelf_books_sort_order', 'asc'); + $listOptions = SimpleListOptions::fromRequest($request, 'shelf_books')->withSortOptions([ + 'default' => trans('common.sort_default'), + 'name' => trans('common.sort_name'), + 'created_at' => trans('common.sort_created_at'), + 'updated_at' => trans('common.sort_updated_at'), + ]); + $sort = $listOptions->getSort(); $sortedVisibleShelfBooks = $shelf->visibleBooks()->get() - ->sortBy($sort === 'default' ? 'pivot.order' : $sort, SORT_REGULAR, $order === 'desc') + ->sortBy($sort === 'default' ? 'pivot.order' : $sort, SORT_REGULAR, $listOptions->getOrder() === 'desc') ->values() ->all(); @@ -122,8 +126,8 @@ class BookshelfController extends Controller 'sortedVisibleShelfBooks' => $sortedVisibleShelfBooks, 'view' => $view, 'activity' => $activities->entityActivity($shelf, 20, 1), - 'order' => $order, - 'sort' => $sort, + 'listOptions' => $listOptions, + 'referenceCount' => $this->referenceFetcher->getPageReferenceCountToEntity($shelf), ]); } @@ -203,46 +207,4 @@ class BookshelfController extends Controller return redirect('/shelves'); } - - /** - * Show the permissions view. - */ - public function showPermissions(string $slug) - { - $shelf = $this->shelfRepo->getBySlug($slug); - $this->checkOwnablePermission('restrictions-manage', $shelf); - - return view('shelves.permissions', [ - 'shelf' => $shelf, - ]); - } - - /** - * Set the permissions for this bookshelf. - */ - public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $slug) - { - $shelf = $this->shelfRepo->getBySlug($slug); - $this->checkOwnablePermission('restrictions-manage', $shelf); - - $permissionsUpdater->updateFromPermissionsForm($shelf, $request); - - $this->showSuccessNotification(trans('entities.shelves_permissions_updated')); - - return redirect($shelf->getUrl()); - } - - /** - * Copy the permissions of a bookshelf to the child books. - */ - public function copyPermissions(string $slug) - { - $shelf = $this->shelfRepo->getBySlug($slug); - $this->checkOwnablePermission('restrictions-manage', $shelf); - - $updateCount = $this->shelfRepo->copyDownPermissions($shelf); - $this->showSuccessNotification(trans('entities.shelves_copy_permission_success', ['count' => $updateCount])); - - return redirect($shelf->getUrl()); - } }