]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Controllers/PageController.php
Found the source of the issue, not sure how to fix
[bookstack] / app / Http / Controllers / PageController.php
index 970d0dc03dad45482e46253483a7923bf2663d52..e78ae13e4c2972067ef9ed4232f6771426ab852d 100644 (file)
@@ -11,6 +11,7 @@ use BookStack\Http\Requests;
 use BookStack\Repos\BookRepo;
 use BookStack\Repos\ChapterRepo;
 use BookStack\Repos\PageRepo;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Views;
 
 class PageController extends Controller
@@ -81,6 +82,8 @@ class PageController extends Controller
 
     /**
      * Display the specified page.
+     * If the page is not found via the slug the
+     * revisions are searched for a match.
      *
      * @param $bookSlug
      * @param $pageSlug
@@ -89,7 +92,15 @@ class PageController extends Controller
     public function show($bookSlug, $pageSlug)
     {
         $book = $this->bookRepo->getBySlug($bookSlug);
-        $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+
+        try {
+            $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+        } catch (NotFoundHttpException $e) {
+            $page = $this->pageRepo->findPageUsingOldSlug($pageSlug, $bookSlug);
+            if ($page === null) abort(404);
+            return redirect($page->getUrl());
+        }
+
         $sidebarTree = $this->bookRepo->getChildren($book);
         Views::add($page);
         $this->setPageTitle($page->getShortName());
@@ -226,13 +237,22 @@ class PageController extends Controller
         return redirect($page->getUrl());
     }
 
+    /**
+     * Exports a page to pdf format using barryvdh/laravel-dompdf wrapper.
+     * https://github.com/barryvdh/laravel-dompdf
+     * @param $bookSlug
+     * @param $pageSlug
+     * @return \Illuminate\Http\Response
+     */
     public function exportPdf($bookSlug, $pageSlug)
     {
         $book = $this->bookRepo->getBySlug($bookSlug);
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
-        $cssContent = file_get_contents(public_path('/css/styles.css'));
-
-        return $pdf->download($pageSlug . '.pdf');
+        $pdfContent = $this->exportService->pageToPdf($page);
+        return response()->make($pdfContent, 200, [
+            'Content-Type' => 'application/octet-stream',
+            'Content-Disposition' => 'attachment; filename="'.$pageSlug.'.pdf'
+        ]);
     }
 
     /**
@@ -251,4 +271,48 @@ class PageController extends Controller
             'Content-Disposition' => 'attachment; filename="'.$pageSlug.'.html'
         ]);
     }
+
+    /**
+     * Export a page to a simple plaintext .txt file.
+     * @param $bookSlug
+     * @param $pageSlug
+     * @return \Illuminate\Http\Response
+     */
+    public function exportPlainText($bookSlug, $pageSlug)
+    {
+        $book = $this->bookRepo->getBySlug($bookSlug);
+        $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+        $containedHtml = $this->exportService->pageToPlainText($page);
+        return response()->make($containedHtml, 200, [
+            'Content-Type' => 'application/octet-stream',
+            'Content-Disposition' => 'attachment; filename="'.$pageSlug.'.txt'
+        ]);
+    }
+
+    /**
+     * Show a listing of recently created pages
+     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+     */
+    public function showRecentlyCreated()
+    {
+        $pages = $this->pageRepo->getRecentlyCreatedPaginated(20);
+        return view('pages/detailed-listing', [
+            'title' => 'Recently Created Pages',
+            'pages' => $pages
+        ]);
+    }
+
+    /**
+     * Show a listing of recently created pages
+     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+     */
+    public function showRecentlyUpdated()
+    {
+        $pages = $this->pageRepo->getRecentlyUpdatedPaginated(20);
+        return view('pages/detailed-listing', [
+            'title' => 'Recently Updated Pages',
+            'pages' => $pages
+        ]);
+    }
+
 }