X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/257a5a23ecaf7ce779969d575ff8a0b976181d13..refs/pull/5313/head:/app/Entities/EntityProvider.php diff --git a/app/Entities/EntityProvider.php b/app/Entities/EntityProvider.php index 0442b9f44..3276a6c7a 100644 --- a/app/Entities/EntityProvider.php +++ b/app/Entities/EntityProvider.php @@ -1,78 +1,80 @@ -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 */ - 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; + } +}