]> BookStack Code Mirror - bookstack/blobdiff - app/Entities/Models/BookChild.php
respective book and chapter structure added.
[bookstack] / app / Entities / Models / BookChild.php
index 263eceb58a4b15ee8a0fb767cbb66ac98d31386f..ad54fb926a9edb1158b5e07cfec62ea00af76306 100644 (file)
@@ -2,48 +2,20 @@
 
 namespace BookStack\Entities\Models;
 
+use BookStack\References\ReferenceUpdater;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 /**
  * Class BookChild.
  *
- * @property int  $book_id
- * @property int  $priority
- * @property string  $book_slug
- * @property Book $book
- *
- * @method Builder whereSlugs(string $bookSlug, string $childSlug)
+ * @property int    $book_id
+ * @property int    $priority
+ * @property string $book_slug
+ * @property Book   $book
  */
 abstract class BookChild extends Entity
 {
-
-    protected static function boot()
-    {
-        parent::boot();
-
-        // Load book slugs onto these models by default during query-time
-        static::addGlobalScope('book_slug', function(Builder $builder) {
-            $builder->addSelect(['book_slug' => function($builder) {
-                $builder->select('slug')
-                    ->from('books')
-                    ->whereColumn('books.id', '=',  'book_id');
-            }]);
-        });
-    }
-    /**
-     * Scope a query to find items where the child has the given childSlug
-     * where its parent has the bookSlug.
-     */
-    public function scopeWhereSlugs(Builder $query, string $bookSlug, string $childSlug)
-    {
-        return $query->with('book')
-            ->whereHas('book', function (Builder $query) use ($bookSlug) {
-                $query->where('slug', '=', $bookSlug);
-            })
-            ->where('slug', '=', $childSlug);
-    }
-
     /**
      * Get the book this page sits in.
      */
@@ -57,11 +29,16 @@ abstract class BookChild extends Entity
      */
     public function changeBook(int $newBookId): Entity
     {
+        $oldUrl = $this->getUrl();
         $this->book_id = $newBookId;
         $this->refreshSlug();
         $this->save();
         $this->refresh();
 
+        if ($oldUrl !== $this->getUrl()) {
+            app()->make(ReferenceUpdater::class)->updateEntityReferences($this, $oldUrl);
+        }
+
         // Update all child pages if a chapter
         if ($this instanceof Chapter) {
             foreach ($this->pages()->withTrashed()->get() as $page) {