]> BookStack Code Mirror - bookstack/blob - app/Exports/ZipExports/Models/ZipExportBook.php
ZIP Exports: Added core logic for books/chapters
[bookstack] / app / Exports / ZipExports / Models / ZipExportBook.php
1 <?php
2
3 namespace BookStack\Exports\ZipExports\Models;
4
5 use BookStack\Entities\Models\Book;
6 use BookStack\Entities\Models\Chapter;
7 use BookStack\Entities\Models\Page;
8 use BookStack\Exports\ZipExports\ZipExportFiles;
9
10 class ZipExportBook extends ZipExportModel
11 {
12     public ?int $id = null;
13     public string $name;
14     public ?string $description_html = null;
15     public ?string $cover = null;
16     /** @var ZipExportChapter[] */
17     public array $chapters = [];
18     /** @var ZipExportPage[] */
19     public array $pages = [];
20     /** @var ZipExportTag[] */
21     public array $tags = [];
22
23     public static function fromModel(Book $model, ZipExportFiles $files): self
24     {
25         $instance = new self();
26         $instance->id = $model->id;
27         $instance->name = $model->name;
28         $instance->description_html = $model->descriptionHtml();
29
30         if ($model->cover) {
31             $instance->cover = $files->referenceForImage($model->cover);
32         }
33
34         $instance->tags = ZipExportTag::fromModelArray($model->tags()->get()->all());
35
36         $chapters = [];
37         $pages = [];
38
39         $children = $model->getDirectVisibleChildren()->all();
40         foreach ($children as $child) {
41             if ($child instanceof Chapter) {
42                 $chapters[] = $child;
43             } else if ($child instanceof Page) {
44                 $pages[] = $child;
45             }
46         }
47
48         $instance->pages = ZipExportPage::fromModelArray($pages, $files);
49         $instance->chapters = ZipExportChapter::fromModelArray($chapters, $files);
50
51         return $instance;
52     }
53 }