3 namespace BookStack\Entities\Queries;
5 use BookStack\Activity\Models\Favourite;
6 use BookStack\Entities\Tools\MixedEntityListLoader;
7 use BookStack\Permissions\PermissionApplicator;
8 use Illuminate\Database\Query\JoinClause;
10 class QueryTopFavourites
12 public function __construct(
13 protected PermissionApplicator $permissions,
14 protected MixedEntityListLoader $listLoader,
18 public function run(int $count, int $skip = 0)
21 if ($user->isGuest()) {
25 $query = $this->permissions
26 ->restrictEntityRelationQuery(Favourite::query(), 'favourites', 'favouritable_id', 'favouritable_type')
27 ->select('favourites.*')
28 ->leftJoin('views', function (JoinClause $join) {
29 $join->on('favourites.favouritable_id', '=', 'views.viewable_id');
30 $join->on('favourites.favouritable_type', '=', 'views.viewable_type');
31 $join->where('views.user_id', '=', user()->id);
33 ->orderBy('views.views', 'desc')
34 ->where('favourites.user_id', '=', user()->id);
41 $this->listLoader->loadIntoRelations($favourites->all(), 'favouritable', false);
43 return $favourites->pluck('favouritable')->filter();