Skip to content

Commit bd237bb

Browse files
Add split option when export bookshelf, in split zip will download and in zip all the books of a bookshelf will there in format they select, also add require text in multiple languages
1 parent ea6161a commit bd237bb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+213
-16
lines changed

app/Entities/Controllers/BookshelfExportController.php

+76-12
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
namespace BookStack\Entities\Controllers;
44

5+
use BookStack\Entities\Models\Book;
6+
use BookStack\Entities\Models\Bookshelf;
57
use BookStack\Entities\Queries\BookshelfQueries;
68
use BookStack\Entities\Tools\ExportFormatter;
79
use BookStack\Http\Controller;
10+
use BookStack\Http\Request;
11+
use Illuminate\Support\Facades\Response;
812
use Throwable;
913

1014
class BookshelfExportController extends Controller
@@ -21,46 +25,106 @@ public function __construct(
2125
*
2226
* @throws Throwable
2327
*/
24-
public function pdf(string $bookshelfSlug)
28+
public function pdf(Request $request, string $bookshelfSlug)
2529
{
30+
dd($request->query());
2631
$bookshelf = $this->queries->findVisibleBySlugOrFail($bookshelfSlug);
27-
$pdfContent = $this->exportFormatter->bookshelfToPdf($bookshelf);
32+
if ($request['split'] === true) {
33+
return $this->downloadAllInZip($bookshelf, 'pdf');
34+
} else {
35+
$htmlContent = $this->exportFormatter->bookshelfToPdf($bookshelf);
2836

29-
return $this->download()->directly($pdfContent, $bookshelfSlug . '.pdf');
37+
return $this->download()->directly($htmlContent, $bookshelfSlug . '.pdf');
38+
}
3039
}
3140

3241
/**
3342
* Export a book as a contained HTML file.
3443
*
3544
* @throws Throwable
3645
*/
37-
public function html(string $bookshelfSlug)
46+
public function html(Request $request, string $bookshelfSlug)
3847
{
3948
$bookshelf = $this->queries->findVisibleBySlugOrFail($bookshelfSlug);
40-
$htmlContent = $this->exportFormatter->bookshelfToContainedHtml($bookshelf);
49+
if ($request['split'] === true) {
50+
return $this->downloadAllInZip($bookshelf, 'html');
51+
} else {
52+
$htmlContent = $this->exportFormatter->bookshelfToContainedHtml($bookshelf);
4153

42-
return $this->download()->directly($htmlContent, $bookshelfSlug . '.html');
54+
return $this->download()->directly($htmlContent, $bookshelfSlug . '.html');
55+
}
4356
}
4457

4558
/**
4659
* Export a book as a plain text file.
4760
*/
48-
public function plainText(string $bookshelfSlug)
61+
public function plainText(Request $request, string $bookshelfSlug)
4962
{
5063
$bookshelf = $this->queries->findVisibleBySlugOrFail($bookshelfSlug);
51-
$textContent = $this->exportFormatter->bookshelfToPlainText($bookshelf);
64+
if ($request['split'] === true) {
65+
return $this->downloadAllInZip($bookshelf, 'txt');
66+
} else {
67+
$htmlContent = $this->exportFormatter->bookshelfToPlainText($bookshelf);
5268

53-
return $this->download()->directly($textContent, $bookshelfSlug . '.txt');
69+
return $this->download()->directly($htmlContent, $bookshelfSlug . '.txt');
70+
}
5471
}
5572

5673
/**
5774
* Export a book as a markdown file.
5875
*/
59-
public function markdown(string $bookshelfSlug)
76+
public function markdown(Request $request, string $bookshelfSlug)
6077
{
6178
$bookshelf = $this->queries->findVisibleBySlugOrFail($bookshelfSlug);
62-
$textContent = $this->exportFormatter->bookshelfToMarkdown($bookshelf);
79+
if ($request['split'] === true) {
80+
return $this->downloadAllInZip($bookshelf, 'md');
81+
} else {
82+
$htmlContent = $this->exportFormatter->bookshelfToMarkdown($bookshelf);
6383

64-
return $this->download()->directly($textContent, $bookshelfSlug . '.md');
84+
return $this->download()->directly($htmlContent, $bookshelfSlug . '.md');
85+
}
86+
}
87+
88+
public function downloadAllInZip(Bookshelf $bookshelf, string $type)
89+
{
90+
$bookshelf->load('books');
91+
92+
$zip = new \ZipArchive();
93+
94+
$tempFilePath = storage_path('app/public/' . $bookshelf->slug . '.zip');
95+
if ($zip->open($tempFilePath, \ZipArchive::CREATE) === true) {
96+
foreach ($bookshelf->books as $book) {
97+
$pdfContent = $this->getContentBasedOntype($book, $type);
98+
$zip->addFromString($book->slug, $pdfContent);
99+
}
100+
$zip->close();
101+
102+
return Response::download($tempFilePath)->deleteFileAfterSend(true);
103+
}
104+
}
105+
106+
public function getContentBasedOntype(Book $book, string $type)
107+
{
108+
switch ($type) {
109+
case 'pdf':
110+
return $this->exportFormatter->bookToPdf($book);
111+
break;
112+
113+
114+
case 'html':
115+
return $this->exportFormatter->bookToContainedHtml($book);
116+
break;
117+
118+
case 'txt':
119+
return $this->exportFormatter->bookToPlainText($book);
120+
break;
121+
122+
case 'md':
123+
return $this->exportFormatter->bookToMarkdown($book);
124+
break;
125+
default:
126+
return "";
127+
break;
128+
}
65129
}
66130
}

