]> BookStack Code Mirror - bookstack/blobdiff - app/Entities/EntityProvider.php
respective book and chapter structure added.
[bookstack] / app / Entities / EntityProvider.php
index 0442b9f44b98b850b21793dda58436018470925c..3276a6c7a91d103b3b36b2098339d5ae437a308c 100644 (file)
@@ -1,78 +1,80 @@
-<?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;
+    }
+}