-
Notifications
You must be signed in to change notification settings - Fork 0
/
ResourceList.php
107 lines (85 loc) · 2.71 KB
/
ResourceList.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
/*
* This file is part of the Klipper package.
*
* (c) François Pluchino <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Klipper\Component\Resource;
use Symfony\Component\Validator\ConstraintViolationListInterface;
/**
* Resource list.
*
* @author François Pluchino <[email protected]>
*/
class ResourceList extends AbstractResourceList
{
public function getIterator(): \Traversable
{
return new \ArrayIterator($this->resources);
}
public function getErrors(): ConstraintViolationListInterface
{
return $this->errors;
}
public function hasErrors(): bool
{
if ($this->getErrors()->count() > 0) {
return true;
}
foreach ($this->resources as $i => $resource) {
if (!$resource->isValid()
&& \in_array($resource->getStatus(), [ResourceStatutes::ERROR, ResourceStatutes::PENDING], true)) {
return true;
}
}
return false;
}
protected function refreshStatus(): void
{
$countPending = 0;
$countCancel = 0;
$countError = 0;
$countSuccess = 0;
foreach ($this->resources as $resource) {
switch ($resource->getStatus()) {
case ResourceStatutes::PENDING:
$countPending++;
break;
case ResourceStatutes::CANCELED:
$countCancel++;
break;
case ResourceStatutes::ERROR:
$countError++;
break;
default:
$countSuccess++;
break;
}
}
$this->status = $this->getStatusValue($countPending, $countCancel, $countError, $countSuccess);
}
/**
* Get the final status value.
*/
private function getStatusValue(int $countPending, int $countCancel, int $countError, int $countSuccess): string
{
$status = ResourceListStatutes::SUCCESSFULLY;
$count = $this->count();
if ($count > 0) {
$status = ResourceListStatutes::MIXED;
if ($count === $countPending) {
$status = ResourceListStatutes::PENDING;
} elseif ($count === $countCancel) {
$status = ResourceListStatutes::CANCEL;
} elseif ($count === $countError) {
$status = ResourceListStatutes::ERROR;
} elseif ($count === $countSuccess) {
$status = ResourceListStatutes::SUCCESSFULLY;
}
}
return $status;
}
}