X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/2a2cc858f0f95c606f2ad2542f915d3bd761775f..refs/pull/1695/head:/app/Http/Controllers/BookController.php diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index 7a0ee0f0e..a9a24d2ff 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -3,10 +3,9 @@ use Activity; use BookStack\Auth\UserRepo; use BookStack\Entities\Book; +use BookStack\Entities\Bookshelf; use BookStack\Entities\EntityContextManager; use BookStack\Entities\Repos\BookRepo; -use BookStack\Entities\Repos\EntityRepo; -use BookStack\Entities\ExportService; use BookStack\Exceptions\ImageUploadException; use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotifyException; @@ -55,17 +54,12 @@ class BookController extends Controller */ public function index() { - $view = setting()->getUser($this->currentUser, 'books_view_type', config('app.views.books')); - $sort = setting()->getUser($this->currentUser, 'books_sort', 'name'); - $order = setting()->getUser($this->currentUser, 'books_sort_order', 'asc'); - $sortOptions = [ - 'name' => trans('common.sort_name'), - 'created_at' => trans('common.sort_created_at'), - 'updated_at' => trans('common.sort_updated_at'), - ]; + $view = setting()->getForCurrentUser('books_view_type', config('app.views.books')); + $sort = setting()->getForCurrentUser('books_sort', 'name'); + $order = setting()->getForCurrentUser('books_sort_order', 'asc'); $books = $this->bookRepo->getAllPaginated('book', 18, $sort, $order); - $recents = $this->signedIn ? $this->bookRepo->getRecentlyViewed('book', 4, 0) : false; + $recents = $this->isSignedIn() ? $this->bookRepo->getRecentlyViewed('book', 4, 0) : false; $popular = $this->bookRepo->getPopular('book', 4, 0); $new = $this->bookRepo->getRecentlyCreated('book', 4, 0); @@ -80,7 +74,6 @@ class BookController extends Controller 'view' => $view, 'sort' => $sort, 'order' => $order, - 'sortOptions' => $sortOptions, ]); } @@ -126,16 +119,18 @@ class BookController extends Controller $bookshelf = null; if ($shelfSlug !== null) { + /** @var Bookshelf $bookshelf */ $bookshelf = $this->bookRepo->getEntityBySlug('bookshelf', $shelfSlug); $this->checkOwnablePermission('bookshelf-update', $bookshelf); } + /** @var Book $book */ $book = $this->bookRepo->createFromInput('book', $request->all()); $this->bookUpdateActions($book, $request); Activity::add($book, 'book_create', $book->id); if ($bookshelf) { - $this->bookRepo->appendBookToShelf($bookshelf, $book); + $bookshelf->appendBook($book); Activity::add($bookshelf, 'bookshelf_update'); } @@ -192,6 +187,7 @@ class BookController extends Controller * @throws ImageUploadException * @throws NotFoundException * @throws ValidationException + * @throws Throwable */ public function update(Request $request, string $slug) { @@ -203,7 +199,7 @@ class BookController extends Controller 'image' => $this->imageRepo->getImageValidationRules(), ]); - $book = $this->bookRepo->updateFromInput('book', $book, $request->all()); + $book = $this->bookRepo->updateFromInput($book, $request->all()); $this->bookUpdateActions($book, $request); Activity::add($book, 'book_update', $book->id); @@ -249,7 +245,7 @@ class BookController extends Controller * @return Factory|View * @throws NotFoundException */ - public function getSortItem(string $bookSlug) + public function sortItem(string $bookSlug) { $book = $this->bookRepo->getBySlug($bookSlug); $bookChildren = $this->bookRepo->getBookChildren($book); @@ -289,10 +285,12 @@ class BookController extends Controller // Get the books involved in the sort $bookIdsInvolved = $bookIdsInvolved->unique()->toArray(); $booksInvolved = $this->bookRepo->getManyById('book', $bookIdsInvolved, false, true); + // Throw permission error if invalid ids or inaccessible books given. if (count($bookIdsInvolved) !== count($booksInvolved)) { $this->showPermissionError(); } + // Check permissions of involved books $booksInvolved->each(function (Book $book) { $this->checkOwnablePermission('book-update', $book); @@ -307,7 +305,7 @@ class BookController extends Controller $chapterChanged = ($mapItem->type === 'page') && intval($model->chapter_id) !== $mapItem->parentChapter; if ($bookChanged) { - $this->bookRepo->changeBook($mapItem->type, $mapItem->book, $model); + $this->bookRepo->changeBook($model, $mapItem->book); } if ($chapterChanged) { $model->chapter_id = intval($mapItem->parentChapter); @@ -321,7 +319,7 @@ class BookController extends Controller // Rebuild permissions and add activity for involved books. $booksInvolved->each(function (Book $book) { - $this->bookRepo->buildJointPermissionsForBook($book); + $book->rebuildPermissions(); Activity::add($book, 'book_sort', $book->id); }); @@ -340,7 +338,7 @@ class BookController extends Controller { $book = $this->bookRepo->getBySlug($bookSlug); $this->checkOwnablePermission('book-delete', $book); - Activity::addMessage('book_delete', 0, $book->name); + Activity::addMessage('book_delete', $book->name); if ($book->cover) { $this->imageRepo->destroyImage($book->cover);