mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-03-05 10:28:40 +08:00

Tools seems to fit better since the classes were a bit of a mixed bunch and did not always manage. Also simplified the structure of the SlugGenerator class. Also focused EntityContext on shelves and simplified to use session helper.
64 lines
1.9 KiB
PHP
64 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Http\Controllers;
|
|
|
|
use BookStack\Entities\ExportService;
|
|
use BookStack\Entities\Tools\PageContent;
|
|
use BookStack\Entities\Repos\PageRepo;
|
|
use BookStack\Exceptions\NotFoundException;
|
|
use Throwable;
|
|
|
|
class PageExportController extends Controller
|
|
{
|
|
|
|
protected $pageRepo;
|
|
protected $exportService;
|
|
|
|
/**
|
|
* PageExportController constructor.
|
|
*/
|
|
public function __construct(PageRepo $pageRepo, ExportService $exportService)
|
|
{
|
|
$this->pageRepo = $pageRepo;
|
|
$this->exportService = $exportService;
|
|
}
|
|
|
|
/**
|
|
* Exports a page to a PDF.
|
|
* https://github.com/barryvdh/laravel-dompdf
|
|
* @throws NotFoundException
|
|
* @throws Throwable
|
|
*/
|
|
public function pdf(string $bookSlug, string $pageSlug)
|
|
{
|
|
$page = $this->pageRepo->getBySlug($bookSlug, $pageSlug);
|
|
$page->html = (new PageContent($page))->render();
|
|
$pdfContent = $this->exportService->pageToPdf($page);
|
|
return $this->downloadResponse($pdfContent, $pageSlug . '.pdf');
|
|
}
|
|
|
|
/**
|
|
* Export a page to a self-contained HTML file.
|
|
* @throws NotFoundException
|
|
* @throws Throwable
|
|
*/
|
|
public function html(string $bookSlug, string $pageSlug)
|
|
{
|
|
$page = $this->pageRepo->getBySlug($bookSlug, $pageSlug);
|
|
$page->html = (new PageContent($page))->render();
|
|
$containedHtml = $this->exportService->pageToContainedHtml($page);
|
|
return $this->downloadResponse($containedHtml, $pageSlug . '.html');
|
|
}
|
|
|
|
/**
|
|
* Export a page to a simple plaintext .txt file.
|
|
* @throws NotFoundException
|
|
*/
|
|
public function plainText(string $bookSlug, string $pageSlug)
|
|
{
|
|
$page = $this->pageRepo->getBySlug($bookSlug, $pageSlug);
|
|
$pageText = $this->exportService->pageToPlainText($page);
|
|
return $this->downloadResponse($pageText, $pageSlug . '.txt');
|
|
}
|
|
}
|