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;
*/
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);
'view' => $view,
'sort' => $sort,
'order' => $order,
- 'sortOptions' => $sortOptions,
]);
}
$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');
}
* @throws ImageUploadException
* @throws NotFoundException
* @throws ValidationException
+ * @throws Throwable
*/
public function update(Request $request, string $slug)
{
'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);
* @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);
// 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);
$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);
// 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);
});
{
$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);
$book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('restrictions-manage', $book);
$this->bookRepo->updateEntityPermissionsFromRequest($request, $book);
- session()->flash('success', trans('entities.books_permissions_updated'));
+ $this->showSuccessNotification(trans('entities.books_permissions_updated'));
return redirect($book->getUrl());
}