X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/8da856bac3f7d76dcefbb097dd93bd6409c6ccc9..refs/pull/5681/head:/app/Entities/Tools/HierarchyTransformer.php diff --git a/app/Entities/Tools/HierarchyTransformer.php b/app/Entities/Tools/HierarchyTransformer.php index 7304962b3..cd6c548fe 100644 --- a/app/Entities/Tools/HierarchyTransformer.php +++ b/app/Entities/Tools/HierarchyTransformer.php @@ -2,7 +2,7 @@ namespace BookStack\Entities\Tools; -use BookStack\Actions\ActivityType; +use BookStack\Activity\ActivityType; use BookStack\Entities\Models\Book; use BookStack\Entities\Models\Bookshelf; use BookStack\Entities\Models\Chapter; @@ -44,14 +44,17 @@ class HierarchyTransformer $this->trashCan->destroyEntity($chapter); - Activity::add(ActivityType::BOOK_CREATE_FROM_CHAPTER); + Activity::add(ActivityType::BOOK_CREATE_FROM_CHAPTER, $book); + return $book; } + /** + * Transform a book into a shelf. + * Does not check permissions, check before calling. + */ public function transformBookToShelf(Book $book): Bookshelf { - // TODO - Check permissions before call - // Permissions: edit-book, delete-book, create-shelf $inputData = $this->cloner->entityToInputData($book); $shelf = $this->shelfRepo->create($inputData, []); $this->cloner->copyEntityPermissions($book, $shelf); @@ -62,17 +65,23 @@ class HierarchyTransformer foreach ($book->chapters as $index => $chapter) { $newBook = $this->transformChapterToBook($chapter); $shelfBookSyncData[$newBook->id] = ['order' => $index]; + if (!$newBook->hasPermissions()) { + $this->cloner->copyEntityPermissions($shelf, $newBook); + } } - $shelf->books()->sync($shelfBookSyncData); - if ($book->directPages->count() > 0) { $book->name .= ' ' . trans('entities.pages'); + $shelfBookSyncData[$book->id] = ['order' => count($shelfBookSyncData) + 1]; + $book->save(); } else { $this->trashCan->destroyEntity($book); } - // TODO - Log activity for change + $shelf->books()->sync($shelfBookSyncData); + + Activity::add(ActivityType::BOOKSHELF_CREATE_FROM_BOOK, $shelf); + return $shelf; } -} \ No newline at end of file +}