]> BookStack Code Mirror - bookstack/blob - app/Activity/Controllers/FavouriteController.php
Dockerfile: Don't cache 50MB of lists and use a single layer, make it pretty
[bookstack] / app / Activity / Controllers / FavouriteController.php
1 <?php
2
3 namespace BookStack\Activity\Controllers;
4
5 use BookStack\Entities\Queries\QueryTopFavourites;
6 use BookStack\Entities\Tools\MixedEntityRequestHelper;
7 use BookStack\Http\Controller;
8 use Illuminate\Http\Request;
9
10 class FavouriteController extends Controller
11 {
12     public function __construct(
13         protected MixedEntityRequestHelper $entityHelper,
14     ) {
15     }
16
17     /**
18      * Show a listing of all favourite items for the current user.
19      */
20     public function index(Request $request, QueryTopFavourites $topFavourites)
21     {
22         $viewCount = 20;
23         $page = intval($request->get('page', 1));
24         $favourites = $topFavourites->run($viewCount + 1, (($page - 1) * $viewCount));
25
26         $hasMoreLink = ($favourites->count() > $viewCount) ? url('/favourites?page=' . ($page + 1)) : null;
27
28         $this->setPageTitle(trans('entities.my_favourites'));
29
30         return view('common.detailed-listing-with-more', [
31             'title'       => trans('entities.my_favourites'),
32             'entities'    => $favourites->slice(0, $viewCount),
33             'hasMoreLink' => $hasMoreLink,
34         ]);
35     }
36
37     /**
38      * Add a new item as a favourite.
39      */
40     public function add(Request $request)
41     {
42         $modelInfo = $this->validate($request, $this->entityHelper->validationRules());
43         $entity = $this->entityHelper->getVisibleEntityFromRequestData($modelInfo);
44         $entity->favourites()->firstOrCreate([
45             'user_id' => user()->id,
46         ]);
47
48         $this->showSuccessNotification(trans('activities.favourite_add_notification', [
49             'name' => $entity->name,
50         ]));
51
52         return redirect($entity->getUrl());
53     }
54
55     /**
56      * Remove an item as a favourite.
57      */
58     public function remove(Request $request)
59     {
60         $modelInfo = $this->validate($request, $this->entityHelper->validationRules());
61         $entity = $this->entityHelper->getVisibleEntityFromRequestData($modelInfo);
62         $entity->favourites()->where([
63             'user_id' => user()->id,
64         ])->delete();
65
66         $this->showSuccessNotification(trans('activities.favourite_remove_notification', [
67             'name' => $entity->name,
68         ]));
69
70         return redirect($entity->getUrl());
71     }
72 }