mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
move zip export into exportservice
This commit is contained in:
parent
ea82c2f61b
commit
e287d965f5
@ -8,6 +8,7 @@ use Exception;
|
|||||||
use SnappyPDF;
|
use SnappyPDF;
|
||||||
use League\HTMLToMarkdown\HtmlConverter;
|
use League\HTMLToMarkdown\HtmlConverter;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
use ZipArchive;
|
||||||
|
|
||||||
class ExportService
|
class ExportService
|
||||||
{
|
{
|
||||||
@ -271,4 +272,27 @@ class ExportService
|
|||||||
}
|
}
|
||||||
return $text;
|
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\ExportService;
|
||||||
use BookStack\Entities\Repos\BookRepo;
|
use BookStack\Entities\Repos\BookRepo;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use ZipArchive;
|
|
||||||
|
|
||||||
class BookExportController extends Controller
|
class BookExportController extends Controller
|
||||||
{
|
{
|
||||||
@ -72,20 +71,7 @@ class BookExportController extends Controller
|
|||||||
public function zip(string $bookSlug)
|
public function zip(string $bookSlug)
|
||||||
{
|
{
|
||||||
$book = $this->bookRepo->getBySlug($bookSlug);
|
$book = $this->bookRepo->getBySlug($bookSlug);
|
||||||
$z = new ZipArchive();
|
$filename = $this->exportService->bookToZip($book);
|
||||||
$z->open("book.zip", \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
|
return response()->download($filename);
|
||||||
$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?
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user