| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Http\Controllers; | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-16 17:49:37 +08:00
										 |  |  | use BookStack\Actions\View; | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | use BookStack\Entities\Models\Page; | 
					
						
							|  |  |  | use BookStack\Entities\Repos\PageRepo; | 
					
						
							| 
									
										
										
										
											2020-11-22 07:20:54 +08:00
										 |  |  | use BookStack\Entities\Tools\BookContents; | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  | use BookStack\Entities\Tools\NextPreviousContentLocator; | 
					
						
							| 
									
										
										
										
											2020-11-22 07:20:54 +08:00
										 |  |  | use BookStack\Entities\Tools\PageContent; | 
					
						
							|  |  |  | use BookStack\Entities\Tools\PageEditActivity; | 
					
						
							| 
									
										
										
										
											2021-01-02 01:49:48 +08:00
										 |  |  | use BookStack\Entities\Tools\PermissionsUpdater; | 
					
						
							| 
									
										
										
										
											2018-09-25 23:58:03 +08:00
										 |  |  | use BookStack\Exceptions\NotFoundException; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | use BookStack\Exceptions\PermissionsException; | 
					
						
							| 
									
										
										
										
											2019-09-16 05:33:27 +08:00
										 |  |  | use Exception; | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | use Illuminate\Http\Request; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | use Illuminate\Validation\ValidationException; | 
					
						
							| 
									
										
										
										
											2019-09-16 05:33:27 +08:00
										 |  |  | use Throwable; | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PageController extends Controller | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-10-13 18:27:55 +08:00
										 |  |  |     protected $pageRepo; | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * PageController constructor. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function __construct(PageRepo $pageRepo) | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-10-13 18:27:55 +08:00
										 |  |  |         $this->pageRepo = $pageRepo; | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      * Show the form for creating a new page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function create(string $bookSlug, string $chapterSlug = null) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $parent = $this->pageRepo->getParentFromSlugs($bookSlug, $chapterSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 03:24:42 +08:00
										 |  |  |         $this->checkOwnablePermission('page-create', $parent); | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // Redirect to draft edit screen if signed in
 | 
					
						
							| 
									
										
										
										
											2019-09-20 07:18:28 +08:00
										 |  |  |         if ($this->isSignedIn()) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $draft = $this->pageRepo->getNewDraftPage($parent); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |             return redirect($draft->getUrl()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-14 21:12:29 +08:00
										 |  |  |         // Otherwise show the edit view if they're a guest
 | 
					
						
							| 
									
										
										
										
											2016-12-05 00:51:39 +08:00
										 |  |  |         $this->setPageTitle(trans('entities.pages_new')); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.guest-create', ['parent' => $parent]); | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Create a new page as a guest user. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws ValidationException | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function createAsGuest(Request $request, string $bookSlug, string $chapterSlug = null) | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         $this->validate($request, [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'name' => 'required|string|max:255', | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $parent = $this->pageRepo->getParentFromSlugs($bookSlug, $chapterSlug); | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         $this->checkOwnablePermission('page-create', $parent); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getNewDraftPage($parent); | 
					
						
							|  |  |  |         $this->pageRepo->publishDraft($page, [ | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |             'name' => $request->get('name'), | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'html' => '', | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         return redirect($page->getUrl('/edit')); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Show form to continue editing a draft page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function editDraft(string $bookSlug, int $pageId) | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $draft = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2020-11-03 06:47:48 +08:00
										 |  |  |         $this->checkOwnablePermission('page-create', $draft->getParent()); | 
					
						
							| 
									
										
										
										
											2016-12-05 00:51:39 +08:00
										 |  |  |         $this->setPageTitle(trans('entities.pages_edit_draft')); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-20 07:18:28 +08:00
										 |  |  |         $draftsEnabled = $this->isSignedIn(); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $templates = $this->pageRepo->getTemplates(10); | 
					
						
							| 
									
										
										
										
											2019-08-12 03:04:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.edit', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'page'          => $draft, | 
					
						
							|  |  |  |             'book'          => $draft->book, | 
					
						
							|  |  |  |             'isDraft'       => true, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:04:43 +08:00
										 |  |  |             'draftsEnabled' => $draftsEnabled, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'templates'     => $templates, | 
					
						
							| 
									
										
										
										
											2016-09-30 00:07:58 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |      * Store a new page by changing a draft into a page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      * @throws ValidationException | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function store(Request $request, string $bookSlug, int $pageId) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |         $this->validate($request, [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'name' => 'required|string|max:255', | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $draftPage = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2020-11-03 06:47:48 +08:00
										 |  |  |         $this->checkOwnablePermission('page-create', $draftPage->getParent()); | 
					
						
							| 
									
										
										
										
											2015-07-31 05:27:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->publishDraft($draftPage, $request->all()); | 
					
						
							| 
									
										
										
										
											2015-07-21 05:05:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |         return redirect($page->getUrl()); | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      * Display the specified page. | 
					
						
							| 
									
										
										
										
											2017-01-02 00:05:44 +08:00
										 |  |  |      * If the page is not found via the slug the revisions are searched for a match. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-12-28 21:19:02 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function show(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-26 04:01:59 +08:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-03-06 02:09:21 +08:00
										 |  |  |         } catch (NotFoundException $e) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $page = $this->pageRepo->getByOldSlug($bookSlug, $pageSlug); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  |             if ($page === null) { | 
					
						
							|  |  |  |                 throw $e; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-26 04:01:59 +08:00
										 |  |  |             return redirect($page->getUrl()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 19:40:07 +08:00
										 |  |  |         $this->checkOwnablePermission('page-view', $page); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $pageContent = (new PageContent($page)); | 
					
						
							|  |  |  |         $page->html = $pageContent->render(); | 
					
						
							|  |  |  |         $sidebarTree = (new BookContents($page->book))->getTree(); | 
					
						
							|  |  |  |         $pageNav = $pageContent->getNavigation($page->html); | 
					
						
							| 
									
										
										
										
											2017-11-16 02:35:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         // Check if page comments are enabled
 | 
					
						
							| 
									
										
										
										
											2017-12-08 03:19:25 +08:00
										 |  |  |         $commentsEnabled = !setting('app-disable-comments'); | 
					
						
							|  |  |  |         if ($commentsEnabled) { | 
					
						
							|  |  |  |             $page->load(['comments.createdBy']); | 
					
						
							| 
									
										
										
										
											2017-11-16 02:35:24 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-06-04 13:47:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |         $nextPreviousLocator = new NextPreviousContentLocator($page, $sidebarTree); | 
					
						
							| 
									
										
										
										
											2021-01-27 12:35:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-16 17:49:37 +08:00
										 |  |  |         View::incrementFor($page); | 
					
						
							| 
									
										
										
										
											2015-12-05 22:41:51 +08:00
										 |  |  |         $this->setPageTitle($page->getShortName()); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.show', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'page'            => $page, | 
					
						
							|  |  |  |             'book'            => $page->book, | 
					
						
							|  |  |  |             'current'         => $page, | 
					
						
							|  |  |  |             'sidebarTree'     => $sidebarTree, | 
					
						
							| 
									
										
										
										
											2017-12-08 03:19:25 +08:00
										 |  |  |             'commentsEnabled' => $commentsEnabled, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'pageNav'         => $pageNav, | 
					
						
							|  |  |  |             'next'            => $nextPreviousLocator->getNext(), | 
					
						
							|  |  |  |             'previous'        => $nextPreviousLocator->getPrevious(), | 
					
						
							| 
									
										
										
										
											2017-12-08 03:19:25 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get page from an ajax request. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function getPageAjax(int $pageId) | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2020-07-06 04:18:17 +08:00
										 |  |  |         $page->setHidden(array_diff($page->getHidden(), ['html', 'markdown'])); | 
					
						
							|  |  |  |         $page->addHidden(['book']); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |         return response()->json($page); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      * Show the form for editing the specified page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-10-13 18:27:55 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function edit(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 03:24:42 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |         $page->isDraft = false; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $editActivity = new PageEditActivity($page); | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         // Check for active editing
 | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |         $warnings = []; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         if ($editActivity->hasActiveEditing()) { | 
					
						
							|  |  |  |             $warnings[] = $editActivity->activeEditingMessage(); | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         // Check for a current draft version for this user
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $userDraft = $this->pageRepo->getUserDraft($page); | 
					
						
							|  |  |  |         if ($userDraft !== null) { | 
					
						
							|  |  |  |             $page->forceFill($userDraft->only(['name', 'html', 'markdown'])); | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |             $page->isDraft = true; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $warnings[] = $editActivity->getEditingActiveDraftMessage($userDraft); | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  |         if (count($warnings) > 0) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $this->showWarningNotification(implode("\n", $warnings)); | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-03-12 23:52:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $templates = $this->pageRepo->getTemplates(10); | 
					
						
							| 
									
										
										
										
											2019-09-20 07:18:28 +08:00
										 |  |  |         $draftsEnabled = $this->isSignedIn(); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->setPageTitle(trans('entities.pages_editing_named', ['pageName' => $page->getShortName()])); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.edit', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'page'          => $page, | 
					
						
							|  |  |  |             'book'          => $page->book, | 
					
						
							|  |  |  |             'current'       => $page, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:04:43 +08:00
										 |  |  |             'draftsEnabled' => $draftsEnabled, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'templates'     => $templates, | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      * Update the specified page in storage. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws ValidationException | 
					
						
							|  |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function update(Request $request, string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-12-28 23:58:13 +08:00
										 |  |  |         $this->validate($request, [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'name' => 'required|string|max:255', | 
					
						
							| 
									
										
										
										
											2015-12-28 23:58:13 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 03:24:42 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->pageRepo->update($page, $request->all()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 04:31:15 +08:00
										 |  |  |         return redirect($page->getUrl()); | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-10 06:32:07 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Save a draft update as a revision. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2016-03-10 06:32:07 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function saveDraft(Request $request, int $pageId) | 
					
						
							| 
									
										
										
										
											2016-03-10 06:32:07 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2016-03-10 06:32:07 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-20 07:18:28 +08:00
										 |  |  |         if (!$this->isSignedIn()) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             return $this->jsonError(trans('errors.guests_cannot_save_drafts'), 500); | 
					
						
							| 
									
										
										
										
											2016-09-29 22:56:57 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-13 18:27:55 +08:00
										 |  |  |         $draft = $this->pageRepo->updatePageDraft($page, $request->only(['name', 'html', 'markdown'])); | 
					
						
							| 
									
										
										
										
											2016-04-09 20:36:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $updateTime = $draft->updated_at->timestamp; | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 20:36:32 +08:00
										 |  |  |         return response()->json([ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'status'    => 'success', | 
					
						
							|  |  |  |             'message'   => trans('entities.pages_edit_draft_save_at'), | 
					
						
							|  |  |  |             'timestamp' => $updateTime, | 
					
						
							| 
									
										
										
										
											2016-04-09 20:36:32 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2016-03-10 06:32:07 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-22 03:13:29 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * Redirect from a special link url which uses the page id rather than the name. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2015-07-22 03:13:29 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function redirectFromLink(int $pageId) | 
					
						
							| 
									
										
										
										
											2015-07-17 02:15:22 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 02:15:22 +08:00
										 |  |  |         return redirect($page->getUrl()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show the deletion page for the specified page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function showDelete(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2015-07-29 03:57:13 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 03:24:42 +08:00
										 |  |  |         $this->checkOwnablePermission('page-delete', $page); | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |         $this->setPageTitle(trans('entities.pages_delete_named', ['pageName' => $page->getShortName()])); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         return view('pages.delete', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'book'    => $page->book, | 
					
						
							|  |  |  |             'page'    => $page, | 
					
						
							|  |  |  |             'current' => $page, | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2015-07-29 03:57:13 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show the deletion page for the specified page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function showDeleteDraft(string $bookSlug, int $pageId) | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |         $this->setPageTitle(trans('entities.pages_delete_draft_named', ['pageName' => $page->getShortName()])); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         return view('pages.delete', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'book'    => $page->book, | 
					
						
							|  |  |  |             'page'    => $page, | 
					
						
							|  |  |  |             'current' => $page, | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         ]); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  |      * Remove the specified page from storage. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function destroy(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 03:24:42 +08:00
										 |  |  |         $this->checkOwnablePermission('page-delete', $page); | 
					
						
							| 
									
										
										
										
											2020-11-08 06:37:27 +08:00
										 |  |  |         $parent = $page->getParent(); | 
					
						
							| 
									
										
										
										
											2017-10-16 02:14:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->pageRepo->destroy($page); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-16 19:54:53 +08:00
										 |  |  |         return redirect($parent->getUrl()); | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Remove the specified draft page from storage. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function destroyDraft(string $bookSlug, int $pageId) | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getById($pageId); | 
					
						
							| 
									
										
										
										
											2017-01-02 00:05:44 +08:00
										 |  |  |         $book = $page->book; | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $chapter = $page->chapter; | 
					
						
							| 
									
										
										
										
											2016-03-13 20:04:08 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->pageRepo->destroy($page); | 
					
						
							| 
									
										
										
										
											2015-08-09 19:06:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->showSuccessNotification(trans('entities.pages_delete_draft_success')); | 
					
						
							| 
									
										
										
										
											2016-07-08 01:42:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         if ($chapter && userCan('view', $chapter)) { | 
					
						
							|  |  |  |             return redirect($chapter->getUrl()); | 
					
						
							| 
									
										
										
										
											2018-09-15 17:45:42 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         return redirect($book->getUrl()); | 
					
						
							| 
									
										
										
										
											2018-09-15 17:45:42 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-21 02:51:01 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * Show a listing of recently created pages. | 
					
						
							| 
									
										
										
										
											2016-02-21 02:51:01 +08:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function showRecentlyUpdated() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $pages = Page::visible()->orderBy('updated_at', 'desc') | 
					
						
							|  |  |  |             ->paginate(20) | 
					
						
							|  |  |  |             ->setPath(url('/pages/recently-updated')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-23 20:34:08 +08:00
										 |  |  |         return view('common.detailed-listing-paginated', [ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'title'    => trans('entities.recently_updated_pages'), | 
					
						
							|  |  |  |             'entities' => $pages, | 
					
						
							| 
									
										
										
										
											2016-02-21 02:51:01 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 04:04:18 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show the view to choose a new parent to move a page into. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-06-12 04:04:18 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function showMove(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2016-06-12 04:04:18 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-06-12 04:04:18 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2019-01-05 22:39:40 +08:00
										 |  |  |         $this->checkOwnablePermission('page-delete', $page); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.move', [ | 
					
						
							| 
									
										
										
										
											2017-01-02 00:05:44 +08:00
										 |  |  |             'book' => $page->book, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'page' => $page, | 
					
						
							| 
									
										
										
										
											2016-06-12 04:04:18 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 22:31:38 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |      * Does the action of moving the location of a page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-06-25 22:31:38 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2019-09-16 05:33:27 +08:00
										 |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2016-06-25 22:31:38 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-09-16 01:53:30 +08:00
										 |  |  |     public function move(Request $request, string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2016-06-12 19:14:14 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-06-12 19:14:14 +08:00
										 |  |  |         $this->checkOwnablePermission('page-update', $page); | 
					
						
							| 
									
										
										
										
											2019-01-05 22:39:40 +08:00
										 |  |  |         $this->checkOwnablePermission('page-delete', $page); | 
					
						
							| 
									
										
										
										
											2016-06-12 19:14:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $entitySelection = $request->get('entity_selection', null); | 
					
						
							|  |  |  |         if ($entitySelection === null || $entitySelection === '') { | 
					
						
							|  |  |  |             return redirect($page->getUrl()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-02 00:05:44 +08:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $parent = $this->pageRepo->move($page, $entitySelection); | 
					
						
							|  |  |  |         } catch (Exception $exception) { | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |             if ($exception instanceof PermissionsException) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |                 $this->showPermissionError(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $this->showErrorNotification(trans('errors.selected_book_chapter_not_found')); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 19:14:14 +08:00
										 |  |  |             return redirect()->back(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->showSuccessNotification(trans('entities.pages_move_success', ['parentName' => $parent->name])); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 19:14:14 +08:00
										 |  |  |         return redirect($page->getUrl()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show the view to copy a page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function showCopy(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2018-12-31 14:01:49 +08:00
										 |  |  |         $this->checkOwnablePermission('page-view', $page); | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |         session()->flashInput(['name' => $page->name]); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.copy', [ | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |             'book' => $page->book, | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             'page' => $page, | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create a copy of a page within the requested target destination. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2019-09-16 05:33:27 +08:00
										 |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-09-16 01:53:30 +08:00
										 |  |  |     public function copy(Request $request, string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2018-12-31 14:01:49 +08:00
										 |  |  |         $this->checkOwnablePermission('page-view', $page); | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $entitySelection = $request->get('entity_selection', null) ?? null; | 
					
						
							|  |  |  |         $newName = $request->get('name', null); | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         try { | 
					
						
							|  |  |  |             $pageCopy = $this->pageRepo->copy($page, $entitySelection, $newName); | 
					
						
							|  |  |  |         } catch (Exception $exception) { | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |             if ($exception instanceof PermissionsException) { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |                 $this->showPermissionError(); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             $this->showErrorNotification(trans('errors.selected_book_chapter_not_found')); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |             return redirect()->back(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $this->showSuccessNotification(trans('entities.pages_copy_success')); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |         return redirect($pageCopy->getUrl()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Show the Permissions view. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |     public function showPermissions(string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         $this->checkOwnablePermission('restrictions-manage', $page); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         return view('pages.permissions', [ | 
					
						
							| 
									
										
										
										
											2021-05-29 19:39:41 +08:00
										 |  |  |             'page' => $page, | 
					
						
							| 
									
										
										
										
											2019-02-02 19:41:41 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 18:49:41 +08:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-05-02 04:20:50 +08:00
										 |  |  |      * Set the permissions for this page. | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-04-15 01:00:16 +08:00
										 |  |  |      * @throws NotFoundException | 
					
						
							| 
									
										
										
										
											2019-09-16 05:33:27 +08:00
										 |  |  |      * @throws Throwable | 
					
						
							| 
									
										
										
										
											2016-02-28 18:49:41 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-01-02 01:49:48 +08:00
										 |  |  |     public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $bookSlug, string $pageSlug) | 
					
						
							| 
									
										
										
										
											2016-02-28 18:49:41 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  |         $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug); | 
					
						
							| 
									
										
										
										
											2016-02-28 18:49:41 +08:00
										 |  |  |         $this->checkOwnablePermission('restrictions-manage', $page); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 01:49:48 +08:00
										 |  |  |         $permissionsUpdater->updateFromPermissionsForm($page, $request); | 
					
						
							| 
									
										
										
										
											2019-10-05 19:55:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->showSuccessNotification(trans('entities.pages_permissions_success')); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 18:49:41 +08:00
										 |  |  |         return redirect($page->getUrl()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | } |