]> BookStack Code Mirror - bookstack/commitdiff
Implement functionality to export a book, along with its pages and chapters, as a...
author[email protected] <redacted>
Fri, 25 Apr 2025 07:15:09 +0000 (12:45 +0530)
committer[email protected] <redacted>
Fri, 25 Apr 2025 07:15:09 +0000 (12:45 +0530)
app/Exports/Controllers/BookExportApiController.php
app/Exports/Controllers/ChapterExportApiController.php
app/Exports/Controllers/PageExportApiController.php

index 164946b0c781d30d472bcda8cfb4066e9b71763d..431afef143db45bccfa14994b040e2a00a1d44fb 100644 (file)
@@ -4,6 +4,7 @@ namespace BookStack\Exports\Controllers;
 
 use BookStack\Entities\Queries\BookQueries;
 use BookStack\Exports\ExportFormatter;
+use BookStack\Exports\ZipExports\ZipExportBuilder;
 use BookStack\Http\ApiController;
 use Throwable;
 
@@ -63,4 +64,19 @@ class BookExportApiController extends ApiController
 
         return $this->download()->directly($markdown, $book->slug . '.md');
     }
-}
+
+    
+    /**
+     * Export a book to a contained ZIP export file.
+     * @throws NotFoundException
+     */
+    public function exportZip(int $id, ZipExportBuilder $builder)
+    {
+        $book = $this->queries->findVisibleByIdOrFail($id);
+        $bookName= $book->getShortName();
+     
+        $zip = $builder->buildForBook($book);
+
+        return $this->download()->streamedFileDirectly($zip, $bookName . '.zip', filesize($zip), true);
+    }
+}
\ No newline at end of file
index 9914e2b7fbed242405e2bd41e0555674eb9f5ca0..58df4c9b0872f2f7b026654834b745e604f7f977 100644 (file)
@@ -4,6 +4,7 @@ namespace BookStack\Exports\Controllers;
 
 use BookStack\Entities\Queries\ChapterQueries;
 use BookStack\Exports\ExportFormatter;
+use BookStack\Exports\ZipExports\ZipExportBuilder;
 use BookStack\Http\ApiController;
 use Throwable;
 
@@ -63,4 +64,13 @@ class ChapterExportApiController extends ApiController
 
         return $this->download()->directly($markdown, $chapter->slug . '.md');
     }
-}
+
+    public function exportZip(int $id, ZipExportBuilder $builder)
+    {
+        $chapter = $this->queries->findVisibleByIdOrFail($id);
+        $chapterName= $chapter->getShortName();
+        $zip = $builder->buildForChapter($chapter);
+
+        return $this->download()->streamedFileDirectly($zip, $chapterName . '.zip', filesize($zip), true);
+    }
+}
\ No newline at end of file
index c6e20b615d2426f92af9afbd03d2cceac492b0d2..ef564da3e5c3c7ebab4773e2108f7a36a476709f 100644 (file)
@@ -4,6 +4,7 @@ namespace BookStack\Exports\Controllers;
 
 use BookStack\Entities\Queries\PageQueries;
 use BookStack\Exports\ExportFormatter;
+use BookStack\Exports\ZipExports\ZipExportBuilder;
 use BookStack\Http\ApiController;
 use Throwable;
 
@@ -63,4 +64,15 @@ class PageExportApiController extends ApiController
 
         return $this->download()->directly($markdown, $page->slug . '.md');
     }
-}
+
+
+
+    public function exportZip(int $id, ZipExportBuilder $builder)
+    {
+        $page = $this->queries->findVisibleByIdOrFail($id);
+        $pageSlug = $page->slug;
+        $zip = $builder->buildForPage($page);
+
+        return $this->download()->streamedFileDirectly($zip, $pageSlug . '.zip', filesize($zip), true);
+    }
+}
\ No newline at end of file