Passed
Push — master ( 6f7c4e...f6c223 )
by Paul
15:42 queued 07:15
created

DefaultValidator::isValidRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 6
ccs 0
cts 5
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Modules\Validator;
4
5
use GeminiLabs\SiteReviews\Database\DefaultsManager;
6
use GeminiLabs\SiteReviews\Defaults\ValidateReviewDefaults;
7
use GeminiLabs\SiteReviews\Helpers\Arr;
8
use GeminiLabs\SiteReviews\Modules\Validator;
9
use GeminiLabs\SiteReviews\Request;
10
11
class DefaultValidator extends ValidatorAbstract
12
{
13
    const VALIDATION_RULES = [
14
        'content' => 'required',
15
        'email' => 'required|email',
16
        'name' => 'required',
17
        'rating' => 'required|number|between:1,5',
18
        'terms' => 'accepted',
19
        'title' => 'required',
20
    ];
21
22
    /**
23
     * @return bool
24
     */
25 2
    public function isValid()
26
    {
27 2
        $this->errors = glsr(Validator::class)->validate(
28 2
            $this->request->toArray(),
29 2
            $this->rules()
30
        );
31 2
        return empty($this->errors);
32
    }
33
34
    /**
35
     * This only validates the provided values in the Request
36
     * @return bool
37
     */
38
    public function isValidRequest()
39
    {
40
        $options = glsr(DefaultsManager::class)->pluck('settings.submissions.required.options');
41
        $excludedKeys = array_keys(array_diff_key($options, $this->request->toArray()));
42
        $this->request->excluded = $excludedKeys;
43
        return $this->isValid();
44
    }
45
46
    /**
47
     * @return void
48
     */
49 2
    public function performValidation()
50
    {
51 2
        if (!$this->isValid()) {
52 2
            $this->setErrors(__('Please fix the submission errors.', 'site-reviews'));
53 2
            return;
54
        }
55 1
        $values = glsr(ValidateReviewDefaults::class)->merge($this->request->toArray());
56 1
        $this->request = new Request($values);
57 1
    }
58
59
    /**
60
     * @return array
61
     */
62 2
    protected function rules()
63
    {
64 2
        $rules = glsr()->filterArray('validation/rules', static::VALIDATION_RULES, $this->request);
65 2
        $customRules = array_diff_key($rules,
66 2
            glsr(DefaultsManager::class)->pluck('settings.submissions.required.options')
67
        );
68 2
        $requiredRules = array_intersect_key($rules,
69 2
            array_flip(glsr_get_option('submissions.required', []))
70
        );
71 2
        $rules = array_merge($requiredRules, $customRules);
72 2
        $excluded = Arr::convertFromString($this->request->excluded); // these fields were ommited with the hide option
73 2
        return array_diff_key($rules, array_flip($excluded));
74
    }
75
}
76