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