]> BookStack Code Mirror - bookstack/blob - app/Entities/Queries/TopFavourites.php
Revamped some complex queries, added favourites to home
[bookstack] / app / Entities / Queries / TopFavourites.php
1 <?php namespace BookStack\Entities\Queries;
2
3
4 use BookStack\Actions\View;
5 use Illuminate\Database\Query\JoinClause;
6 use Illuminate\Support\Facades\DB;
7
8 class TopFavourites extends EntityQuery
9 {
10     public function run(int $count, int $page)
11     {
12         $user = user();
13         if ($user === null || $user->isDefault()) {
14             return collect();
15         }
16
17         $query = $this->permissionService()
18             ->filterRestrictedEntityRelations(View::query(), 'views', 'viewable_id', 'viewable_type', 'view')
19             ->select('*', 'viewable_id', 'viewable_type', DB::raw('SUM(views) as view_count'))
20             ->groupBy('viewable_id', 'viewable_type')
21             ->rightJoin('favourites', function (JoinClause $join) {
22                 $join->on('views.viewable_id', '=', 'favourites.favouritable_id');
23                 $join->on('views.viewable_type', '=', 'favourites.favouritable_type');
24                 $join->where('favourites.user_id', '=', user()->id);
25             })
26             ->orderBy('view_count', 'desc');
27
28         return $query->with('viewable')
29             ->skip($count * ($page - 1))
30             ->take($count)
31             ->get()
32             ->pluck('viewable')
33             ->filter();
34     }
35
36 }