Passed
Push — task/all-applications-to-pdf ( cb7375...852a46 )
by Tristan
59:34 queued 50:51
created

updateSkillDeclaration()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 34
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
eloc 17
dl 0
loc 34
ccs 0
cts 18
cp 0
rs 9.7
c 0
b 0
f 0
cc 2
nc 2
nop 2
crap 6
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Illuminate\Support\Facades\Lang;
6
use Illuminate\Support\Facades\Log;
7
use Illuminate\Http\Request;
8
use App\Models\Skill;
9
use App\Models\Lookup\SkillLevel;
10
use App\Models\Lookup\SkillStatus;
11
use App\Models\SkillDeclaration;
12
use App\Models\Applicant;
13
use App\Http\Controllers\Controller;
14
use App\Services\Validation\BulkSkillDeclarationValidator;
15
use App\Services\Validation\SkillDeclarationValidator;
16
17
class SkillDeclarationController extends Controller
18
{
19
20
    /**
21
     * Show the form for editing the logged-in applicant's skills
22
     *
23
     * @param  Request $request
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
24
     * @return \Illuminate\Http\RedirectResponse
25
     */
26
    public function editAuthenticated(Request $request): \Illuminate\Http\RedirectResponse
27
    {
28
        $applicant = $request->user()->applicant;
29
        return redirect(route('profile.skills.edit', $applicant));
30
    }
31
32
    /**
33
     * Show the form for editing the applicant's skills
34
     *
35
     * @param Request   $request   Incoming request object.
36
     * @param Applicant $applicant Applicant object.
37
     *
38
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
39
     */
40
    public function edit(Request $request, Applicant $applicant)
41
    {
42
        $applicant->load([
43
            'skill_declarations.skill.skill_type',
44
            'skill_declarations.skill_status',
45
            'skill_declarations.skill_level',
46
        ]);
47
48
        return view('applicant/profile_03_skills', [
49
            'applicant' => $applicant,
50
            'profile' => Lang::get('applicant/profile_skills'),
51
        ]);
52
    }
53
54
    /**
55
     * Create the particular skill declaration in storage.
56
     *
57
     * @param  \Illuminate\Http\Request $request
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
58
     * @return \Illuminate\Http\Response
59
     */
60
    public function create(Request $request): \Illuminate\Http\Response
61
    {
62
        $this->authorize('create', SkillDeclaration::class);
63
64
        $user = $request->user();
65
        $applicant = $user->applicant;
66
67
        //Get the default claim status id
68
        $claimedStatusId = SkillStatus::where('name', 'claimed')->firstOrFail()->id;
69
70
        // Create a new Skill Declaration
71
        // But don't save, as it hasn't been validated yet
72
        $skillDeclaration = new SkillDeclaration();
73
        $skillDeclaration->applicant_id = $applicant->id;
74
        $skillDeclaration->skill_id = $request->input('skill_id');
75
        $skillDeclaration->skill_status_id = $claimedStatusId;
76
77
        //Update variable fields in skill declaration
78
        return $this->updateSkillDeclaration($request, $skillDeclaration);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->updateSkil...est, $skillDeclaration) returns the type Illuminate\Http\RedirectResponse|string which is incompatible with the type-hinted return Illuminate\Http\Response.
Loading history...
79
    }
80
81
    /**
82
     * Update the particular skill declaration in storage.
83
     *
84
     * @param  \Illuminate\Http\Request     $request
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
85
     * @param  \App\Models\SkillDeclaration $skillDeclaration
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
86
     * @return \Illuminate\Http\Response
87
     */
88
    public function update(Request $request, SkillDeclaration $skillDeclaration): \Illuminate\Http\Response
89
    {
90
        $this->authorize('update', $skillDeclaration);
91
92
        return $this->updateSkillDeclaration($request, $skillDeclaration);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->updateSkil...est, $skillDeclaration) returns the type Illuminate\Http\RedirectResponse|string which is incompatible with the type-hinted return Illuminate\Http\Response.
Loading history...
93
    }
94
95
    protected function updateSkillDeclaration(Request $request, SkillDeclaration $skillDeclaration)
1 ignored issue
show
introduced by
Method \App\Http\Controllers\SkillDeclarationController::updateSkillDeclaration() does not have return type hint nor @return annotation for its return value.
Loading history...
Coding Style Documentation introduced by
Missing doc comment for function updateSkillDeclaration()
Loading history...
96
    {
97
        //Fill variable values
98
        $skillDeclaration->fill([
99
            'description' => $request->input('description'),
100
            'skill_level_id' => $request->input('skill_level_id'),
101
        ]);
102
103
        //Validate before saving
104
        $validator = new SkillDeclarationValidator($request->user()->applicant);
105
        $validator->validate($skillDeclaration);
106
107
        //Save this skill declaration
108
        $skillDeclaration->save();
109
110
        //Attach relatives
111
        $referenceIds = $this->getRelativeIds($request->input(), 'references');
112
        $skillDeclaration->references()->sync($referenceIds);
113
114
        $sampleIds = $this->getRelativeIds($request->input(), 'samples');
115
        $skillDeclaration->work_samples()->sync($sampleIds);
116
117
        // $skillDeclaration->save();
118
119
        // If an ajax request, return the new object
120
        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
        return redirect()->back();
129
    }
130
131
    /**
132
     * Delete the particular skill declaration in storage.
133
     *
134
     * @param  \Illuminate\Http\Request     $request
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
135
     * @param  \App\Models\SkillDeclaration $skillDeclaration
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
136
     * @return \Illuminate\Http\Response
137
     */
138
    public function destroy(Request $request, SkillDeclaration $skillDeclaration): \Illuminate\Http\Response
139
    {
140
        $this->authorize('delete', $skillDeclaration);
141
        $skillDeclaration->delete();
142
143
        if ($request->ajax()) {
144
            return ['message' => 'Skill deleted'];
0 ignored issues
show
Bug Best Practice introduced by
The expression return array('message' => 'Skill deleted') returns the type array<string,string> which is incompatible with the type-hinted return Illuminate\Http\Response.
Loading history...
145
        }
146
147
        return redirect()->back();
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->back() returns the type Illuminate\Http\RedirectResponse which is incompatible with the type-hinted return Illuminate\Http\Response.
Loading history...
148
    }
149
}
150