Passed
Push — feature/job-builder/step-03 ( c9515d...117b8c )
by Yonathan
12:37
created

SkillDeclarationController   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 135
Duplicated Lines 0 %

Test Coverage

Coverage 34.78%

Importance

Changes 0
Metric Value
wmc 8
eloc 43
dl 0
loc 135
ccs 16
cts 46
cp 0.3478
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A destroy() 0 10 2
A editAuthenticated() 0 4 1
A edit() 0 11 1
A updateSkillDeclaration() 0 32 2
A create() 0 19 1
A update() 0 5 1
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Illuminate\Support\Facades\Lang;
6
use Illuminate\Http\Request;
7
use App\Models\Lookup\SkillStatus;
8
use App\Models\SkillDeclaration;
9
use App\Models\Applicant;
10
use App\Http\Controllers\Controller;
11
use App\Services\Validation\SkillDeclarationValidator;
12
13
class SkillDeclarationController extends Controller
14
{
15
16
    /**
17
     * Show the form for editing the logged-in applicant's skills
18
     *
19
     * @param  \Illuminate\Http\Request $request Incoming request.
20
     * @return \Illuminate\Http\Response
21
     */
22
    public function editAuthenticated(Request $request)
23
    {
24
        $applicant = $request->user()->applicant;
25
        return redirect(route('profile.skills.edit', $applicant));
26
    }
27
28
    /**
29
     * Show the form for editing the applicant's skills
30
     *
31
     * @param  \Illuminate\Http\Request $request   Incoming request object.
32
     * @param  \App\Models\Applicant    $applicant Applicant object.
33
     * @return \Illuminate\Http\Response
34
     */
35
    public function edit(Request $request, Applicant $applicant)
36
    {
37
        $applicant->load([
38
            'skill_declarations.skill.skill_type',
39
            'skill_declarations.skill_status',
40
            'skill_declarations.skill_level',
41
        ]);
42
43
        return view('applicant/profile_03_skills', [
44
            'applicant' => $applicant,
45
            'profile' => Lang::get('applicant/profile_skills'),
46
        ]);
47
    }
48
49
    /**
50
     * Create the particular skill declaration in storage.
51
     *
52
     * @param  \Illuminate\Http\Request $request Incoming request.
53
     * @return \Illuminate\Http\Response|string
54
     */
55
    public function create(Request $request)
56
    {
57
        $this->authorize('create', SkillDeclaration::class);
58
59
        $user = $request->user();
60
        $applicant = $user->applicant;
61
62
        // Get the default claim status id.
63
        $claimedStatusId = SkillStatus::where('name', 'claimed')->firstOrFail()->id;
64
65
        // Create a new Skill Declaration
66
        // But don't save, as it hasn't been validated yet.
67
        $skillDeclaration = new SkillDeclaration();
68
        $skillDeclaration->applicant_id = $applicant->id;
69
        $skillDeclaration->skill_id = $request->input('skill_id');
70
        $skillDeclaration->skill_status_id = $claimedStatusId;
71
72
        // Update variable fields in skill declaration.
73
        return $this->updateSkillDeclaration($request, $skillDeclaration);
74
    }
75
76
    /**
77
     * Check authorization and update the skill declaration.
78
     *
79
     * @param  \Illuminate\Http\Request     $request          Incoming request.
80
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
81
     * @return \Illuminate\Http\Response|string
82
     */
83 1
    public function update(Request $request, SkillDeclaration $skillDeclaration)
84
    {
85 1
        $this->authorize('update', $skillDeclaration);
86
87 1
        return $this->updateSkillDeclaration($request, $skillDeclaration);
88
    }
89
90
    /**
91
     * Update the particular skill declaration in storage.
92
     *
93
     * @param  \Illuminate\Http\Request     $request          Incoming request.
94
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
95
     * @return \Illuminate\Http\Response|string
96
     */
97 1
    protected function updateSkillDeclaration(Request $request, SkillDeclaration $skillDeclaration)
98
    {
99
        // Fill variable values.
100 1
        $skillDeclaration->fill([
101 1
            'description' => $request->input('description'),
102 1
            'skill_level_id' => $request->input('skill_level_id'),
103
        ]);
104
105
        // Validate before saving.
106 1
        $validator = new SkillDeclarationValidator($request->user()->applicant);
107 1
        $validator->validate($skillDeclaration);
108
109
        // Save this skill declaration.
110 1
        $skillDeclaration->save();
111
112
        // Attach relatives.
113 1
        $referenceIds = $this->getRelativeIds($request->input(), 'references');
114 1
        $skillDeclaration->references()->sync($referenceIds);
115
116 1
        $sampleIds = $this->getRelativeIds($request->input(), 'samples');
117 1
        $skillDeclaration->work_samples()->sync($sampleIds);
118
119
        // If an ajax request, return the new object.
120 1
        if ($request->ajax()) {
121
            $skillDeclaration->load('references');
122
            $skillDeclaration->load('work_samples');
123
            $skillDeclaration->load('skill');
124
            $skillDeclaration->load('skill_status');
125
            return $skillDeclaration->toJson();
126
        }
127
128 1
        return redirect()->back();
129
    }
130
131
    /**
132
     * Delete the particular skill declaration in storage.
133
     *
134
     * @param  \Illuminate\Http\Request     $request          Incoming request.
135
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
136
     * @return \Illuminate\Http\Response|string[]
137
     */
138
    public function destroy(Request $request, SkillDeclaration $skillDeclaration)
139
    {
140
        $this->authorize('delete', $skillDeclaration);
141
        $skillDeclaration->delete();
142
143
        if ($request->ajax()) {
144
            return ['message' => 'Skill deleted'];
145
        }
146
147
        return redirect()->back();
148
    }
149
}
150