// Prevent deleting admin role or default registration role.
if ($role->system_name && in_array($role->system_name, $this->systemRoles)) {
throw new PermissionsException(trans('errors.role_system_cannot_be_deleted'));
- } else if ($role->id == setting('registration-role')) {
+ } else if ($role->id === intval(setting('registration-role'))) {
throw new PermissionsException(trans('errors.role_registration_default_cannot_delete'));
}
* @param Book $book
* @return bool
*/
- public function contains(Book $book)
+ public function contains(Book $book): bool
{
return $this->books()->where('id', '=', $book->id)->count() > 0;
}
--- /dev/null
+<?php
+
+
+namespace BookStack\Entities\Repos;
+
+
+use BookStack\Entities\Book;
+use BookStack\Entities\Bookshelf;
+use BookStack\Exceptions\NotFoundException;
+use BookStack\Exceptions\NotifyException;
+
+class BookRepo extends EntityRepo
+{
+
+ /**
+ * Fetch a book by its slug.
+ * @param string $slug
+ * @return Book
+ * @throws NotFoundException
+ */
+ public function getBySlug(string $slug): Book
+ {
+ /** @var Book $book */
+ $book = $this->getEntityBySlug('book', $slug);
+ return $book;
+ }
+
+ /**
+ * Append a Book to a BookShelf.
+ * @param Bookshelf $shelf
+ * @param Book $book
+ */
+ public function appendBookToShelf(Bookshelf $shelf, Book $book)
+ {
+ if ($shelf->contains($book)) {
+ return;
+ }
+
+ $maxOrder = $shelf->books()->max('order');
+ $shelf->books()->attach($book->id, ['order' => $maxOrder + 1]);
+ }
+
+ /**
+ * Destroy the provided book and all its child entities.
+ * @param Book $book
+ * @throws NotifyException
+ * @throws \Throwable
+ */
+ public function destroyBook(Book $book)
+ {
+ foreach ($book->pages as $page) {
+ $this->destroyPage($page);
+ }
+
+ foreach ($book->chapters as $chapter) {
+ $this->destroyChapter($chapter);
+ }
+
+ $this->destroyEntityCommonRelations($book);
+ $book->delete();
+ }
+
+}
\ No newline at end of file
use DOMXPath;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Throwable;
* @param string $type
* @param bool $allowDrafts
* @param string $permission
- * @return \Illuminate\Database\Query\Builder
+ * @return QueryBuilder
*/
protected function entityQuery($type, $allowDrafts = false, $permission = 'view')
{
* Get an entity by its url slug.
* @param string $type
* @param string $slug
- * @param string|bool $bookSlug
+ * @param string|null $bookSlug
* @return Entity
* @throws NotFoundException
*/
- public function getBySlug($type, $slug, $bookSlug = false)
+ public function getEntityBySlug(string $type, string $slug, string $bookSlug = null): Entity
{
- $q = $this->entityQuery($type)->where('slug', '=', $slug);
+ $type = strtolower($type);
+ $query = $this->entityQuery($type)->where('slug', '=', $slug);
- if (strtolower($type) === 'chapter' || strtolower($type) === 'page') {
- $q = $q->where('book_id', '=', function ($query) use ($bookSlug) {
+ if ($type === 'chapter' || $type === 'page') {
+ $query = $query->where('book_id', '=', function (QueryBuilder $query) use ($bookSlug) {
$query->select('id')
->from($this->entityProvider->book->getTable())
->where('slug', '=', $bookSlug)->limit(1);
});
}
- $entity = $q->first();
+
+ $entity = $query->first();
+
if ($entity === null) {
- throw new NotFoundException(trans('errors.' . strtolower($type) . '_not_found'));
+ throw new NotFoundException(trans('errors.' . $type . '_not_found'));
}
+
return $entity;
}
}
-
/**
* Create a new entity from request input.
* Used for books and chapters.
* @param string $type
* @param array $input
- * @param bool|Book $book
+ * @param Book|null $book
* @return Entity
+ * @throws Throwable
*/
- public function createFromInput($type, $input = [], $book = false)
+ public function createFromInput(string $type, array $input = [], Book $book = null)
{
- $isChapter = strtolower($type) === 'chapter';
$entityModel = $this->entityProvider->get($type)->newInstance($input);
- $entityModel->slug = $this->findSuitableSlug($type, $entityModel->name, false, $isChapter ? $book->id : false);
+ $entityModel->slug = $this->findSuitableSlug($type, $entityModel->name, false, $book ? $book->id : false);
$entityModel->created_by = user()->id;
$entityModel->updated_by = user()->id;
- $isChapter ? $book->chapters()->save($entityModel) : $entityModel->save();
+
+ if ($book) {
+ $entityModel->book_id = $book->id;
+ }
+
+ $entityModel->save();
if (isset($input['tags'])) {
$this->tagRepo->saveTagsToEntity($entityModel, $input['tags']);
* @param Entity $entityModel
* @param array $input
* @return Entity
+ * @throws Throwable
*/
- public function updateFromInput($type, Entity $entityModel, $input = [])
+ public function updateFromInput(string $type, Entity $entityModel, array $input = [])
{
if ($entityModel->name !== $input['name']) {
$entityModel->slug = $this->findSuitableSlug($type, $input['name'], $entityModel->id);
}
+
$entityModel->fill($input);
$entityModel->updated_by = user()->id;
$entityModel->save();
$shelf->books()->sync($syncData);
}
- /**
- * Append a Book to a BookShelf.
- * @param Bookshelf $shelf
- * @param Book $book
- */
- public function appendBookToShelf(Bookshelf $shelf, Book $book)
- {
- if ($shelf->contains($book)) {
- return;
- }
-
- $maxOrder = $shelf->books()->max('order');
- $shelf->books()->attach($book->id, ['order' => $maxOrder + 1]);
- }
-
/**
* Change the book that an entity belongs to.
* @param string $type
$shelf->delete();
}
- /**
- * Destroy the provided book and all its child entities.
- * @param Book $book
- * @throws NotifyException
- * @throws Throwable
- */
- public function destroyBook(Book $book)
- {
- foreach ($book->pages as $page) {
- $this->destroyPage($page);
- }
- foreach ($book->chapters as $chapter) {
- $this->destroyChapter($chapter);
- }
- $this->destroyEntityCommonRelations($book);
- $book->delete();
- }
-
/**
* Destroy a chapter and its relations.
* @param Chapter $chapter
* @return Page
* @throws \BookStack\Exceptions\NotFoundException
*/
- public function getPageBySlug(string $pageSlug, string $bookSlug)
+ public function getBySlug(string $pageSlug, string $bookSlug)
{
- return $this->getBySlug('page', $pageSlug, $bookSlug);
+ return $this->getEntityBySlug('page', $pageSlug, $bookSlug);
}
/**
use BookStack\Auth\UserRepo;
use BookStack\Entities\Book;
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;
use BookStack\Uploads\ImageRepo;
+use Illuminate\Contracts\View\Factory;
+use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
+use Illuminate\Routing\Redirector;
+use Illuminate\Validation\ValidationException;
+use Illuminate\View\View;
+use Throwable;
use Views;
class BookController extends Controller
{
- protected $entityRepo;
+ protected $bookRepo;
protected $userRepo;
protected $entityContextManager;
protected $imageRepo;
/**
* BookController constructor.
- * @param EntityRepo $entityRepo
+ * @param BookRepo $bookRepo
* @param UserRepo $userRepo
* @param EntityContextManager $entityContextManager
* @param ImageRepo $imageRepo
*/
public function __construct(
- EntityRepo $entityRepo,
+ BookRepo $bookRepo,
UserRepo $userRepo,
EntityContextManager $entityContextManager,
ImageRepo $imageRepo
) {
- $this->entityRepo = $entityRepo;
+ $this->bookRepo = $bookRepo;
$this->userRepo = $userRepo;
$this->entityContextManager = $entityContextManager;
$this->imageRepo = $imageRepo;
'updated_at' => trans('common.sort_updated_at'),
];
- $books = $this->entityRepo->getAllPaginated('book', 18, $sort, $order);
- $recents = $this->signedIn ? $this->entityRepo->getRecentlyViewed('book', 4, 0) : false;
- $popular = $this->entityRepo->getPopular('book', 4, 0);
- $new = $this->entityRepo->getRecentlyCreated('book', 4, 0);
+ $books = $this->bookRepo->getAllPaginated('book', 18, $sort, $order);
+ $recents = $this->signedIn ? $this->bookRepo->getRecentlyViewed('book', 4, 0) : false;
+ $popular = $this->bookRepo->getPopular('book', 4, 0);
+ $new = $this->bookRepo->getRecentlyCreated('book', 4, 0);
$this->entityContextManager->clearShelfContext();
* Show the form for creating a new book.
* @param string $shelfSlug
* @return Response
- * @throws \BookStack\Exceptions\NotFoundException
+ * @throws NotFoundException
*/
public function create(string $shelfSlug = null)
{
$bookshelf = null;
if ($shelfSlug !== null) {
- $bookshelf = $this->entityRepo->getBySlug('bookshelf', $shelfSlug);
+ $bookshelf = $this->bookRepo->getEntityBySlug('bookshelf', $shelfSlug);
$this->checkOwnablePermission('bookshelf-update', $bookshelf);
}
* @param Request $request
* @param string $shelfSlug
* @return Response
- * @throws \BookStack\Exceptions\NotFoundException
- * @throws \BookStack\Exceptions\ImageUploadException
+ * @throws NotFoundException
+ * @throws ImageUploadException
+ * @throws ValidationException
*/
public function store(Request $request, string $shelfSlug = null)
{
$bookshelf = null;
if ($shelfSlug !== null) {
- $bookshelf = $this->entityRepo->getBySlug('bookshelf', $shelfSlug);
+ $bookshelf = $this->bookRepo->getEntityBySlug('bookshelf', $shelfSlug);
$this->checkOwnablePermission('bookshelf-update', $bookshelf);
}
- $book = $this->entityRepo->createFromInput('book', $request->all());
+ $book = $this->bookRepo->createFromInput('book', $request->all());
$this->bookUpdateActions($book, $request);
Activity::add($book, 'book_create', $book->id);
if ($bookshelf) {
- $this->entityRepo->appendBookToShelf($bookshelf, $book);
+ $this->bookRepo->appendBookToShelf($bookshelf, $book);
Activity::add($bookshelf, 'bookshelf_update');
}
* @param Request $request
* @param string $slug
* @return Response
- * @throws \BookStack\Exceptions\NotFoundException
+ * @throws NotFoundException
*/
public function show(Request $request, string $slug)
{
- $book = $this->entityRepo->getBySlug('book', $slug);
+ $book = $this->bookRepo->getBySlug($slug);
$this->checkOwnablePermission('book-view', $book);
- $bookChildren = $this->entityRepo->getBookChildren($book);
+ $bookChildren = $this->bookRepo->getBookChildren($book);
Views::add($book);
if ($request->has('shelf')) {
/**
* Show the form for editing the specified book.
- * @param $slug
+ * @param string $slug
* @return Response
+ * @throws NotFoundException
*/
- public function edit($slug)
+ public function edit(string $slug)
{
- $book = $this->entityRepo->getBySlug('book', $slug);
+ $book = $this->bookRepo->getBySlug($slug);
$this->checkOwnablePermission('book-update', $book);
$this->setPageTitle(trans('entities.books_edit_named', ['bookName'=>$book->getShortName()]));
return view('books.edit', ['book' => $book, 'current' => $book]);
/**
* Update the specified book in storage.
* @param Request $request
- * @param $slug
+ * @param string $slug
* @return Response
- * @throws \BookStack\Exceptions\ImageUploadException
- * @throws \BookStack\Exceptions\NotFoundException
+ * @throws ImageUploadException
+ * @throws NotFoundException
+ * @throws ValidationException
*/
public function update(Request $request, string $slug)
{
- $book = $this->entityRepo->getBySlug('book', $slug);
+ $book = $this->bookRepo->getBySlug($slug);
$this->checkOwnablePermission('book-update', $book);
$this->validate($request, [
'name' => 'required|string|max:255',
'image' => $this->imageRepo->getImageValidationRules(),
]);
- $book = $this->entityRepo->updateFromInput('book', $book, $request->all());
+ $book = $this->bookRepo->updateFromInput('book', $book, $request->all());
$this->bookUpdateActions($book, $request);
Activity::add($book, 'book_update', $book->id);
/**
* Shows the page to confirm deletion
- * @param $bookSlug
- * @return \Illuminate\View\View
+ * @param string $bookSlug
+ * @return View
+ * @throws NotFoundException
*/
- public function showDelete($bookSlug)
+ public function showDelete(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('book-delete', $book);
- $this->setPageTitle(trans('entities.books_delete_named', ['bookName'=>$book->getShortName()]));
+ $this->setPageTitle(trans('entities.books_delete_named', ['bookName' => $book->getShortName()]));
return view('books.delete', ['book' => $book, 'current' => $book]);
}
/**
* Shows the view which allows pages to be re-ordered and sorted.
* @param string $bookSlug
- * @return \Illuminate\View\View
- * @throws \BookStack\Exceptions\NotFoundException
+ * @return View
+ * @throws NotFoundException
*/
- public function sort($bookSlug)
+ public function sort(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('book-update', $book);
- $bookChildren = $this->entityRepo->getBookChildren($book, true);
+ $bookChildren = $this->bookRepo->getBookChildren($book, true);
$this->setPageTitle(trans('entities.books_sort_named', ['bookName'=>$book->getShortName()]));
return view('books.sort', ['book' => $book, 'current' => $book, 'bookChildren' => $bookChildren]);
/**
* Shows the sort box for a single book.
* Used via AJAX when loading in extra books to a sort.
- * @param $bookSlug
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ * @param string $bookSlug
+ * @return Factory|View
+ * @throws NotFoundException
*/
- public function getSortItem($bookSlug)
+ public function getSortItem(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
- $bookChildren = $this->entityRepo->getBookChildren($book);
+ $book = $this->bookRepo->getBySlug($bookSlug);
+ $bookChildren = $this->bookRepo->getBookChildren($book);
return view('books.sort-box', ['book' => $book, 'bookChildren' => $bookChildren]);
}
* Saves an array of sort mapping to pages and chapters.
* @param Request $request
* @param string $bookSlug
- * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
- * @throws \BookStack\Exceptions\NotFoundException
+ * @return RedirectResponse|Redirector
+ * @throws NotFoundException
*/
public function saveSort(Request $request, string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('book-update', $book);
// Return if no map sent
// Load models into map
$sortMap->each(function ($mapItem) use ($bookIdsInvolved) {
$mapItem->type = ($mapItem->type === 'page' ? 'page' : 'chapter');
- $mapItem->model = $this->entityRepo->getById($mapItem->type, $mapItem->id);
+ $mapItem->model = $this->bookRepo->getById($mapItem->type, $mapItem->id);
// Store source and target books
$bookIdsInvolved->push(intval($mapItem->model->book_id));
$bookIdsInvolved->push(intval($mapItem->book));
// Get the books involved in the sort
$bookIdsInvolved = $bookIdsInvolved->unique()->toArray();
- $booksInvolved = $this->entityRepo->getManyById('book', $bookIdsInvolved, false, true);
+ $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();
$chapterChanged = ($mapItem->type === 'page') && intval($model->chapter_id) !== $mapItem->parentChapter;
if ($bookChanged) {
- $this->entityRepo->changeBook($mapItem->type, $mapItem->book, $model);
+ $this->bookRepo->changeBook($mapItem->type, $mapItem->book, $model);
}
if ($chapterChanged) {
$model->chapter_id = intval($mapItem->parentChapter);
// Rebuild permissions and add activity for involved books.
$booksInvolved->each(function (Book $book) {
- $this->entityRepo->buildJointPermissionsForBook($book);
+ $this->bookRepo->buildJointPermissionsForBook($book);
Activity::add($book, 'book_sort', $book->id);
});
/**
* Remove the specified book from storage.
- * @param $bookSlug
+ * @param string $bookSlug
* @return Response
+ * @throws NotFoundException
+ * @throws Throwable
+ * @throws NotifyException
*/
- public function destroy($bookSlug)
+ public function destroy(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('book-delete', $book);
Activity::addMessage('book_delete', 0, $book->name);
if ($book->cover) {
$this->imageRepo->destroyImage($book->cover);
}
- $this->entityRepo->destroyBook($book);
+ $this->bookRepo->destroyBook($book);
return redirect('/books');
}
/**
* Show the Restrictions view.
- * @param $bookSlug
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ * @param string $bookSlug
+ * @return Factory|View
+ * @throws NotFoundException
*/
- public function showPermissions($bookSlug)
+ public function showPermissions(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('restrictions-manage', $book);
$roles = $this->userRepo->getRestrictableRoles();
return view('books.permissions', [
* Set the restrictions for this book.
* @param Request $request
* @param string $bookSlug
- * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
- * @throws \BookStack\Exceptions\NotFoundException
- * @throws \Throwable
+ * @return RedirectResponse|Redirector
+ * @throws NotFoundException
+ * @throws Throwable
*/
public function permissions(Request $request, string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('restrictions-manage', $book);
- $this->entityRepo->updateEntityPermissionsFromRequest($request, $book);
+ $this->bookRepo->updateEntityPermissionsFromRequest($request, $book);
session()->flash('success', trans('entities.books_permissions_updated'));
return redirect($book->getUrl());
}
* Handles updating the cover image.
* @param Book $book
* @param Request $request
- * @throws \BookStack\Exceptions\ImageUploadException
+ * @throws ImageUploadException
*/
protected function bookUpdateActions(Book $book, Request $request)
{
namespace BookStack\Http\Controllers;
use BookStack\Entities\ExportService;
-use BookStack\Entities\Repos\EntityRepo;
+use BookStack\Entities\Repos\BookRepo;
use BookStack\Exceptions\NotFoundException;
use Throwable;
class BookExportController extends Controller
{
/**
- * @var EntityRepo
+ * @var BookRepo
*/
- protected $entityRepo;
+ protected $bookRepo;
/**
* @var ExportService
/**
* BookExportController constructor.
- * @param EntityRepo $entityRepo
+ * @param BookRepo $bookRepo
* @param ExportService $exportService
*/
- public function __construct(EntityRepo $entityRepo, ExportService $exportService)
+ public function __construct(BookRepo $bookRepo, ExportService $exportService)
{
- $this->entityRepo = $entityRepo;
+ $this->bookRepo = $bookRepo;
$this->exportService = $exportService;
parent::__construct();
}
*/
public function pdf(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$pdfContent = $this->exportService->bookToPdf($book);
return $this->downloadResponse($pdfContent, $bookSlug . '.pdf');
}
*/
public function html(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$htmlContent = $this->exportService->bookToContainedHtml($book);
return $this->downloadResponse($htmlContent, $bookSlug . '.html');
}
*/
public function plainText(string $bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->bookRepo->getBySlug($bookSlug);
$textContent = $this->exportService->bookToPlainText($book);
return $this->downloadResponse($textContent, $bookSlug . '.txt');
}
public function show(string $slug)
{
/** @var Bookshelf $shelf */
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug);
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug);
$this->checkOwnablePermission('book-view', $shelf);
$books = $this->entityRepo->getBookshelfChildren($shelf);
*/
public function edit(string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
$this->checkOwnablePermission('bookshelf-update', $shelf);
$shelfBooks = $this->entityRepo->getBookshelfChildren($shelf);
*/
public function update(Request $request, string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug); /** @var $bookshelf Bookshelf */
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug); /** @var $bookshelf Bookshelf */
$this->checkOwnablePermission('bookshelf-update', $shelf);
$this->validate($request, [
'name' => 'required|string|max:255',
*/
public function showDelete(string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
$this->checkOwnablePermission('bookshelf-delete', $shelf);
$this->setPageTitle(trans('entities.shelves_delete_named', ['name' => $shelf->getShortName()]));
*/
public function destroy(string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug); /** @var $shelf Bookshelf */
$this->checkOwnablePermission('bookshelf-delete', $shelf);
Activity::addMessage('bookshelf_delete', 0, $shelf->name);
*/
public function showPermissions(string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug);
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug);
$this->checkOwnablePermission('restrictions-manage', $shelf);
$roles = $this->userRepo->getRestrictableRoles();
*/
public function permissions(Request $request, string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug);
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug);
$this->checkOwnablePermission('restrictions-manage', $shelf);
$this->entityRepo->updateEntityPermissionsFromRequest($request, $shelf);
*/
public function copyPermissions(string $slug)
{
- $shelf = $this->entityRepo->getBySlug('bookshelf', $slug);
+ $shelf = $this->entityRepo->getEntityBySlug('bookshelf', $slug);
$this->checkOwnablePermission('restrictions-manage', $shelf);
$updateCount = $this->entityRepo->copyBookshelfPermissions($shelf);
*/
public function create($bookSlug)
{
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->entityRepo->getEntityBySlug('book', $bookSlug);
$this->checkOwnablePermission('chapter-create', $book);
$this->setPageTitle(trans('entities.chapters_create'));
return view('chapters.create', ['book' => $book, 'current' => $book]);
'name' => 'required|string|max:255'
]);
- $book = $this->entityRepo->getBySlug('book', $bookSlug);
+ $book = $this->entityRepo->getEntityBySlug('book', $bookSlug);
$this->checkOwnablePermission('chapter-create', $book);
$input = $request->all();
*/
public function show($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('chapter-view', $chapter);
$sidebarTree = $this->entityRepo->getBookChildren($chapter->book);
Views::add($chapter);
*/
public function edit($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('chapter-update', $chapter);
$this->setPageTitle(trans('entities.chapters_edit_named', ['chapterName' => $chapter->getShortName()]));
return view('chapters.edit', ['book' => $chapter->book, 'chapter' => $chapter, 'current' => $chapter]);
*/
public function update(Request $request, string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('chapter-update', $chapter);
$this->entityRepo->updateFromInput('chapter', $chapter, $request->all());
*/
public function showDelete($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('chapter-delete', $chapter);
$this->setPageTitle(trans('entities.chapters_delete_named', ['chapterName' => $chapter->getShortName()]));
return view('chapters.delete', ['book' => $chapter->book, 'chapter' => $chapter, 'current' => $chapter]);
*/
public function destroy($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$book = $chapter->book;
$this->checkOwnablePermission('chapter-delete', $chapter);
Activity::addMessage('chapter_delete', $book->id, $chapter->name);
*/
public function showMove($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->setPageTitle(trans('entities.chapters_move_named', ['chapterName' => $chapter->getShortName()]));
$this->checkOwnablePermission('chapter-update', $chapter);
$this->checkOwnablePermission('chapter-delete', $chapter);
*/
public function move(Request $request, string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('chapter-update', $chapter);
$this->checkOwnablePermission('chapter-delete', $chapter);
*/
public function showPermissions($bookSlug, $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('restrictions-manage', $chapter);
$roles = $this->userRepo->getRestrictableRoles();
return view('chapters.permissions', [
*/
public function permissions(Request $request, string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$this->checkOwnablePermission('restrictions-manage', $chapter);
$this->entityRepo->updateEntityPermissionsFromRequest($request, $chapter);
session()->flash('success', trans('entities.chapters_permissions_success'));
*/
public function pdf(string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$pdfContent = $this->exportService->chapterToPdf($chapter);
return $this->downloadResponse($pdfContent, $chapterSlug . '.pdf');
}
*/
public function html(string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$containedHtml = $this->exportService->chapterToContainedHtml($chapter);
return $this->downloadResponse($containedHtml, $chapterSlug . '.html');
}
*/
public function plainText(string $bookSlug, string $chapterSlug)
{
- $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$chapterText = $this->exportService->chapterToPlainText($chapter);
return $this->downloadResponse($chapterText, $chapterSlug . '.txt');
}
public function create($bookSlug, $chapterSlug = null)
{
if ($chapterSlug !== null) {
- $chapter = $this->pageRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->pageRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$book = $chapter->book;
} else {
$chapter = null;
- $book = $this->pageRepo->getBySlug('book', $bookSlug);
+ $book = $this->pageRepo->getEntityBySlug('book', $bookSlug);
}
$parent = $chapter ? $chapter : $book;
]);
if ($chapterSlug !== null) {
- $chapter = $this->pageRepo->getBySlug('chapter', $chapterSlug, $bookSlug);
+ $chapter = $this->pageRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
$book = $chapter->book;
} else {
$chapter = null;
- $book = $this->pageRepo->getBySlug('book', $bookSlug);
+ $book = $this->pageRepo->getEntityBySlug('book', $bookSlug);
}
$parent = $chapter ? $chapter : $book;
public function show($bookSlug, $pageSlug)
{
try {
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
} catch (NotFoundException $e) {
$page = $this->pageRepo->getPageByOldSlug($pageSlug, $bookSlug);
if ($page === null) {
*/
public function edit($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-update', $page);
$this->setPageTitle(trans('entities.pages_editing_named', ['pageName'=>$page->getShortName()]));
$page->isDraft = false;
$this->validate($request, [
'name' => 'required|string|max:255'
]);
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-update', $page);
$this->pageRepo->updatePage($page, $page->book->id, $request->all());
Activity::add($page, 'page_update', $page->book->id);
*/
public function showDelete($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-delete', $page);
$this->setPageTitle(trans('entities.pages_delete_named', ['pageName'=>$page->getShortName()]));
return view('pages.delete', ['book' => $page->book, 'page' => $page, 'current' => $page]);
*/
public function destroy($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$book = $page->book;
$this->checkOwnablePermission('page-delete', $page);
$this->pageRepo->destroyPage($page);
*/
public function showRevisions($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->setPageTitle(trans('entities.pages_revisions_named', ['pageName'=>$page->getShortName()]));
return view('pages.revisions', ['page' => $page, 'current' => $page]);
}
*/
public function showRevision($bookSlug, $pageSlug, $revisionId)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$revision = $page->revisions()->where('id', '=', $revisionId)->first();
if ($revision === null) {
abort(404);
*/
public function showRevisionChanges($bookSlug, $pageSlug, $revisionId)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$revision = $page->revisions()->where('id', '=', $revisionId)->first();
if ($revision === null) {
abort(404);
*/
public function restoreRevision($bookSlug, $pageSlug, $revisionId)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-update', $page);
$page = $this->pageRepo->restorePageRevision($page, $page->book, $revisionId);
Activity::add($page, 'page_restore', $page->book->id);
*/
public function destroyRevision($bookSlug, $pageSlug, $revId)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-delete', $page);
$revision = $page->revisions()->where('id', '=', $revId)->first();
*/
public function showMove($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-update', $page);
$this->checkOwnablePermission('page-delete', $page);
return view('pages.move', [
*/
public function move(Request $request, string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-update', $page);
$this->checkOwnablePermission('page-delete', $page);
*/
public function showCopy($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-view', $page);
session()->flashInput(['name' => $page->name]);
return view('pages.copy', [
*/
public function copy(Request $request, string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('page-view', $page);
$entitySelection = $request->get('entity_selection', null);
*/
public function showPermissions($bookSlug, $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('restrictions-manage', $page);
$roles = $this->userRepo->getRestrictableRoles();
return view('pages.permissions', [
*/
public function permissions(Request $request, string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$this->checkOwnablePermission('restrictions-manage', $page);
$this->pageRepo->updateEntityPermissionsFromRequest($request, $page);
session()->flash('success', trans('entities.pages_permissions_success'));
*/
public function pdf(string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$page->html = $this->pageRepo->renderPage($page);
$pdfContent = $this->exportService->pageToPdf($page);
return $this->downloadResponse($pdfContent, $pageSlug . '.pdf');
*/
public function html(string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$page->html = $this->pageRepo->renderPage($page);
$containedHtml = $this->exportService->pageToContainedHtml($page);
return $this->downloadResponse($containedHtml, $pageSlug . '.html');
*/
public function plainText(string $bookSlug, string $pageSlug)
{
- $page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
$pageText = $this->exportService->pageToPlainText($page);
return $this->downloadResponse($pageText, $pageSlug . '.txt');
}
/**
* Helper to access system settings.
- * @param $key
- * @param bool $default
+ * @param string $key
+ * @param $default
* @return bool|string|SettingService
*/
-function setting(string $key = null, bool $default = false)
+function setting(string $key = null, $default = false)
{
$settingService = resolve(SettingService::class);
if (is_null($key)) {
* @return \BookStack\Entities\Bookshelf
*/
public function newShelf($input = ['name' => 'test shelf', 'description' => 'My new test shelf']) {
- return app(EntityRepo::class)->createFromInput('bookshelf', $input, false);
+ return app(EntityRepo::class)->createFromInput('bookshelf', $input);
}
/**
* @return Book
*/
public function newBook($input = ['name' => 'test book', 'description' => 'My new test book']) {
- return app(EntityRepo::class)->createFromInput('book', $input, false);
+ return app(EntityRepo::class)->createFromInput('book', $input);
}
/**