X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/bf8e7f3393d48e6300c4d8775daeb40d55ea2017..refs/pull/3616/head:/app/Http/Controllers/FavouriteController.php diff --git a/app/Http/Controllers/FavouriteController.php b/app/Http/Controllers/FavouriteController.php index 8a26eac8e..b4cbdf5c2 100644 --- a/app/Http/Controllers/FavouriteController.php +++ b/app/Http/Controllers/FavouriteController.php @@ -3,12 +3,33 @@ namespace BookStack\Http\Controllers; use BookStack\Entities\Models\Entity; +use BookStack\Entities\Queries\TopFavourites; use BookStack\Interfaces\Favouritable; use BookStack\Model; use Illuminate\Http\Request; class FavouriteController extends Controller { + /** + * Show a listing of all favourite items for the current user. + */ + public function index(Request $request) + { + $viewCount = 20; + $page = intval($request->get('page', 1)); + $favourites = (new TopFavourites())->run($viewCount + 1, (($page - 1) * $viewCount)); + + $hasMoreLink = ($favourites->count() > $viewCount) ? url('/http/source.bookstackapp.com/favourites?page=' . ($page + 1)) : null; + + $this->setPageTitle(trans('entities.my_favourites')); + + return view('common.detailed-listing-with-more', [ + 'title' => trans('entities.my_favourites'), + 'entities' => $favourites->slice(0, $viewCount), + 'hasMoreLink' => $hasMoreLink, + ]); + } + /** * Add a new item as a favourite. */ @@ -22,6 +43,7 @@ class FavouriteController extends Controller $this->showSuccessNotification(trans('activities.favourite_add_notification', [ 'name' => $favouritable->name, ])); + return redirect()->back(); } @@ -38,6 +60,7 @@ class FavouriteController extends Controller $this->showSuccessNotification(trans('activities.favourite_remove_notification', [ 'name' => $favouritable->name, ])); + return redirect()->back(); } @@ -45,11 +68,11 @@ class FavouriteController extends Controller * @throws \Illuminate\Validation\ValidationException * @throws \Exception */ - protected function getValidatedModelFromRequest(Request $request): Favouritable + protected function getValidatedModelFromRequest(Request $request): Entity { $modelInfo = $this->validate($request, [ - 'type' => 'required|string', - 'id' => 'required|integer', + 'type' => ['required', 'string'], + 'id' => ['required', 'integer'], ]); if (!class_exists($modelInfo['type'])) { @@ -57,8 +80,8 @@ class FavouriteController extends Controller } /** @var Model $model */ - $model = new $modelInfo['type']; - if (! $model instanceof Favouritable) { + $model = new $modelInfo['type'](); + if (!$model instanceof Favouritable) { throw new \Exception('Model not favouritable'); }