lang/ar/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'غير نشط',
8383
'never' => 'مطلقاً',
8484
'none' => 'لا شَيْء',
85+
'multiple_or_single' => "متعدد أو واحد",
86+
'multiple_or_single_description' => "هل تريد تنزيل الملفات في ملف واحد أو أرشيف Zip (ملفات متعددة)",
8587

8688
// Header
8789
'homepage' => 'الصفحة الرئيسية',

lang/bg/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Неактивен',
8383
'never' => 'Никога',
8484
'none' => 'Нищо',
85+
'multiple_or_single' => "Множество или единично",
86+
'multiple_or_single_description' => "Искате ли да изтеглите файлове в един файл или ZIP архив (множество файлове)",
8587

8688
// Header
8789
'homepage' => 'Начална страница',

lang/bs/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactive',
8383
'never' => 'Never',
8484
'none' => 'None',
85+
'multiple_or_single' => "Više ili jedno",
86+
'multiple_or_single_description' => "Želite li preuzeti datoteke u jednoj datoteci ili ZIP arhivu (više datoteka)",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/ca/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactiu',
8383
'never' => 'Mai',
8484
'none' => 'Cap',
85+
'multiple_or_single' => "Múltiple o únic",
86+
'multiple_or_single_description' => "Voleu descarregar fitxers en un únic fitxer o en un arxiu ZIP (diversos fitxers)",
8587

8688
// Header
8789
'homepage' => 'Pàgina d’inici',

lang/cs/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Neaktivní',
8383
'never' => 'Nikdy',
8484
'none' => 'Žádná',
85+
'multiple_or_single' => "Více nebo jediné",
86+
'multiple_or_single_description' => "Chcete stáhnout soubory do jednoho souboru nebo ZIP archivu (více souborů)",
8587

8688
// Header
8789
'homepage' => 'Domovská stránka',

lang/cy/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Anweithredol',
8383
'never' => 'Byth',
8484
'none' => 'Dim un',
85+
'multiple_or_single' => "Lluosog neu Unigol",
86+
'multiple_or_single_description' => "Eisiau lawrlwytho ffeiliau mewn Un Ffeil neu Archif ZIP (Ffeiliau Lluosog)",
8587

8688
// Header
8789
'homepage' => 'Tudalen cartref',

lang/da/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktiv',
8383
'never' => 'Aldrig',
8484
'none' => 'Ingen',
85+
'multiple_or_single' => "Flere eller enkelt",
86+
'multiple_or_single_description' => "Vil du downloade filer i en enkelt fil eller en ZIP-arkiv (flere filer)",
8587

8688
// Header
8789
'homepage' => 'Forside',

