diff --git a/app/Http/Controllers/Api/BookExportApiController.php b/app/Http/Controllers/Api/BookExportApiController.php index a290d89e7..3d813c4d4 100644 --- a/app/Http/Controllers/Api/BookExportApiController.php +++ b/app/Http/Controllers/Api/BookExportApiController.php @@ -2,20 +2,14 @@ use BookStack\Entities\Models\Book; use BookStack\Entities\Tools\ExportFormatter; -use BookStack\Entities\Repos\BookRepo; use Throwable; class BookExportApiController extends ApiController { - protected $bookRepo; protected $exportFormatter; - /** - * BookExportController constructor. - */ - public function __construct(BookRepo $bookRepo, ExportFormatter $exportFormatter) + public function __construct(ExportFormatter $exportFormatter) { - $this->bookRepo = $bookRepo; $this->exportFormatter = $exportFormatter; } diff --git a/app/Http/Controllers/Api/ChapterExportApiController.php b/app/Http/Controllers/Api/ChapterExportApiController.php index ecbc6af1c..afdfe555d 100644 --- a/app/Http/Controllers/Api/ChapterExportApiController.php +++ b/app/Http/Controllers/Api/ChapterExportApiController.php @@ -7,15 +7,13 @@ use Throwable; class ChapterExportApiController extends ApiController { - protected $chapterRepo; protected $exportFormatter; /** * ChapterExportController constructor. */ - public function __construct(BookRepo $chapterRepo, ExportFormatter $exportFormatter) + public function __construct(ExportFormatter $exportFormatter) { - $this->chapterRepo = $chapterRepo; $this->exportFormatter = $exportFormatter; } diff --git a/app/Http/Controllers/Api/PageExportApiController.php b/app/Http/Controllers/Api/PageExportApiController.php new file mode 100644 index 000000000..7563092cb --- /dev/null +++ b/app/Http/Controllers/Api/PageExportApiController.php @@ -0,0 +1,47 @@ +exportFormatter = $exportFormatter; + } + + /** + * Export a page as a PDF file. + * @throws Throwable + */ + public function exportPdf(int $id) + { + $page = Page::visible()->findOrFail($id); + $pdfContent = $this->exportFormatter->pageToPdf($page); + return $this->downloadResponse($pdfContent, $page->slug . '.pdf'); + } + + /** + * Export a page as a contained HTML file. + * @throws Throwable + */ + public function exportHtml(int $id) + { + $page = Page::visible()->findOrFail($id); + $htmlContent = $this->exportFormatter->pageToContainedHtml($page); + return $this->downloadResponse($htmlContent, $page->slug . '.html'); + } + + /** + * Export a page as a plain text file. + */ + public function exportPlainText(int $id) + { + $page = Page::visible()->findOrFail($id); + $textContent = $this->exportFormatter->pageToPlainText($page); + return $this->downloadResponse($textContent, $page->slug . '.txt'); + } +} diff --git a/routes/api.php b/routes/api.php index d02e2311b..44643d6d4 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,14 +29,18 @@ Route::get('chapters/{id}/export/html', 'ChapterExportApiController@exportHtml') Route::get('chapters/{id}/export/pdf', 'ChapterExportApiController@exportPdf'); Route::get('chapters/{id}/export/plaintext', 'ChapterExportApiController@exportPlainText'); -Route::get('shelves', 'BookshelfApiController@list'); -Route::post('shelves', 'BookshelfApiController@create'); -Route::get('shelves/{id}', 'BookshelfApiController@read'); -Route::put('shelves/{id}', 'BookshelfApiController@update'); -Route::delete('shelves/{id}', 'BookshelfApiController@delete'); - Route::get('pages', 'PageApiController@list'); Route::post('pages', 'PageApiController@create'); Route::get('pages/{id}', 'PageApiController@read'); Route::put('pages/{id}', 'PageApiController@update'); Route::delete('pages/{id}', 'PageApiController@delete'); + +Route::get('pages/{id}/export/html', 'PageExportApiController@exportHtml'); +Route::get('pages/{id}/export/pdf', 'PageExportApiController@exportPdf'); +Route::get('pages/{id}/export/plaintext', 'PageExportApiController@exportPlainText'); + +Route::get('shelves', 'BookshelfApiController@list'); +Route::post('shelves', 'BookshelfApiController@create'); +Route::get('shelves/{id}', 'BookshelfApiController@read'); +Route::put('shelves/{id}', 'BookshelfApiController@update'); +Route::delete('shelves/{id}', 'BookshelfApiController@delete');