Completed
Push — feature/application_tracker_va... ( bb4b6b )
by Tristan
18:27 queued 08:29
created

ApplicationValidator::basicsComplete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
0 ignored issues
show
Coding Style introduced by
Missing file doc comment
Loading history...
3
namespace App\Services\Validation;
4
5
use App\Models\JobApplication;
6
use Illuminate\Support\Facades\Validator;
7
use Illuminate\Validation\Rule;
8
use Illuminate\Validation\Validator as BaseValidator;
9
use App\Models\Lookup\CitizenshipDeclaration;
10
use App\Models\Lookup\VeteranStatus;
11
use App\Models\Lookup\PreferredLanguage;
12
use App\Services\Validation\Rules\ContainsObjectWithAttributeRule;
13
use App\Services\Validation\JobApplicationAnswerValidator;
14
15
class ApplicationValidator {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for class ApplicationValidator
Loading history...
Coding Style introduced by
Opening brace of a class must be on the line after the definition
Loading history...
16
17
    protected $citizenship_ids;
18
    protected $veteran_status_ids;
19
    protected $preferred_language_ids;
20
21
    public function __construct() {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for function __construct()
Loading history...
22
        $this->citizenship_ids = CitizenshipDeclaration::all()->pluck('id')->toArray();
23
        $this->veteran_status_ids = VeteranStatus::all()->pluck('id')->toArray();
24
        $this->preferred_language_ids = PreferredLanguage::all()->pluck('id')->toArray();
25
    }
26
27
    public function validate(JobApplication $application) {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for function validate()
Loading history...
28
29
        $rules = [
0 ignored issues
show
Unused Code introduced by
The assignment to $rules is dead and can be removed.
Loading history...
30
31
        ];
32
33
        //Validate basic data is filled in
34
        Validator::make($application->getAttributes(), [
0 ignored issues
show
Coding Style introduced by
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
35
            'job_poster_id' => 'required',
36
            'application_status_id' => 'required',
37
            'citizenship_declaration_id' => ['required', Rule::in($this->citizenship_ids)],
38
            'veteran_status_id' => ['required', Rule::in($this->veteran_status_ids)],
39
            'preferred_language_id' => ['required', Rule::in($this->preferred_language_ids)],
40
            'applicant_id' => 'required',
41
            'submission_signature' => 'required|string|max:191',
42
            'submission_date' => 'required|string|max:191',
43
        ])->validate();
0 ignored issues
show
Coding Style introduced by
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
44
45
        //TODO
46
        //Validate that all questions have been answered
47
48
        //TODO
49
        //Validate that essential skill declarations have been supplied
50
    }
51
52
    protected function arrayMapKeys($fn, $array) {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for function arrayMapKeys()
Loading history...
53
        $newArray = [];
54
        foreach($array as $key => $value) {
0 ignored issues
show
Coding Style introduced by
Expected "foreach (...) {\n"; found "foreach(...) {\n"
Loading history...
55
            $newArray[$fn($key)] = $value;
56
        }
57
        return $newArray;
58
    }
59
60
    public function basicsValidator(JobApplication $application) {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for function basicsValidator()
Loading history...
61
        // Validate the fields common to every application
62
        $rules = [
63
            'citizenship_declaration_id' => ['required', Rule::in($this->citizenship_ids)],
64
            'veteran_status_id' => ['required', Rule::in($this->veteran_status_ids)],
65
            'preferred_language_id' => ['required', Rule::in($this->preferred_language_ids)],
66
        ];
67
68
        //Load application answers so they are included in application->toArray()
69
        $application->load('job_application_answers');
70
71
        // Validate that each question has been answered
72
        $jobPosterQuestionRules = [];
73
        foreach($application->job_poster->job_poster_questions as $question) {
0 ignored issues
show
Coding Style introduced by
Expected "foreach (...) {\n"; found "foreach(...) {\n"
Loading history...
74
            $jobPosterQuestionRules[] = new ContainsObjectWithAttributeRule('job_poster_question_id', $question->id);
75
        }
76
        $rules['job_application_answers'] = $jobPosterQuestionRules;
77
        $answerValidator = new JobApplicationAnswerValidator($application);
78
79
        //Validate that each answer is complete
80
        foreach($application->job_application_answers as $key=>$answer) {
0 ignored issues
show
Coding Style introduced by
Expected "foreach (...) {\n"; found "foreach(...) {\n"
Loading history...
81
            $attribute = implode('.', ['job_application_answers', $key]);
82
            $newRules = $this->arrayMapKeys(function($key) use ($attribute) {
0 ignored issues
show
Coding Style introduced by
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
83
                    return implode('.', [$attribute, $key]);
84
                },
0 ignored issues
show
Coding Style introduced by
Closing brace indented incorrectly; expected 12 spaces, found 16
Loading history...
85
                $answerValidator->rules());
0 ignored issues
show
Coding Style introduced by
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
86
            debugbar()->debug($newRules);
87
            $rules = array_merge($rules, $newRules);
88
        }
89
90
        $validator = Validator::make($application->toArray(), $rules);
91
        debugbar()->debug($application->toArray());
92
        debugbar()->debug($validator->getRules());
93
        return $validator;
94
    }
95
96
    public function basicsComplete(JobApplication $application) {
0 ignored issues
show
Coding Style introduced by
Missing doc comment for function basicsComplete()
Loading history...
97
        $validator = $this->basicsValidator($application);
98
        debugbar()->debug($validator->messages());
99
        return $validator->passes();
100
    }
101
}
102