X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a274406038e13cf678e14d65dfa70d04ead67206..refs/pull/3918/head:/app/Entities/Models/BookChild.php diff --git a/app/Entities/Models/BookChild.php b/app/Entities/Models/BookChild.php index 263eceb58..ed08f16e6 100644 --- a/app/Entities/Models/BookChild.php +++ b/app/Entities/Models/BookChild.php @@ -2,35 +2,36 @@ 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 + * @property int $book_id + * @property int $priority + * @property string $book_slug + * @property Book $book * * @method Builder whereSlugs(string $bookSlug, string $childSlug) */ 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) { + static::addGlobalScope('book_slug', function (Builder $builder) { + $builder->addSelect(['book_slug' => function ($builder) { $builder->select('slug') ->from('books') - ->whereColumn('books.id', '=', 'book_id'); + ->whereColumn('books.id', '=', 'book_id'); }]); }); } + /** * Scope a query to find items where the child has the given childSlug * where its parent has the bookSlug. @@ -57,11 +58,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)->updateEntityPageReferences($this, $oldUrl); + } + // Update all child pages if a chapter if ($this instanceof Chapter) { foreach ($this->pages()->withTrashed()->get() as $page) {