]> BookStack Code Mirror - bookstack/blob - app/Exports/ZipExports/ZipExportValidator.php
Merge branch 'fix/markdown-export' into development
[bookstack] / app / Exports / ZipExports / ZipExportValidator.php
1 <?php
2
3 namespace BookStack\Exports\ZipExports;
4
5 use BookStack\Exceptions\ZipExportException;
6 use BookStack\Exports\ZipExports\Models\ZipExportBook;
7 use BookStack\Exports\ZipExports\Models\ZipExportChapter;
8 use BookStack\Exports\ZipExports\Models\ZipExportPage;
9
10 class ZipExportValidator
11 {
12     public function __construct(
13         protected ZipExportReader $reader,
14     ) {
15     }
16
17     public function validate(): array
18     {
19         try {
20             $importData = $this->reader->readData();
21         } catch (ZipExportException $exception) {
22             return ['format' => $exception->getMessage()];
23         }
24
25         $helper = new ZipValidationHelper($this->reader);
26
27         if (isset($importData['book'])) {
28             $modelErrors = ZipExportBook::validate($helper, $importData['book']);
29             $keyPrefix = 'book';
30         } else if (isset($importData['chapter'])) {
31             $modelErrors = ZipExportChapter::validate($helper, $importData['chapter']);
32             $keyPrefix = 'chapter';
33         } else if (isset($importData['page'])) {
34             $modelErrors = ZipExportPage::validate($helper, $importData['page']);
35             $keyPrefix = 'page';
36         } else {
37             return ['format' => trans('errors.import_zip_no_data')];
38         }
39
40         return $this->flattenModelErrors($modelErrors, $keyPrefix);
41     }
42
43     protected function flattenModelErrors(array $errors, string $keyPrefix): array
44     {
45         $flattened = [];
46
47         foreach ($errors as $key => $error) {
48             if (is_array($error)) {
49                 $flattened = array_merge($flattened, $this->flattenModelErrors($error, $keyPrefix . '.' . $key));
50             } else {
51                 $flattened[$keyPrefix . '.' . $key] = $error;
52             }
53         }
54
55         return $flattened;
56     }
57 }