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