1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-06-17 10:22:03 +03:00
Files
.github
app
Actions
Api
Auth
Config
Console
Entities
Exceptions
Facades
Http
Controllers
Api
Auth
Images
AttachmentController.php
AuditLogController.php
BookController.php
BookExportController.php
BookSortController.php
BookshelfController.php
ChapterController.php
ChapterExportController.php
CommentController.php
Controller.php
FavouriteController.php
HomeController.php
MaintenanceController.php
PageController.php
PageExportController.php
PageRevisionController.php
PageTemplateController.php
RecycleBinController.php
RoleController.php
SearchController.php
SettingController.php
StatusController.php
TagController.php
UserApiTokenController.php
UserController.php
UserProfileController.php
UserSearchController.php
WebhookController.php
Middleware
Requests
Responses
Kernel.php
Request.php
Interfaces
Notifications
Providers
Settings
Theming
Traits
Translation
Uploads
Util
Application.php
Model.php
helpers.php
bootstrap
database
dev
public
resources
routes
storage
tests
themes
.env.example
.env.example.complete
.gitattributes
.gitignore
LICENSE
artisan
composer.json
composer.lock
crowdin.yml
docker-compose.yml
package-lock.json
package.json
phpstan.neon.dist
phpunit.xml
readme.md
server.php
version
bookstack/app/Http/Controllers/ChapterExportController.php
Dan Brown abc283fc64 Extracted download response logic to its own class
Cleans up base controller and groups up download & streaming logic for
potential future easier addition of range request support.
2022-06-08 23:50:42 +01:00

79 lines
2.3 KiB
PHP

<?php
namespace BookStack\Http\Controllers;
use BookStack\Entities\Repos\ChapterRepo;
use BookStack\Entities\Tools\ExportFormatter;
use BookStack\Exceptions\NotFoundException;
use Throwable;
class ChapterExportController extends Controller
{
protected $chapterRepo;
protected $exportFormatter;
/**
* ChapterExportController constructor.
*/
public function __construct(ChapterRepo $chapterRepo, ExportFormatter $exportFormatter)
{
$this->chapterRepo = $chapterRepo;
$this->exportFormatter = $exportFormatter;
$this->middleware('can:content-export');
}
/**
* Exports a chapter to pdf.
*
* @throws NotFoundException
* @throws Throwable
*/
public function pdf(string $bookSlug, string $chapterSlug)
{
$chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
$pdfContent = $this->exportFormatter->chapterToPdf($chapter);
return $this->download()->directly($pdfContent, $chapterSlug . '.pdf');
}
/**
* Export a chapter to a self-contained HTML file.
*
* @throws NotFoundException
* @throws Throwable
*/
public function html(string $bookSlug, string $chapterSlug)
{
$chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
$containedHtml = $this->exportFormatter->chapterToContainedHtml($chapter);
return $this->download()->directly($containedHtml, $chapterSlug . '.html');
}
/**
* Export a chapter to a simple plaintext .txt file.
*
* @throws NotFoundException
*/
public function plainText(string $bookSlug, string $chapterSlug)
{
$chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
$chapterText = $this->exportFormatter->chapterToPlainText($chapter);
return $this->download()->directly($chapterText, $chapterSlug . '.txt');
}
/**
* Export a chapter to a simple markdown file.
*
* @throws NotFoundException
*/
public function markdown(string $bookSlug, string $chapterSlug)
{
$chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
$chapterText = $this->exportFormatter->chapterToMarkdown($chapter);
return $this->download()->directly($chapterText, $chapterSlug . '.md');
}
}