3 namespace BookStack\Entities\Queries;
5 use BookStack\Entities\Models\Entity;
6 use Illuminate\Database\Eloquent\Builder;
7 use InvalidArgumentException;
11 public function __construct(
12 public BookshelfQueries $shelves,
13 public BookQueries $books,
14 public ChapterQueries $chapters,
15 public PageQueries $pages,
16 public PageRevisionQueries $revisions,
21 * Find an entity via an identifier string in the format:
25 public function findVisibleByStringIdentifier(string $identifier): ?Entity
27 $explodedId = explode(':', $identifier);
28 $entityType = $explodedId[0];
29 $entityId = intval($explodedId[1]);
30 $queries = $this->getQueriesForType($entityType);
32 return $queries->findVisibleById($entityId);
36 * Start a query of visible entities of the given type,
37 * suitable for listing display.
39 public function visibleForList(string $entityType): Builder
41 $queries = $this->getQueriesForType($entityType);
42 return $queries->visibleForList();
45 protected function getQueriesForType(string $type): ProvidesEntityQueries
47 /** @var ?ProvidesEntityQueries $queries */
48 $queries = match ($type) {
49 'page' => $this->pages,
50 'chapter' => $this->chapters,
51 'book' => $this->books,
52 'bookshelf' => $this->shelves,
56 if (is_null($queries)) {
57 throw new InvalidArgumentException("No entity query class configured for {$type}");