- /**
- * Get gallery images with a particular filter criteria such as
- * being within the current book or page.
- * @param $filter
- * @param $pageId
- * @param int $pageNum
- * @param int $pageSize
- * @return array
- */
- public function getGalleryFiltered($filter, $pageId, $pageNum = 0, $pageSize = 24)
- {
- $images = $this->image->where('type', '=', 'gallery');
-
- $page = $this->page->findOrFail($pageId);
-
- if ($filter === 'page') {
- $images = $images->where('uploaded_to', '=', $page->id);
- } elseif ($filter === 'book') {
- $validPageIds = $page->book->pages->pluck('id')->toArray();
- $images = $images->whereIn('uploaded_to', $validPageIds);
+ if ($filterType === 'book' || $filterType === 'page') {
+ $parentFilter = function (Builder $query) use ($filterType, $contextPage) {
+ if ($filterType === 'page') {
+ $query->where('uploaded_to', '=', $contextPage->id);
+ } elseif ($filterType === 'book') {
+ $validPageIds = $contextPage->book->pages()->get(['id'])->pluck('id')->toArray();
+ $query->whereIn('uploaded_to', $validPageIds);
+ }
+ };