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('/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.
*/
$this->showSuccessNotification(trans('activities.favourite_add_notification', [
'name' => $favouritable->name,
]));
+
return redirect()->back();
}
$this->showSuccessNotification(trans('activities.favourite_remove_notification', [
'name' => $favouritable->name,
]));
+
return redirect()->back();
}
* @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'])) {
}
/** @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');
}