Completed
Push — master ( a8ee71...8c1f56 )
by wen
02:53
created

NamedElement   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 89
c 0
b 0
f 0
wmc 14
lcom 1
cbo 2
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A required() 0 5 1
A unique() 0 10 2
A getValidationRules() 0 21 4
A getValidationMessages() 0 11 2
A getValidationTitles() 0 4 1
A addValidationRule() 0 10 2
A addValidationMessage() 0 10 2
1
<?php
2
3
namespace Sco\Admin\Form\Elements;
4
5
use Sco\Admin\Contracts\Validatable;
6
7
class NamedElement extends Element implements Validatable
8
{
9
    protected $defaultValue = '';
10
11
    protected $validationRules = [];
12
13
    protected $validationMessages = [];
14
15
    public function required($message = null)
16
    {
17
        $this->addValidationRule('required', $message);
18
        return $this;
19
    }
20
21
    public function unique($message = null)
22
    {
23
        $this->addValidationRule('_unique');
24
25
        if (!is_null($message)) {
26
            $this->addValidationMessage('unique', $message);
27
        }
28
29
        return $this;
30
    }
31
32
    public function getValidationRules()
33
    {
34
        $rules = $this->validationRules;
35
36
        foreach ($rules as &$rule) {
37
            if ($rule !== '_unique') {
38
                continue;
39
            }
40
41
            $model = $this->getModel();
42
            $table = $model->getTable();
43
44
            $rule = 'unique:'.$table.','.$this->getName();
45
            if ($model->exists) {
46
                $rule .= ','.$model->getKey();
47
            }
48
        }
49
        unset($rule);
50
51
        return [$this->getName() => $rules];
52
    }
53
54
    /**
55
     * @return array
56
     */
57
    public function getValidationMessages()
58
    {
59
        $messages = $this->validationMessages;
60
61
        foreach ($messages as $rule => $message) {
62
            $messages[$this->getName().'.'.$rule] = $message;
63
            unset($messages[$rule]);
64
        }
65
66
        return $messages;
67
    }
68
69
    public function getValidationTitles()
70
    {
71
        return [$this->getName() => $this->getTitle()];
72
    }
73
74
    public function addValidationRule($rule, $message = null)
75
    {
76
        $this->validationRules[] = $rule;
77
78
        if (is_null($message)) {
79
            return $this;
80
        }
81
82
        return $this->addValidationMessage($rule, $message);
83
    }
84
85
    public function addValidationMessage($rule, $message)
86
    {
87
        if (($pos = strpos($rule, ':')) !== false) {
88
            $rule = substr($rule, 0, $pos);
89
        }
90
91
        $this->validationMessages[$rule] = $message;
92
93
        return $this;
94
    }
95
}
96