use DomPDF;
use Exception;
use SnappyPDF;
+use League\HTMLToMarkdown\HtmlConverter;
use Throwable;
+use ZipArchive;
class ExportService
{
*/
public function pageToMarkdown(Page $page)
{
- if (property_exists($page, 'markdown') || $page->markdown != '') {
- return "#" . $page->name . "\n\n" . $page->markdown;
+ if (property_exists($page, 'markdown') && $page->markdown != '') {
+ return "# " . $page->name . "\n\n" . $page->markdown;
} else {
- // TODO: Implement this feature.
- return "# Unimplemented Feature\nidk how to turn html into markdown";
+ $converter = new HtmlConverter();
+ return "# " . $page->name . "\n\n" . $converter->convert($page->html);
}
}
*/
public function chapterToMarkdown(Chapter $chapter)
{
- $text = "#" . $chapter->name . "\n\n";
+ $text = "# " . $chapter->name . "\n\n";
$text .= $chapter->description . "\n\n";
foreach ($chapter->pages as $page) {
$text .= $this->pageToMarkdown($page);
public function bookToMarkdown(Book $book): string
{
$bookTree = (new BookContents($book))->getTree(false, true);
- $text = "#" . $book->name . "\n\n";
+ $text = "# " . $book->name . "\n\n";
foreach ($bookTree as $bookChild) {
if ($bookChild->isA('chapter')) {
$text .= $this->chapterToMarkdown($bookChild);
}
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";
+ }
}