lang/de/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktiv',
8383
'never' => 'Niemals',
8484
'none' => 'Nichts',
85+
'multiple_or_single' => "Mehrfach oder Einzel",
86+
'multiple_or_single_description' => "Möchten Sie Dateien in einer einzelnen Datei oder einem ZIP-Archiv (mehrere Dateien) herunterladen?",
8587

8688
// Header
8789
'homepage' => 'Startseite',

lang/de_informal/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktiv',
8383
'never' => 'Niemals',
8484
'none' => 'Keine',
85+
'multiple_or_single' => "Mehrfach oder Einzel",
86+
'multiple_or_single_description' => "Möchtest du Dateien in einer einzelnen Datei oder einem ZIP-Archiv (mehrere Dateien) herunterladen?",
8587

8688
// Header
8789
'homepage' => 'Startseite',

lang/el/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Αδρανής',
8383
'never' => 'Ποτέ',
8484
'none' => 'Κανένας',
85+
'multiple_or_single' => "Πολλαπλές ή Μονές",
86+
'multiple_or_single_description' => "Θέλετε να κατεβάσετε αρχεία σε ένα μόνο αρχείο ή σε ZIP αρχείο (πολλαπλά αρχεία)",
8587

8688
// Header
8789
'homepage' => 'Αρχική σελίδα',

lang/en/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactive',
8383
'never' => 'Never',
8484
'none' => 'None',
85+
'multiple_or_single' => "Multiple or Single",
86+
'multiple_or_single_description' => "Want to Download Files in Single File or Zip Archive(Multiple Files)",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/es/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactive',
8383
'never' => 'Nunca',
8484
'none' => 'Ninguno',
85+
'multiple_or_single' => "Múltiple o único",
86+
'multiple_or_single_description' => "¿Deseas descargar archivos en un solo archivo o en un archivo ZIP (múltiples archivos)?",
8587

8688
// Header
8789
'homepage' => 'Página de Inicio',

lang/es_AR/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactivo',
8383
'never' => 'Nunca',
8484
'none' => 'Ninguno',
85+
'multiple_or_single' => "Múltiple o único",
86+
'multiple_or_single_description' => "¿Deseas descargar archivos en un solo archivo o en un archivo ZIP (múltiples archivos)?",
8587

8688
// Header
8789
'homepage' => 'Página de Inicio',

lang/et/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Mitteaktiivne',
8383
'never' => 'Mitte kunagi',
8484
'none' => 'Puudub',
85+
'multiple_or_single' => "Mitu või üksik",
86+
'multiple_or_single_description' => "Kas soovite failid alla laadida ühte faili või ZIP-arhiivi (mitu faili)?",
8587

8688
// Header
8789
'homepage' => 'Avaleht',

lang/eu/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktibo',
8383
'never' => 'Inoiz ez',
8484
'none' => 'Bat ere ez',
85+
'multiple_or_single' => "Anitz edo bakar",
86+
'multiple_or_single_description' => "Fitxategiak fitxategi bakar batean edo ZIP artxibo batean (fitxategi anitzak) deskargatu nahi dituzu?",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/fa/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'غیر فعال',
8383
'never' => 'هرگز',
8484
'none' => 'هیچکدام',
85+
'multiple_or_single' => "چندگانه یا تکی",
86+
'multiple_or_single_description' => "آیا می‌خواهید فایل‌ها را در یک فایل واحد یا آرشیو ZIP (چندین فایل) دانلود کنید؟",
8587

8688
// Header
8789
'homepage' => 'صفحه اصلی',

lang/fi/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Ei aktiivinen',
8383
'never' => 'Ei koskaan',
8484
'none' => 'Ei mitään',
85+
'multiple_or_single' => "Useita tai Yksittäisiä",
86+
'multiple_or_single_description' => "Haluatko ladata tiedostot yhteen tiedostoon tai ZIP-arkistoon (useita tiedostoja)?",
8587

8688
// Header
8789
'homepage' => 'Kotisivu',

lang/fr/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactif',
8383
'never' => 'Jamais',
8484
'none' => 'Aucun',
85+
'multiple_or_single' => "Multiple ou Unique",
86+
'multiple_or_single_description' => "Voulez-vous télécharger les fichiers dans un fichier unique ou une archive ZIP (fichiers multiples)?",
8587

