-<?php namespace BookStack\Entities;
+<?php
+
+namespace BookStack\Entities;
+
+use BookStack\Entities\Models\Book;
+use BookStack\Entities\Models\Bookshelf;
+use BookStack\Entities\Models\Chapter;
+use BookStack\Entities\Models\Entity;
+use BookStack\Entities\Models\Page;
+use BookStack\Entities\Models\PageRevision;
/**
- * Class EntityProvider
+ * Class EntityProvider.
*
* Provides access to the core entity models.
* Wrapped up in this provider since they are often used together
* so this is a neater alternative to injecting all in individually.
- *
- * @package BookStack\Entities
*/
class EntityProvider
{
+ public Bookshelf $bookshelf;
+ public Book $book;
+ public Chapter $chapter;
+ public Page $page;
+ public PageRevision $pageRevision;
- /**
- * @var Bookshelf
- */
- protected $bookshelf;
-
- /**
- * @var Book
- */
- protected $book;
+ public function __construct()
+ {
+ $this->bookshelf = new Bookshelf();
+ $this->book = new Book();
+ $this->chapter = new Chapter();
+ $this->page = new Page();
+ $this->pageRevision = new PageRevision();
+ }
/**
- * @var Chapter
+ * Fetch all core entity types as an associated array
+ * with their basic names as the keys.
+ *
+ * @return array<string, Entity>
*/
- protected $chapter;
+ public function all(): array
+ {
+ return [
+ 'bookshelf' => $this->bookshelf,
+ 'book' => $this->book,
+ 'chapter' => $this->chapter,
+ 'page' => $this->page,
+ ];
+ }
/**
- * @var Page
+ * Get an entity instance by its basic name.
*/
- protected $page;
+ public function get(string $type): Entity
+ {
+ $type = strtolower($type);
+ $instance = $this->all()[$type] ?? null;
- /**
- * @var PageRevision
- */
- protected $pageRevision;
+ if (is_null($instance)) {
+ throw new \InvalidArgumentException("Provided type \"{$type}\" is not a valid entity type");
+ }
- /**
- * EntityProvider constructor.
- * @param Bookshelf $bookshelf
- * @param Book $book
- * @param Chapter $chapter
- * @param Page $page
- * @param PageRevision $pageRevision
- */
- public function __construct(
- Bookshelf $bookshelf,
- Book $book,
- Chapter $chapter,
- Page $page,
- PageRevision $pageRevision
- ) {
- $this->bookshelf = $bookshelf;
- $this->book = $book;
- $this->chapter = $chapter;
- $this->page = $page;
- $this->pageRevision = $pageRevision;
+ return $instance;
}
/**
- * Fetch all core entity types as an associated array
- * with their basic names as the keys.
- * @return Entity[]
+ * Get the morph classes, as an array, for a single or multiple types.
*/
- public function all()
+ public function getMorphClasses(array $types): array
{
- return [
- 'bookshelf' => $this->bookshelf,
- 'book' => $this->book,
- 'chapter' => $this->chapter,
- 'page' => $this->page,
- ];
- }
-
+ $morphClasses = [];
+ foreach ($types as $type) {
+ $model = $this->get($type);
+ $morphClasses[] = $model->getMorphClass();
+ }
-}
\ No newline at end of file
+ return $morphClasses;
+ }
+}