3 namespace BookStack\Entities\Queries;
5 use BookStack\Entities\Models\Page;
6 use BookStack\Exceptions\NotFoundException;
7 use Illuminate\Database\Eloquent\Builder;
9 class PageQueries implements ProvidesEntityQueries
11 public function start(): Builder
16 public function findVisibleById(int $id): ?Page
18 return $this->start()->scopes('visible')->find($id);
21 public function findVisibleByIdOrFail(int $id): Page
23 $page = $this->findVisibleById($id);
26 throw new NotFoundException(trans('errors.page_not_found'));
32 public function findVisibleBySlugsOrFail(string $bookSlug, string $pageSlug): Page
34 /** @var ?Page $page */
35 $page = $this->start()->with('book')
36 ->whereHas('book', function (Builder $query) use ($bookSlug) {
37 $query->where('slug', '=', $bookSlug);
39 ->where('slug', '=', $pageSlug)
43 throw new NotFoundException(trans('errors.chapter_not_found'));
49 public function visibleForList(): Builder
52 ->select(array_merge(Page::$listAttributes, ['book_slug' => function ($builder) {
53 $builder->select('slug')
55 ->whereColumn('books.id', '=', 'pages.book_id');
59 public function currentUserDraftsForList(): Builder
61 return $this->visibleForList()
62 ->where('draft', '=', true)
63 ->where('created_by', '=', user()->id);
66 public function visibleTemplates(): Builder
68 return $this->visibleForList()
69 ->where('template', '=', true);