8688
// Header
8789
'homepage' => 'Accueil',

lang/he/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'לא פעיל',
8383
'never' => 'אף פעם',
8484
'none' => 'ללא',
85+
'multiple_or_single' => "מרובה או יחיד",
86+
'multiple_or_single_description' => "האם ברצונך להוריד קבצים בקובץ יחיד או בארכיון ZIP (קבצים מרובים)?",
8587

8688
// Header
8789
'homepage' => 'דף הבית',

lang/hr/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Neaktivno',
8383
'never' => 'Nikada',
8484
'none' => 'Ništa',
85+
'multiple_or_single' => "Višestruko ili pojedinačno",
86+
'multiple_or_single_description' => "Želite li preuzeti datoteke u jednu datoteku ili ZIP arhivu (više datoteka)?",
8587

8688
// Header
8789
'homepage' => 'Naslovna Stranica',

lang/hu/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktív',
8383
'never' => 'Soha',
8484
'none' => 'Egyik sem',
85+
'multiple_or_single' => "Több vagy egyetlen",
86+
'multiple_or_single_description' => "Szeretné a fájlokat egyetlen fájlba vagy ZIP archívumba (több fájl) letölteni?",
8587

8688
// Header
8789
'homepage' => 'Kezdőlap',

lang/id/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactive',
8383
'never' => 'Never',
8484
'none' => 'None',
85+
'multiple_or_single' => "Banyak atau Tunggal",
86+
'multiple_or_single_description' => "Ingin mengunduh file dalam satu file atau arsip ZIP (beberapa file)?",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/it/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inattivo',
8383
'never' => 'Mai',
8484
'none' => 'Nessuno',
85+
'multiple_or_single' => "Multiplo o Singolo",
86+
'multiple_or_single_description' => "Vuoi scaricare i file in un unico file o in un archivio ZIP (più file)?",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/ja/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => '無効',
8383
'never' => '該当なし',
8484
'none' => 'なし',
85+
'multiple_or_single' => "複数または単一",
86+
'multiple_or_single_description' => "ファイルを単一ファイルまたはZIPアーカイブ(複数ファイル)でダウンロードしますか?",
8587

8688
// Header
8789
'homepage' => 'ホームページ',

lang/ko/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => '비활성',
8383
'never' => '안 함',
8484
'none' => '없음',
85+
'multiple_or_single' => "다중 또는 단일",
86+
'multiple_or_single_description' => "파일을 단일 파일 또는 ZIP 아카이브(다중 파일)로 다운로드하시겠습니까?",
8587

8688
// Header
8789
'homepage' => '홈페이지',

lang/lt/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactive',
8383
'never' => 'Never',
8484
'none' => 'None',
85+
'multiple_or_single' => "Keli arba vienas",
86+
'multiple_or_single_description' => "Ar norite atsisiųsti failus į vieną failą arba ZIP archyvą (kelis failus)?",
8587

8688
// Header
8789
'homepage' => 'Homepage',

lang/lv/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Neaktīvs',
8383
'never' => 'Nekad',
8484
'none' => 'Neviens',
85+
'multiple_or_single' => "Vairāki vai viens",
86+
'multiple_or_single_description' => "Vai vēlaties lejupielādēt failus vienā failā vai ZIP arhīvā (vairākos failos)?",
8587

8688
// Header
8789
'homepage' => 'Sākumlapa',

lang/nb/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inaktiv',
8383
'never' => 'Aldri',
8484
'none' => 'Ingen',
85+
'multiple_or_single' => "Flere eller Enkelt",
86+
'multiple_or_single_description' => "Ønsker du å laste ned filer i en enkelt fil eller en ZIP-arkiv (flere filer)?",
8587

8688
// Header
8789
'homepage' => 'Hjemmeside',

lang/nl/common.php

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
'status_inactive' => 'Inactief',
8383
'never' => 'Nooit',
8484
'none' => 'Geen',
85+
'multiple_or_single' => "Meerdere of Enkele",
86+
'multiple_or_single_description' => "Wilt u bestanden downloaden in één bestand of in een ZIP-archief (meerdere bestanden)?",
8587

8688
// Header
8789
'homepage' => 'Startpagina',

0 commit comments

Comments
 (0)