]> BookStack Code Mirror - bookstack/blob - app/Exports/ZipExports/ZipFileReferenceRule.php
ZIP Imports: Added API examples, finished testing
[bookstack] / app / Exports / ZipExports / ZipFileReferenceRule.php
1 <?php
2
3 namespace BookStack\Exports\ZipExports;
4
5 use Closure;
6 use Illuminate\Contracts\Validation\ValidationRule;
7
8 class ZipFileReferenceRule implements ValidationRule
9 {
10     public function __construct(
11         protected ZipValidationHelper $context,
12         protected array $acceptedMimes,
13     ) {
14     }
15
16
17     /**
18      * @inheritDoc
19      */
20     public function validate(string $attribute, mixed $value, Closure $fail): void
21     {
22         if (!$this->context->zipReader->fileExists($value)) {
23             $fail('validation.zip_file')->translate();
24         }
25
26         if (!empty($this->acceptedMimes)) {
27             $fileMime = $this->context->zipReader->sniffFileMime($value);
28             if (!in_array($fileMime, $this->acceptedMimes)) {
29                 $fail('validation.zip_file_mime')->translate([
30                     'attribute' => $attribute,
31                     'validTypes' => implode(',', $this->acceptedMimes),
32                     'foundType' => $fileMime
33                 ]);
34             }
35         }
36     }
37 }