3 namespace BookStack\Exports\ZipExports\Models;
5 use BookStack\Entities\Models\Chapter;
6 use BookStack\Entities\Models\Page;
7 use BookStack\Exports\ZipExports\ZipExportFiles;
8 use BookStack\Exports\ZipExports\ZipValidationHelper;
10 class ZipExportChapter extends ZipExportModel
12 public ?int $id = null;
14 public ?string $description_html = null;
15 public ?int $priority = null;
16 /** @var ZipExportPage[] */
17 public array $pages = [];
18 /** @var ZipExportTag[] */
19 public array $tags = [];
21 public static function fromModel(Chapter $model, ZipExportFiles $files): self
23 $instance = new self();
24 $instance->id = $model->id;
25 $instance->name = $model->name;
26 $instance->description_html = $model->descriptionHtml();
27 $instance->priority = $model->priority;
28 $instance->tags = ZipExportTag::fromModelArray($model->tags()->get()->all());
30 $pages = $model->getVisiblePages()->filter(fn (Page $page) => !$page->draft)->all();
31 $instance->pages = ZipExportPage::fromModelArray($pages, $files);
37 * @param Chapter[] $chapterArray
40 public static function fromModelArray(array $chapterArray, ZipExportFiles $files): array
42 return array_values(array_map(function (Chapter $chapter) use ($files) {
43 return self::fromModel($chapter, $files);
47 public static function validate(ZipValidationHelper $context, array $data): array
50 'id' => ['nullable', 'int'],
51 'name' => ['required', 'string', 'min:1'],
52 'description_html' => ['nullable', 'string'],
53 'priority' => ['nullable', 'int'],
58 $errors = $context->validateData($data, $rules);
59 $errors['tags'] = $context->validateRelations($data['tags'] ?? [], ZipExportTag::class);
60 $errors['pages'] = $context->validateRelations($data['pages'] ?? [], ZipExportPage::class);