X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ea82c2f61b00231cdbcffd0463361c5b41832062..refs/pull/3616/head:/app/Http/Controllers/BookExportController.php diff --git a/app/Http/Controllers/BookExportController.php b/app/Http/Controllers/BookExportController.php index 0414b7250..cc8d48a35 100644 --- a/app/Http/Controllers/BookExportController.php +++ b/app/Http/Controllers/BookExportController.php @@ -2,48 +2,49 @@ namespace BookStack\Http\Controllers; -use BookStack\Entities\Managers\BookContents; -use BookStack\Entities\ExportService; use BookStack\Entities\Repos\BookRepo; +use BookStack\Entities\Tools\ExportFormatter; use Throwable; -use ZipArchive; class BookExportController extends Controller { - protected $bookRepo; - protected $exportService; + protected $exportFormatter; /** * BookExportController constructor. */ - public function __construct(BookRepo $bookRepo, ExportService $exportService) + public function __construct(BookRepo $bookRepo, ExportFormatter $exportFormatter) { $this->bookRepo = $bookRepo; - $this->exportService = $exportService; - parent::__construct(); + $this->exportFormatter = $exportFormatter; + $this->middleware('can:content-export'); } /** * Export a book as a PDF file. + * * @throws Throwable */ public function pdf(string $bookSlug) { $book = $this->bookRepo->getBySlug($bookSlug); - $pdfContent = $this->exportService->bookToPdf($book); - return $this->downloadResponse($pdfContent, $bookSlug . '.pdf'); + $pdfContent = $this->exportFormatter->bookToPdf($book); + + return $this->download()->directly($pdfContent, $bookSlug . '.pdf'); } /** * Export a book as a contained HTML file. + * * @throws Throwable */ public function html(string $bookSlug) { $book = $this->bookRepo->getBySlug($bookSlug); - $htmlContent = $this->exportService->bookToContainedHtml($book); - return $this->downloadResponse($htmlContent, $bookSlug . '.html'); + $htmlContent = $this->exportFormatter->bookToContainedHtml($book); + + return $this->download()->directly($htmlContent, $bookSlug . '.html'); } /** @@ -52,8 +53,9 @@ class BookExportController extends Controller public function plainText(string $bookSlug) { $book = $this->bookRepo->getBySlug($bookSlug); - $textContent = $this->exportService->bookToPlainText($book); - return $this->downloadResponse($textContent, $bookSlug . '.txt'); + $textContent = $this->exportFormatter->bookToPlainText($book); + + return $this->download()->directly($textContent, $bookSlug . '.txt'); } /** @@ -62,30 +64,8 @@ class BookExportController extends Controller public function markdown(string $bookSlug) { $book = $this->bookRepo->getBySlug($bookSlug); - $textContent = $this->exportService->bookToMarkdown($book); - return $this->downloadResponse($textContent, $bookSlug . '.md'); - } + $textContent = $this->exportFormatter->bookToMarkdown($book); - /** - * Export a book as a zip file, made of markdown files. - */ - public function zip(string $bookSlug) - { - $book = $this->bookRepo->getBySlug($bookSlug); - $z = new ZipArchive(); - $z->open("book.zip", \ZipArchive::CREATE | \ZipArchive::OVERWRITE); - $bookTree = (new BookContents($book))->getTree(false, true); - foreach ($bookTree as $bookChild) { - if ($bookChild->isA('chapter')) { - $z->addEmptyDir($bookChild->name); - foreach ($bookChild->pages as $page) { - $z->addFromString($bookChild->name . "/" . $page->name . ".md", $this->exportService->pageToMarkdown($page)); - } - } else { - $z->addFromString($bookChild->name . ".md", $this->exportService->pageToMarkdown($bookChild)); - } - } - return response()->download('book.zip'); - // TODO: Is not unlinking it a security issue? + return $this->download()->directly($textContent, $bookSlug . '.md'); } }