Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
86.67% |
26 / 30 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
Validator | |
86.67% |
26 / 30 |
|
50.00% |
1 / 2 |
7.12 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
execute | |
86.21% |
25 / 29 |
|
0.00% |
0 / 1 |
6.09 |
1 | <?php |
2 | |
3 | /** |
4 | * @license MIT |
5 | * @author hazuki3417<hazuki3417@gmail.com> |
6 | * @copyright 2023 hazuki3417 all rights reserved. |
7 | */ |
8 | |
9 | namespace Selen\File; |
10 | |
11 | use Selen\Bool\Util as BoolUtil; |
12 | use Selen\File\Validate\Define; |
13 | use Selen\File\Validate\Model\ValidateResult; |
14 | use Selen\File\Validate\Model\ValidatorResult; |
15 | |
16 | class Validator |
17 | { |
18 | /** @var Validate\Define[] */ |
19 | private array $defines; |
20 | |
21 | public function __construct(Define ...$defines) |
22 | { |
23 | $this->defines = $defines; |
24 | } |
25 | |
26 | public function execute(string ...$filePaths): ValidatorResult |
27 | { |
28 | /** @var Validate\Model\ValidateResult[] */ |
29 | $validResults = []; |
30 | |
31 | foreach ($filePaths as $filePath) { |
32 | $validResult = new ValidateResult(false, $filePath); |
33 | |
34 | if (!\file_exists($filePath)) { |
35 | $validResults[] = $validResult->setMessage('File does not exist.'); |
36 | continue; |
37 | } |
38 | |
39 | if (!\is_file($filePath)) { |
40 | $validResults[] = $validResult->setMessage('Specified path is not a file.'); |
41 | continue; |
42 | } |
43 | $errMessages = []; |
44 | /** |
45 | * バリデーション結果をスタックする変数 |
46 | * サイズ・拡張子制限のバリデーションを合格しているDefine::makeが1つ以上存在する場合は |
47 | * バリデーション合格となる。 |
48 | */ |
49 | $specValidResults = []; |
50 | |
51 | foreach ($this->defines as $define) { |
52 | $specValidResults[] = BoolUtil::allTrue( |
53 | $define->isAllowExtension($filePath), |
54 | $define->isUnderSizeLimit($filePath), |
55 | ); |
56 | $errMessages[] = \sprintf( |
57 | '%s(%s)', |
58 | $define->getLimitSize(), |
59 | \implode('|', $define->getAllowExtensions()) |
60 | ); |
61 | } |
62 | |
63 | if (BoolUtil::allFalse(...$specValidResults)) { |
64 | // バリデーションがすべて不合格だったとき |
65 | $mes = \sprintf( |
66 | 'Invalid file. Maximum file size and supported extensions %s.', |
67 | \implode(', ', $errMessages) |
68 | ); |
69 | $validResults[] = $validResult->setMessage($mes); |
70 | continue; |
71 | } |
72 | // バリデーションが1つでも合格だったときは何もしない |
73 | } |
74 | return new ValidatorResult(...$validResults); |
75 | } |
76 | } |