X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/2902/head:/app/Http/Controllers/PageController.php diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 7d8e54382..853ac28fc 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -1,23 +1,24 @@ -isSignedIn()) { $draft = $this->pageRepo->getNewDraftPage($parent); + return redirect($draft->getUrl()); } // Otherwise show the edit view if they're a guest $this->setPageTitle(trans('entities.pages_new')); + return view('pages.guest-create', ['parent' => $parent]); } /** * Create a new page as a guest user. + * * @throws ValidationException */ public function createAsGuest(Request $request, string $bookSlug, string $chapterSlug = null) { $this->validate($request, [ - 'name' => 'required|string|max:255' + 'name' => 'required|string|max:255', ]); $parent = $this->pageRepo->getParentFromSlugs($bookSlug, $chapterSlug); @@ -64,7 +69,7 @@ class PageController extends Controller $page = $this->pageRepo->getNewDraftPage($parent); $this->pageRepo->publishDraft($page, [ 'name' => $request->get('name'), - 'html' => '' + 'html' => '', ]); return redirect($page->getUrl('/edit')); @@ -72,6 +77,7 @@ class PageController extends Controller /** * Show form to continue editing a draft page. + * * @throws NotFoundException */ public function editDraft(string $bookSlug, int $pageId) @@ -84,23 +90,24 @@ class PageController extends Controller $templates = $this->pageRepo->getTemplates(10); return view('pages.edit', [ - 'page' => $draft, - 'book' => $draft->book, - 'isDraft' => true, + 'page' => $draft, + 'book' => $draft->book, + 'isDraft' => true, 'draftsEnabled' => $draftsEnabled, - 'templates' => $templates, + 'templates' => $templates, ]); } /** * Store a new page by changing a draft into a page. + * * @throws NotFoundException * @throws ValidationException */ public function store(Request $request, string $bookSlug, int $pageId) { $this->validate($request, [ - 'name' => 'required|string|max:255' + 'name' => 'required|string|max:255', ]); $draftPage = $this->pageRepo->getById($pageId); $this->checkOwnablePermission('page-create', $draftPage->getParent()); @@ -113,6 +120,7 @@ class PageController extends Controller /** * Display the specified page. * If the page is not found via the slug the revisions are searched for a match. + * * @throws NotFoundException */ public function show(string $bookSlug, string $pageSlug) @@ -142,20 +150,26 @@ class PageController extends Controller $page->load(['comments.createdBy']); } - Views::add($page); + $nextPreviousLocator = new NextPreviousContentLocator($page, $sidebarTree); + + View::incrementFor($page); $this->setPageTitle($page->getShortName()); + return view('pages.show', [ - 'page' => $page, - 'book' => $page->book, - 'current' => $page, - 'sidebarTree' => $sidebarTree, + 'page' => $page, + 'book' => $page->book, + 'current' => $page, + 'sidebarTree' => $sidebarTree, 'commentsEnabled' => $commentsEnabled, - 'pageNav' => $pageNav + 'pageNav' => $pageNav, + 'next' => $nextPreviousLocator->getNext(), + 'previous' => $nextPreviousLocator->getPrevious(), ]); } /** * Get page from an ajax request. + * * @throws NotFoundException */ public function getPageAjax(int $pageId) @@ -163,11 +177,13 @@ class PageController extends Controller $page = $this->pageRepo->getById($pageId); $page->setHidden(array_diff($page->getHidden(), ['html', 'markdown'])); $page->addHidden(['book']); + return response()->json($page); } /** * Show the form for editing the specified page. + * * @throws NotFoundException */ public function edit(string $bookSlug, string $pageSlug) @@ -199,24 +215,26 @@ class PageController extends Controller $templates = $this->pageRepo->getTemplates(10); $draftsEnabled = $this->isSignedIn(); $this->setPageTitle(trans('entities.pages_editing_named', ['pageName' => $page->getShortName()])); + return view('pages.edit', [ - 'page' => $page, - 'book' => $page->book, - 'current' => $page, + 'page' => $page, + 'book' => $page->book, + 'current' => $page, 'draftsEnabled' => $draftsEnabled, - 'templates' => $templates, + 'templates' => $templates, ]); } /** * Update the specified page in storage. + * * @throws ValidationException * @throws NotFoundException */ public function update(Request $request, string $bookSlug, string $pageSlug) { $this->validate($request, [ - 'name' => 'required|string|max:255' + 'name' => 'required|string|max:255', ]); $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-update', $page); @@ -228,6 +246,7 @@ class PageController extends Controller /** * Save a draft update as a revision. + * * @throws NotFoundException */ public function saveDraft(Request $request, int $pageId) @@ -242,60 +261,67 @@ class PageController extends Controller $draft = $this->pageRepo->updatePageDraft($page, $request->only(['name', 'html', 'markdown'])); $updateTime = $draft->updated_at->timestamp; + return response()->json([ 'status' => 'success', 'message' => trans('entities.pages_edit_draft_save_at'), - 'timestamp' => $updateTime + 'timestamp' => $updateTime, ]); } /** * Redirect from a special link url which uses the page id rather than the name. + * * @throws NotFoundException */ public function redirectFromLink(int $pageId) { $page = $this->pageRepo->getById($pageId); + return redirect($page->getUrl()); } /** * Show the deletion page for the specified page. + * * @throws NotFoundException */ public function showDelete(string $bookSlug, string $pageSlug) { $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-delete', $page); - $this->setPageTitle(trans('entities.pages_delete_named', ['pageName'=>$page->getShortName()])); + $this->setPageTitle(trans('entities.pages_delete_named', ['pageName' => $page->getShortName()])); + return view('pages.delete', [ - 'book' => $page->book, - 'page' => $page, - 'current' => $page + 'book' => $page->book, + 'page' => $page, + 'current' => $page, ]); } /** * Show the deletion page for the specified page. + * * @throws NotFoundException */ public function showDeleteDraft(string $bookSlug, int $pageId) { $page = $this->pageRepo->getById($pageId); $this->checkOwnablePermission('page-update', $page); - $this->setPageTitle(trans('entities.pages_delete_draft_named', ['pageName'=>$page->getShortName()])); + $this->setPageTitle(trans('entities.pages_delete_draft_named', ['pageName' => $page->getShortName()])); + return view('pages.delete', [ - 'book' => $page->book, - 'page' => $page, - 'current' => $page + 'book' => $page->book, + 'page' => $page, + 'current' => $page, ]); } /** * Remove the specified page from storage. + * * @throws NotFoundException * @throws Throwable - * @throws NotifyException */ public function destroy(string $bookSlug, string $pageSlug) { @@ -310,8 +336,8 @@ class PageController extends Controller /** * Remove the specified draft page from storage. + * * @throws NotFoundException - * @throws NotifyException * @throws Throwable */ public function destroyDraft(string $bookSlug, int $pageId) @@ -328,6 +354,7 @@ class PageController extends Controller if ($chapter && userCan('view', $chapter)) { return redirect($chapter->getUrl()); } + return redirect($book->getUrl()); } @@ -340,14 +367,15 @@ class PageController extends Controller ->paginate(20) ->setPath(url('/pages/recently-updated')); - return view('pages.detailed-listing', [ - 'title' => trans('entities.recently_updated_pages'), - 'pages' => $pages + return view('common.detailed-listing-paginated', [ + 'title' => trans('entities.recently_updated_pages'), + 'entities' => $pages, ]); } /** * Show the view to choose a new parent to move a page into. + * * @throws NotFoundException */ public function showMove(string $bookSlug, string $pageSlug) @@ -355,14 +383,16 @@ class PageController extends Controller $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-update', $page); $this->checkOwnablePermission('page-delete', $page); + return view('pages.move', [ 'book' => $page->book, - 'page' => $page + 'page' => $page, ]); } /** * Does the action of moving the location of a page. + * * @throws NotFoundException * @throws Throwable */ @@ -380,20 +410,23 @@ class PageController extends Controller try { $parent = $this->pageRepo->move($page, $entitySelection); } catch (Exception $exception) { - if ($exception instanceof PermissionsException) { + if ($exception instanceof PermissionsException) { $this->showPermissionError(); } $this->showErrorNotification(trans('errors.selected_book_chapter_not_found')); + return redirect()->back(); } $this->showSuccessNotification(trans('entities.pages_move_success', ['parentName' => $parent->name])); + return redirect($page->getUrl()); } /** * Show the view to copy a page. + * * @throws NotFoundException */ public function showCopy(string $bookSlug, string $pageSlug) @@ -401,15 +434,16 @@ class PageController extends Controller $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('page-view', $page); session()->flashInput(['name' => $page->name]); + return view('pages.copy', [ 'book' => $page->book, - 'page' => $page + 'page' => $page, ]); } - /** * Create a copy of a page within the requested target destination. + * * @throws NotFoundException * @throws Throwable */ @@ -424,33 +458,38 @@ class PageController extends Controller try { $pageCopy = $this->pageRepo->copy($page, $entitySelection, $newName); } catch (Exception $exception) { - if ($exception instanceof PermissionsException) { + if ($exception instanceof PermissionsException) { $this->showPermissionError(); } $this->showErrorNotification(trans('errors.selected_book_chapter_not_found')); + return redirect()->back(); } $this->showSuccessNotification(trans('entities.pages_copy_success')); + return redirect($pageCopy->getUrl()); } /** * Show the Permissions view. + * * @throws NotFoundException */ public function showPermissions(string $bookSlug, string $pageSlug) { $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); $this->checkOwnablePermission('restrictions-manage', $page); + return view('pages.permissions', [ - 'page' => $page, + 'page' => $page, ]); } /** * Set the permissions for this page. + * * @throws NotFoundException * @throws Throwable */ @@ -462,6 +501,7 @@ class PageController extends Controller $permissionsUpdater->updateFromPermissionsForm($page, $request); $this->showSuccessNotification(trans('entities.pages_permissions_success')); + return redirect($page->getUrl()); } }