ValidationExtension   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 13
c 1
b 0
f 0
dl 0
loc 32
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A validate() 0 25 6
1
<?php
2
3
namespace Cube\SilverStripe\Validation\Extensions;
4
5
use Exception;
6
use SilverStripe\Core\ClassInfo;
7
use SilverStripe\ORM\DataExtension;
8
use SilverStripe\ORM\ValidationResult;
9
use Cube\SilverStripe\Validation\Interfaces\ValidationRules;
10
use Cube\SilverStripe\Validation\Validator;
11
12
/**
13
 * Class ValidationExtension
14
 * @package Cube\SilverStripe\Validation\Extensions
15
 */
16
class ValidationExtension extends DataExtension
17
{
18
    /**
19
     * @param ValidationResult $result
20
     * @return ValidationResult|void
21
     * @throws Exception
22
     */
23
    public function validate(ValidationResult $result)
24
    {
25
        if (!ClassInfo::classImplements($this->owner->ClassName, ValidationRules::class)) {
26
            // DataObject does not implement the Validation Interface
27
            return $result;
28
        }
29
30
        $data = $this->owner->toMap();
31
        $rules = $this->owner->rules();
32
33
        $validator = Validator::make($data, $rules);
34
35
        if (method_exists($this->owner, 'messages')) {
36
            $validator->setCustomMessages($this->owner->messages());
37
        }
38
39
        if (!$validator->validate()) {
40
            foreach ($validator->errors() as $field => $messages) {
41
                foreach ($messages as $message) {
42
                    $result->addFieldError($field, $message);
43
                }
44
            }
45
        }
46
47
        return $result;
48
    }
49
}
50