mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-26 10:13:38 +08:00
support exporting books as zip files
This commit is contained in:
parent
a7d9646b19
commit
ea82c2f61b
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
namespace BookStack\Http\Controllers;
|
namespace BookStack\Http\Controllers;
|
||||||
|
|
||||||
|
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
|
||||||
{
|
{
|
||||||
|
@ -59,9 +61,31 @@ class BookExportController extends Controller
|
||||||
*/
|
*/
|
||||||
public function markdown(string $bookSlug)
|
public function markdown(string $bookSlug)
|
||||||
{
|
{
|
||||||
// TODO: This should probably export to a zip file.
|
|
||||||
$book = $this->bookRepo->getBySlug($bookSlug);
|
$book = $this->bookRepo->getBySlug($bookSlug);
|
||||||
$textContent = $this->exportService->bookToMarkdown($book);
|
$textContent = $this->exportService->bookToMarkdown($book);
|
||||||
return $this->downloadResponse($textContent, $bookSlug . '.md');
|
return $this->downloadResponse($textContent, $bookSlug . '.md');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export a book as a zip file, made of markdown files.
|
||||||
|
*/
|
||||||
|
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?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,9 @@ ENV APACHE_DOCUMENT_ROOT /app/public
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN apt-get update -y \
|
RUN apt-get update -y \
|
||||||
&& apt-get install -y git zip unzip libtidy-dev libpng-dev libldap2-dev libxml++2.6-dev wait-for-it \
|
&& apt-get install -y git zip unzip libtidy-dev libpng-dev libldap2-dev libxml++2.6-dev wait-for-it libzip-dev \
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
|
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
|
||||||
&& docker-php-ext-install pdo pdo_mysql tidy dom xml mbstring gd ldap \
|
&& docker-php-ext-install pdo pdo_mysql tidy dom xml mbstring gd ldap zip \
|
||||||
&& a2enmod rewrite \
|
&& a2enmod rewrite \
|
||||||
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
|
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
|
||||||
&& sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
|
&& sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
|
||||||
|
|
|
@ -48,6 +48,7 @@ Route::group(['middleware' => 'auth'], function () {
|
||||||
Route::get('/{bookSlug}/export/html', 'BookExportController@html');
|
Route::get('/{bookSlug}/export/html', 'BookExportController@html');
|
||||||
Route::get('/{bookSlug}/export/pdf', 'BookExportController@pdf');
|
Route::get('/{bookSlug}/export/pdf', 'BookExportController@pdf');
|
||||||
Route::get('/{bookSlug}/export/markdown', 'BookExportController@markdown');
|
Route::get('/{bookSlug}/export/markdown', 'BookExportController@markdown');
|
||||||
|
Route::get('/{bookSlug}/export/zip', 'BookExportController@zip');
|
||||||
Route::get('/{bookSlug}/export/plaintext', 'BookExportController@plainText');
|
Route::get('/{bookSlug}/export/plaintext', 'BookExportController@plainText');
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
|
|
Loading…
Reference in New Issue
Block a user