X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/375abca1ee6721feb8de792011f6798fba5e646c..refs/pull/4467/head:/app/Entities/Repos/BaseRepo.php diff --git a/app/Entities/Repos/BaseRepo.php b/app/Entities/Repos/BaseRepo.php index 39b901383..2894a04e3 100644 --- a/app/Entities/Repos/BaseRepo.php +++ b/app/Entities/Repos/BaseRepo.php @@ -2,10 +2,11 @@ namespace BookStack\Entities\Repos; -use BookStack\Actions\TagRepo; +use BookStack\Activity\TagRepo; use BookStack\Entities\Models\Entity; use BookStack\Entities\Models\HasCoverImage; use BookStack\Exceptions\ImageUploadException; +use BookStack\References\ReferenceUpdater; use BookStack\Uploads\ImageRepo; use Illuminate\Http\UploadedFile; @@ -13,11 +14,13 @@ class BaseRepo { protected TagRepo $tagRepo; protected ImageRepo $imageRepo; + protected ReferenceUpdater $referenceUpdater; - public function __construct(TagRepo $tagRepo, ImageRepo $imageRepo) + public function __construct(TagRepo $tagRepo, ImageRepo $imageRepo, ReferenceUpdater $referenceUpdater) { $this->tagRepo = $tagRepo; $this->imageRepo = $imageRepo; + $this->referenceUpdater = $referenceUpdater; } /** @@ -48,10 +51,12 @@ class BaseRepo */ public function update(Entity $entity, array $input) { + $oldUrl = $entity->getUrl(); + $entity->fill($input); $entity->updated_by = user()->id; - if ($entity->isDirty('name')) { + if ($entity->isDirty('name') || empty($entity->slug)) { $entity->refreshSlug(); } @@ -64,6 +69,10 @@ class BaseRepo $entity->rebuildPermissions(); $entity->indexForSearch(); + + if ($oldUrl !== $entity->getUrl()) { + $this->referenceUpdater->updateEntityPageReferences($entity, $oldUrl); + } } /** @@ -77,14 +86,15 @@ class BaseRepo public function updateCoverImage($entity, ?UploadedFile $coverImage, bool $removeImage = false) { if ($coverImage) { - $this->imageRepo->destroyImage($entity->cover); - $image = $this->imageRepo->saveNew($coverImage, 'cover_book', $entity->id, 512, 512, true); + $imageType = $entity->coverImageTypeKey(); + $this->imageRepo->destroyImage($entity->cover()->first()); + $image = $this->imageRepo->saveNew($coverImage, $imageType, $entity->id, 512, 512, true); $entity->cover()->associate($image); $entity->save(); } if ($removeImage) { - $this->imageRepo->destroyImage($entity->cover); + $this->imageRepo->destroyImage($entity->cover()->first()); $entity->image_id = 0; $entity->save(); }