mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-01-31 16:06:29 +08:00
move zip export into exportservice
This commit is contained in:
parent
ea82c2f61b
commit
e287d965f5
|
@ -8,6 +8,7 @@ use Exception;
|
|||
use SnappyPDF;
|
||||
use League\HTMLToMarkdown\HtmlConverter;
|
||||
use Throwable;
|
||||
use ZipArchive;
|
||||
|
||||
class ExportService
|
||||
{
|
||||
|
@ -271,4 +272,27 @@ class ExportService
|
|||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a book into a zip file.
|
||||
*/
|
||||
public function bookToZip(Book $book): string
|
||||
{
|
||||
// TODO: Is not unlinking the file a security risk?
|
||||
$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) {
|
||||
$filename = $bookChild->name . "/" . $page->name . ".md";
|
||||
$z->addFromString($filename, $this->pageToMarkdown($page));
|
||||
}
|
||||
} else {
|
||||
$z->addFromString($bookChild->name . ".md", $this->pageToMarkdown($bookChild));
|
||||
}
|
||||
}
|
||||
return "book.zip";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ use BookStack\Entities\Managers\BookContents;
|
|||
use BookStack\Entities\ExportService;
|
||||
use BookStack\Entities\Repos\BookRepo;
|
||||
use Throwable;
|
||||
use ZipArchive;
|
||||
|
||||
class BookExportController extends Controller
|
||||
{
|
||||
|
@ -72,20 +71,7 @@ class BookExportController extends Controller
|
|||
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?
|
||||
$filename = $this->exportService->bookToZip($book);
|
||||
return response()->download($filename);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user