Completed
Push — task/accessibility-audit-fixes ( 1e0e3b )
by Grant
22s queued 11s
created

SkillDeclarationController   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 138
Duplicated Lines 0 %

Test Coverage

Coverage 34.78%

Importance

Changes 0
Metric Value
wmc 8
eloc 43
dl 0
loc 138
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 34 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  Request $request Incoming request.
20
     * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
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 Request   $request   Incoming request object.
32
     * @param Applicant $applicant Applicant object.
33
     *
34
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
35
     */
36
    public function edit(Request $request, Applicant $applicant)
37
    {
38
        $applicant->load([
39
            'skill_declarations.skill.skill_type',
40
            'skill_declarations.skill_status',
41
            'skill_declarations.skill_level',
42
        ]);
43
44
        return view('applicant/profile_03_skills', [
45
            'applicant' => $applicant,
46
            'profile' => Lang::get('applicant/profile_skills'),
47
        ]);
48
    }
49
50
    /**
51
     * Create the particular skill declaration in storage.
52
     *
53
     * @param  \Illuminate\Http\Request $request Incoming request.
54
     * @return \Illuminate\Http\RedirectResponse|string
55
     */
56
    public function create(Request $request)
57
    {
58
        $this->authorize('create', SkillDeclaration::class);
59
60
        $user = $request->user();
61
        $applicant = $user->applicant;
62
63
        //Get the default claim status id
64
        $claimedStatusId = SkillStatus::where('name', 'claimed')->firstOrFail()->id;
65
66
        // Create a new Skill Declaration
67
        // But don't save, as it hasn't been validated yet
68
        $skillDeclaration = new SkillDeclaration();
69
        $skillDeclaration->applicant_id = $applicant->id;
70
        $skillDeclaration->skill_id = $request->input('skill_id');
71
        $skillDeclaration->skill_status_id = $claimedStatusId;
72
73
        //Update variable fields in skill declaration
74
        return $this->updateSkillDeclaration($request, $skillDeclaration);
75
    }
76
77
    /**
78
     * Check authorization and update the skill declaration.
79
     *
80
     * @param  \Illuminate\Http\Request     $request          Incoming request.
81
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
82
     * @return \Illuminate\Http\RedirectResponse|string
83
     */
84 1
    public function update(Request $request, SkillDeclaration $skillDeclaration)
85
    {
86 1
        $this->authorize('update', $skillDeclaration);
87
88 1
        return $this->updateSkillDeclaration($request, $skillDeclaration);
89
    }
90
91
    /**
92
     * Update the particular skill declaration in storage.
93
     *
94
     * @param  \Illuminate\Http\Request     $request          Incoming request.
95
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
96
     * @return \Illuminate\Http\RedirectResponse|string
97
     */
98 1
    protected function updateSkillDeclaration(Request $request, SkillDeclaration $skillDeclaration)
99
    {
100
        //Fill variable values
101 1
        $skillDeclaration->fill([
102 1
            'description' => $request->input('description'),
103 1
            'skill_level_id' => $request->input('skill_level_id'),
104
        ]);
105
106
        //Validate before saving
107 1
        $validator = new SkillDeclarationValidator($request->user()->applicant);
108 1
        $validator->validate($skillDeclaration);
109
110
        //Save this skill declaration
111 1
        $skillDeclaration->save();
112
113
        //Attach relatives
114 1
        $referenceIds = $this->getRelativeIds($request->input(), 'references');
115 1
        $skillDeclaration->references()->sync($referenceIds);
116
117 1
        $sampleIds = $this->getRelativeIds($request->input(), 'samples');
118 1
        $skillDeclaration->work_samples()->sync($sampleIds);
119
120
        // $skillDeclaration->save();
121
122
        // If an ajax request, return the new object
123 1
        if ($request->ajax()) {
124
            $skillDeclaration->load('references');
125
            $skillDeclaration->load('work_samples');
126
            $skillDeclaration->load('skill');
127
            $skillDeclaration->load('skill_status');
128
            return $skillDeclaration->toJson();
129
        }
130
131 1
        return redirect()->back();
132
    }
133
134
    /**
135
     * Delete the particular skill declaration in storage.
136
     *
137
     * @param  \Illuminate\Http\Request     $request          Incoming request.
138
     * @param  \App\Models\SkillDeclaration $skillDeclaration Incoming Skill Declaration.
139
     * @return \Illuminate\Http\RedirectResponse|string[]
140
     */
141
    public function destroy(Request $request, SkillDeclaration $skillDeclaration)
142
    {
143
        $this->authorize('delete', $skillDeclaration);
144
        $skillDeclaration->delete();
145
146
        if ($request->ajax()) {
147
            return ['message' => 'Skill deleted'];
148
        }
149
150
        return redirect()->back();
151
    }
152
}
153