X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/0d9b5a9d90bc4dd9bcb0e081877d8502ae87262e..refs/pull/5293/head:/app/Entities/Tools/Cloner.php diff --git a/app/Entities/Tools/Cloner.php b/app/Entities/Tools/Cloner.php index 92b62a754..2030b050c 100644 --- a/app/Entities/Tools/Cloner.php +++ b/app/Entities/Tools/Cloner.php @@ -2,10 +2,12 @@ namespace BookStack\Entities\Tools; -use BookStack\Actions\Tag; +use BookStack\Activity\Models\Tag; use BookStack\Entities\Models\Book; +use BookStack\Entities\Models\Bookshelf; use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Entity; +use BookStack\Entities\Models\HasCoverImage; use BookStack\Entities\Models\Page; use BookStack\Entities\Repos\BookRepo; use BookStack\Entities\Repos\ChapterRepo; @@ -71,9 +73,11 @@ class Cloner $bookDetails = $this->entityToInputData($original); $bookDetails['name'] = $newName; + // Clone book $copyBook = $this->bookRepo->create($bookDetails); - $directChildren = $original->getDirectChildren(); + // Clone contents + $directChildren = $original->getDirectVisibleChildren(); foreach ($directChildren as $child) { if ($child instanceof Chapter && userCan('chapter-create', $copyBook)) { $this->cloneChapter($child, $copyBook, $child->name); @@ -84,6 +88,14 @@ class Cloner } } + // Clone bookshelf relationships + /** @var Bookshelf $shelf */ + foreach ($original->shelves as $shelf) { + if (userCan('bookshelf-update', $shelf)) { + $shelf->appendBook($copyBook); + } + } + return $copyBook; } @@ -98,9 +110,11 @@ class Cloner $inputData['tags'] = $this->entityTagsToInputArray($entity); // Add a cover to the data if existing on the original entity - if ($entity->cover instanceof Image) { - $uploadedFile = $this->imageToUploadedFile($entity->cover); - $inputData['image'] = $uploadedFile; + if ($entity instanceof HasCoverImage) { + $cover = $entity->cover()->first(); + if ($cover) { + $inputData['image'] = $this->imageToUploadedFile($cover); + } } return $inputData; @@ -111,8 +125,7 @@ class Cloner */ public function copyEntityPermissions(Entity $sourceEntity, Entity $targetEntity): void { - $targetEntity->restricted = $sourceEntity->restricted; - $permissions = $sourceEntity->permissions()->get(['role_id', 'action'])->toArray(); + $permissions = $sourceEntity->permissions()->get(['role_id', 'view', 'create', 'update', 'delete'])->toArray(); $targetEntity->permissions()->delete(); $targetEntity->permissions()->createMany($permissions); $targetEntity->rebuildPermissions();