@@ -70,18 +70,18 @@ discard block |
||
| 70 | 70 | protected function buildMap(ReflectionEntity $filter): array |
| 71 | 71 | { |
| 72 | 72 | $schema = $filter->getProperty('schema', true); |
| 73 | - if (empty($schema)) { |
|
| 73 | + if (empty($schema)){ |
|
| 74 | 74 | throw new SchemaException("Filter `{$filter->getName()}` does not define any schema"); |
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | $result = []; |
| 78 | - foreach ($schema as $field => $definition) { |
|
| 78 | + foreach ($schema as $field => $definition){ |
|
| 79 | 79 | $optional = false; |
| 80 | 80 | |
| 81 | 81 | // short definition |
| 82 | - if (is_string($definition)) { |
|
| 82 | + if (is_string($definition)){ |
|
| 83 | 83 | // simple scalar field definition |
| 84 | - if (!class_exists($definition)) { |
|
| 84 | + if (!class_exists($definition)){ |
|
| 85 | 85 | [$source, $origin] = $this->parseDefinition($field, $definition); |
| 86 | 86 | $result[$field] = [ |
| 87 | 87 | FilterProvider::SOURCE => $source, |
@@ -102,25 +102,25 @@ discard block |
||
| 102 | 102 | continue; |
| 103 | 103 | } |
| 104 | 104 | |
| 105 | - if (!is_array($definition) || count($definition) === 0) { |
|
| 105 | + if (!is_array($definition) || count($definition) === 0){ |
|
| 106 | 106 | throw new SchemaException( |
| 107 | 107 | "Invalid schema definition at `{$filter->getName()}`->`{$field}`" |
| 108 | 108 | ); |
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | // complex definition |
| 112 | - if (!empty($definition[self::ORIGIN])) { |
|
| 112 | + if (!empty($definition[self::ORIGIN])){ |
|
| 113 | 113 | $origin = $definition[self::ORIGIN]; |
| 114 | 114 | |
| 115 | 115 | // [class, 'data:something.*'] vs [class, 'data:something'] |
| 116 | 116 | $iterate = strpos($origin, '.*') !== false || !empty($definition[self::ITERATE]); |
| 117 | 117 | $origin = rtrim($origin, '.*'); |
| 118 | - } else { |
|
| 118 | + }else{ |
|
| 119 | 119 | $origin = $field; |
| 120 | 120 | $iterate = true; |
| 121 | 121 | } |
| 122 | 122 | |
| 123 | - if (!empty($definition[self::OPTIONAL]) && $definition[self::OPTIONAL]) { |
|
| 123 | + if (!empty($definition[self::OPTIONAL]) && $definition[self::OPTIONAL]){ |
|
| 124 | 124 | $optional = true; |
| 125 | 125 | } |
| 126 | 126 | |
@@ -133,7 +133,7 @@ discard block |
||
| 133 | 133 | FilterProvider::OPTIONAL => $optional, |
| 134 | 134 | ]; |
| 135 | 135 | |
| 136 | - if ($iterate) { |
|
| 136 | + if ($iterate){ |
|
| 137 | 137 | [$source, $origin] = $this->parseDefinition($field, $definition[self::ITERATE] ?? $origin); |
| 138 | 138 | |
| 139 | 139 | $map[FilterProvider::ITERATE_SOURCE] = $source; |
@@ -159,7 +159,7 @@ discard block |
||
| 159 | 159 | */ |
| 160 | 160 | private function parseDefinition(string $field, string $definition): array |
| 161 | 161 | { |
| 162 | - if (strpos($definition, ':') === false) { |
|
| 162 | + if (strpos($definition, ':') === false){ |
|
| 163 | 163 | return ['data', $definition ?? $field]; |
| 164 | 164 | } |
| 165 | 165 | |
@@ -70,18 +70,22 @@ discard block |
||
| 70 | 70 | protected function buildMap(ReflectionEntity $filter): array |
| 71 | 71 | { |
| 72 | 72 | $schema = $filter->getProperty('schema', true); |
| 73 | - if (empty($schema)) { |
|
| 73 | + if (empty($schema)) |
|
| 74 | + { |
|
| 74 | 75 | throw new SchemaException("Filter `{$filter->getName()}` does not define any schema"); |
| 75 | 76 | } |
| 76 | 77 | |
| 77 | 78 | $result = []; |
| 78 | - foreach ($schema as $field => $definition) { |
|
| 79 | + foreach ($schema as $field => $definition) |
|
| 80 | + { |
|
| 79 | 81 | $optional = false; |
| 80 | 82 | |
| 81 | 83 | // short definition |
| 82 | - if (is_string($definition)) { |
|
| 84 | + if (is_string($definition)) |
|
| 85 | + { |
|
| 83 | 86 | // simple scalar field definition |
| 84 | - if (!class_exists($definition)) { |
|
| 87 | + if (!class_exists($definition)) |
|
| 88 | + { |
|
| 85 | 89 | [$source, $origin] = $this->parseDefinition($field, $definition); |
| 86 | 90 | $result[$field] = [ |
| 87 | 91 | FilterProvider::SOURCE => $source, |
@@ -102,25 +106,30 @@ discard block |
||
| 102 | 106 | continue; |
| 103 | 107 | } |
| 104 | 108 | |
| 105 | - if (!is_array($definition) || count($definition) === 0) { |
|
| 109 | + if (!is_array($definition) || count($definition) === 0) |
|
| 110 | + { |
|
| 106 | 111 | throw new SchemaException( |
| 107 | 112 | "Invalid schema definition at `{$filter->getName()}`->`{$field}`" |
| 108 | 113 | ); |
| 109 | 114 | } |
| 110 | 115 | |
| 111 | 116 | // complex definition |
| 112 | - if (!empty($definition[self::ORIGIN])) { |
|
| 117 | + if (!empty($definition[self::ORIGIN])) |
|
| 118 | + { |
|
| 113 | 119 | $origin = $definition[self::ORIGIN]; |
| 114 | 120 | |
| 115 | 121 | // [class, 'data:something.*'] vs [class, 'data:something'] |
| 116 | 122 | $iterate = strpos($origin, '.*') !== false || !empty($definition[self::ITERATE]); |
| 117 | 123 | $origin = rtrim($origin, '.*'); |
| 118 | - } else { |
|
| 124 | + } |
|
| 125 | + else |
|
| 126 | + { |
|
| 119 | 127 | $origin = $field; |
| 120 | 128 | $iterate = true; |
| 121 | 129 | } |
| 122 | 130 | |
| 123 | - if (!empty($definition[self::OPTIONAL]) && $definition[self::OPTIONAL]) { |
|
| 131 | + if (!empty($definition[self::OPTIONAL]) && $definition[self::OPTIONAL]) |
|
| 132 | + { |
|
| 124 | 133 | $optional = true; |
| 125 | 134 | } |
| 126 | 135 | |
@@ -133,7 +142,8 @@ discard block |
||
| 133 | 142 | FilterProvider::OPTIONAL => $optional, |
| 134 | 143 | ]; |
| 135 | 144 | |
| 136 | - if ($iterate) { |
|
| 145 | + if ($iterate) |
|
| 146 | + { |
|
| 137 | 147 | [$source, $origin] = $this->parseDefinition($field, $definition[self::ITERATE] ?? $origin); |
| 138 | 148 | |
| 139 | 149 | $map[FilterProvider::ITERATE_SOURCE] = $source; |
@@ -159,7 +169,8 @@ discard block |
||
| 159 | 169 | */ |
| 160 | 170 | private function parseDefinition(string $field, string $definition): array |
| 161 | 171 | { |
| 162 | - if (strpos($definition, ':') === false) { |
|
| 172 | + if (strpos($definition, ':') === false) |
|
| 173 | + { |
|
| 163 | 174 | return ['data', $definition ?? $field]; |
| 164 | 175 | } |
| 165 | 176 | |
@@ -95,7 +95,7 @@ discard block |
||
| 95 | 95 | FilterProvider::SOURCE => null, |
| 96 | 96 | FilterProvider::ORIGIN => $field, |
| 97 | 97 | FilterProvider::FILTER => $definition, |
| 98 | - FilterProvider::ARRAY => false, |
|
| 98 | + FilterProvider::array => false, |
|
| 99 | 99 | FilterProvider::OPTIONAL => $optional, |
| 100 | 100 | ]; |
| 101 | 101 | |
@@ -129,7 +129,7 @@ discard block |
||
| 129 | 129 | FilterProvider::FILTER => $definition[self::NESTED], |
| 130 | 130 | FilterProvider::SOURCE => null, |
| 131 | 131 | FilterProvider::ORIGIN => $origin, |
| 132 | - FilterProvider::ARRAY => $iterate, |
|
| 132 | + FilterProvider::array => $iterate, |
|
| 133 | 133 | FilterProvider::OPTIONAL => $optional, |
| 134 | 134 | ]; |
| 135 | 135 | |
@@ -33,7 +33,7 @@ discard block |
||
| 33 | 33 | public const SOURCE = 'source'; |
| 34 | 34 | public const ORIGIN = 'origin'; |
| 35 | 35 | public const FILTER = 'filter'; |
| 36 | - public const ARRAY = 'array'; |
|
| 36 | + public const array = 'array'; |
|
| 37 | 37 | public const OPTIONAL = 'optional'; |
| 38 | 38 | public const ITERATE_SOURCE = 'iterate_source'; |
| 39 | 39 | public const ITERATE_ORIGIN = 'iterate_origin'; |
@@ -103,7 +103,7 @@ discard block |
||
| 103 | 103 | } |
| 104 | 104 | |
| 105 | 105 | $nested = $map[self::FILTER]; |
| 106 | - if (empty($map[self::ARRAY])) { |
|
| 106 | + if (empty($map[self::array])) { |
|
| 107 | 107 | // slicing down |
| 108 | 108 | $result[$field] = $this->createFilter($nested, $input->withPrefix($map[self::ORIGIN])); |
| 109 | 109 | continue; |
@@ -90,7 +90,7 @@ discard block |
||
| 90 | 90 | array $schema, |
| 91 | 91 | ValidatorInterface $validator, |
| 92 | 92 | ErrorMapper $errorMapper |
| 93 | - ) { |
|
| 93 | + ){ |
|
| 94 | 94 | parent::__construct($data, $schema); |
| 95 | 95 | |
| 96 | 96 | $this->mappings = $schema[FilterProvider::MAPPING] ?? []; |
@@ -151,10 +151,10 @@ discard block |
||
| 151 | 151 | */ |
| 152 | 152 | public function getErrors(): array |
| 153 | 153 | { |
| 154 | - if ($this->errors === null) { |
|
| 154 | + if ($this->errors === null){ |
|
| 155 | 155 | $this->errors = []; |
| 156 | - foreach ($this->validator->withData($this)->getErrors() as $field => $error) { |
|
| 157 | - if (is_string($error) && Translator::isMessage($error)) { |
|
| 156 | + foreach ($this->validator->withData($this)->getErrors() as $field => $error){ |
|
| 157 | + if (is_string($error) && Translator::isMessage($error)){ |
|
| 158 | 158 | // translate error message |
| 159 | 159 | $error = $this->say($error); |
| 160 | 160 | } |
@@ -178,32 +178,32 @@ discard block |
||
| 178 | 178 | */ |
| 179 | 179 | protected function validateNested(array $errors): array |
| 180 | 180 | { |
| 181 | - foreach ($this->getFields(false) as $index => $value) { |
|
| 182 | - if (isset($errors[$index])) { |
|
| 181 | + foreach ($this->getFields(false) as $index => $value){ |
|
| 182 | + if (isset($errors[$index])){ |
|
| 183 | 183 | //Invalid on parent level |
| 184 | 184 | continue; |
| 185 | 185 | } |
| 186 | 186 | |
| 187 | - if ($value instanceof FilterInterface) { |
|
| 188 | - if ($this->isOptional($index) && ! $this->hasBeenPassed($index)) { |
|
| 187 | + if ($value instanceof FilterInterface){ |
|
| 188 | + if ($this->isOptional($index) && !$this->hasBeenPassed($index)){ |
|
| 189 | 189 | continue; |
| 190 | 190 | } |
| 191 | 191 | |
| 192 | - if (! $value->isValid()) { |
|
| 192 | + if (!$value->isValid()){ |
|
| 193 | 193 | $errors[$index] = $value->getErrors(); |
| 194 | 194 | continue; |
| 195 | 195 | } |
| 196 | 196 | } |
| 197 | 197 | |
| 198 | 198 | //Array of nested entities for validation |
| 199 | - if (is_iterable($value)) { |
|
| 200 | - foreach ($value as $nIndex => $nValue) { |
|
| 201 | - if ($nValue instanceof FilterInterface) { |
|
| 202 | - if ($this->isOptional($nIndex) && ! $this->hasBeenPassed($nIndex)) { |
|
| 199 | + if (is_iterable($value)){ |
|
| 200 | + foreach ($value as $nIndex => $nValue){ |
|
| 201 | + if ($nValue instanceof FilterInterface){ |
|
| 202 | + if ($this->isOptional($nIndex) && !$this->hasBeenPassed($nIndex)){ |
|
| 203 | 203 | continue; |
| 204 | 204 | } |
| 205 | 205 | |
| 206 | - if (! $nValue->isValid()) { |
|
| 206 | + if (!$nValue->isValid()){ |
|
| 207 | 207 | $errors[$index][$nIndex] = $nValue->getErrors(); |
| 208 | 208 | } |
| 209 | 209 | } |
@@ -237,11 +237,11 @@ discard block |
||
| 237 | 237 | { |
| 238 | 238 | $value = $this->getField($field); |
| 239 | 239 | |
| 240 | - if ($value === null) { |
|
| 240 | + if ($value === null){ |
|
| 241 | 241 | return false; |
| 242 | 242 | } |
| 243 | 243 | |
| 244 | - if ($value instanceof FilterInterface) { |
|
| 244 | + if ($value instanceof FilterInterface){ |
|
| 245 | 245 | return $value->getValue() !== []; |
| 246 | 246 | } |
| 247 | 247 | |
@@ -151,10 +151,13 @@ discard block |
||
| 151 | 151 | */ |
| 152 | 152 | public function getErrors(): array |
| 153 | 153 | { |
| 154 | - if ($this->errors === null) { |
|
| 154 | + if ($this->errors === null) |
|
| 155 | + { |
|
| 155 | 156 | $this->errors = []; |
| 156 | - foreach ($this->validator->withData($this)->getErrors() as $field => $error) { |
|
| 157 | - if (is_string($error) && Translator::isMessage($error)) { |
|
| 157 | + foreach ($this->validator->withData($this)->getErrors() as $field => $error) |
|
| 158 | + { |
|
| 159 | + if (is_string($error) && Translator::isMessage($error)) |
|
| 160 | + { |
|
| 158 | 161 | // translate error message |
| 159 | 162 | $error = $this->say($error); |
| 160 | 163 | } |
@@ -178,32 +181,42 @@ discard block |
||
| 178 | 181 | */ |
| 179 | 182 | protected function validateNested(array $errors): array |
| 180 | 183 | { |
| 181 | - foreach ($this->getFields(false) as $index => $value) { |
|
| 182 | - if (isset($errors[$index])) { |
|
| 184 | + foreach ($this->getFields(false) as $index => $value) |
|
| 185 | + { |
|
| 186 | + if (isset($errors[$index])) |
|
| 187 | + { |
|
| 183 | 188 | //Invalid on parent level |
| 184 | 189 | continue; |
| 185 | 190 | } |
| 186 | 191 | |
| 187 | - if ($value instanceof FilterInterface) { |
|
| 188 | - if ($this->isOptional($index) && ! $this->hasBeenPassed($index)) { |
|
| 192 | + if ($value instanceof FilterInterface) |
|
| 193 | + { |
|
| 194 | + if ($this->isOptional($index) && ! $this->hasBeenPassed($index)) |
|
| 195 | + { |
|
| 189 | 196 | continue; |
| 190 | 197 | } |
| 191 | 198 | |
| 192 | - if (! $value->isValid()) { |
|
| 199 | + if (! $value->isValid()) |
|
| 200 | + { |
|
| 193 | 201 | $errors[$index] = $value->getErrors(); |
| 194 | 202 | continue; |
| 195 | 203 | } |
| 196 | 204 | } |
| 197 | 205 | |
| 198 | 206 | //Array of nested entities for validation |
| 199 | - if (is_iterable($value)) { |
|
| 200 | - foreach ($value as $nIndex => $nValue) { |
|
| 201 | - if ($nValue instanceof FilterInterface) { |
|
| 202 | - if ($this->isOptional($nIndex) && ! $this->hasBeenPassed($nIndex)) { |
|
| 207 | + if (is_iterable($value)) |
|
| 208 | + { |
|
| 209 | + foreach ($value as $nIndex => $nValue) |
|
| 210 | + { |
|
| 211 | + if ($nValue instanceof FilterInterface) |
|
| 212 | + { |
|
| 213 | + if ($this->isOptional($nIndex) && ! $this->hasBeenPassed($nIndex)) |
|
| 214 | + { |
|
| 203 | 215 | continue; |
| 204 | 216 | } |
| 205 | 217 | |
| 206 | - if (! $nValue->isValid()) { |
|
| 218 | + if (! $nValue->isValid()) |
|
| 219 | + { |
|
| 207 | 220 | $errors[$index][$nIndex] = $nValue->getErrors(); |
| 208 | 221 | } |
| 209 | 222 | } |
@@ -237,11 +250,13 @@ discard block |
||
| 237 | 250 | { |
| 238 | 251 | $value = $this->getField($field); |
| 239 | 252 | |
| 240 | - if ($value === null) { |
|
| 253 | + if ($value === null) |
|
| 254 | + { |
|
| 241 | 255 | return false; |
| 242 | 256 | } |
| 243 | 257 | |
| 244 | - if ($value instanceof FilterInterface) { |
|
| 258 | + if ($value instanceof FilterInterface) |
|
| 259 | + { |
|
| 245 | 260 | return $value->getValue() !== []; |
| 246 | 261 | } |
| 247 | 262 | |