Passed
Push — feature/settings-2fa ( 142ad6...2ec45d )
by Tristan
08:38
created

SettingsController::updatePersonal()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 14
c 0
b 0
f 0
dl 0
loc 23
rs 9.7998
cc 2
nc 2
nop 2
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Http\Controllers\Controller;
6
use App\Models\Applicant;
7
use App\Services\Validation\Rules\PasswordCorrectRule;
8
use App\Services\Validation\Rules\PasswordFormatRule;
9
use Facades\App\Services\WhichPortal;
10
use Illuminate\Http\Request;
11
use Illuminate\Support\Facades\Lang;
12
use Illuminate\Support\Facades\Hash;
13
use Illuminate\Validation\Rule;
14
15
class SettingsController extends Controller
16
{
17
    /**
18
     * Display the specified resource.
19
     *
20
     * @param  \Illuminate\Http\Request $request Incoming request.
21
     * @return \Illuminate\Http\Response
22
     */
23
    public function edit(Request $request)
24
    {
25
        $user = $request->user();
26
        $data = [
27
            // Localized strings.
28
            'settings' => Lang::get('common/settings'),
29
            // Applicant data.
30
            'user' => $user,
31
            // Update routes.
32
            'submit_personal' => route(WhichPortal::prefixRoute('settings.personal.update'), $user->applicant),
33
            'submit_password' => route(WhichPortal::prefixRoute('settings.password.update'), $user->applicant),
34
            'submit_government' => route(WhichPortal::prefixRoute('settings.government.update'), $user->applicant),
35
            'activate_two_factor' => route(WhichPortal::prefixRoute('two_factor.activate')),
36
            'deactivate_two_factor' => route(WhichPortal::prefixRoute('two_factor.deactivate')),
37
            'generate_recovery_codes' => route(WhichPortal::prefixRoute('recovery_codes.show'))
38
        ];
39
40
        return view(
41
            'common/settings',
42
            $data
43
        );
44
    }
45
46
    /**
47
     * Update personal information
48
     *
49
     * @param  \Illuminate\Http\Request $request   Incoming request.
50
     * @param  \App\Models\Applicant    $applicant Incoming Applicant.
51
     * @return \Illuminate\Http\Response
52
     */
53
    public function updatePersonal(Request $request, Applicant $applicant)
54
    {
55
        $validData = $request->validate([
56
            'first_name' => 'required|string|max:191',
57
            'last_name' => 'required|string|max:191',
58
            'email' => [
59
                'required',
60
                'email:rfc',
61
                'max:191',
62
                // Email may match existing email for this user, must be unique if changed.
63
                Rule::unique('users', 'email')->ignore($applicant->user->id)
64
            ]
65
        ]);
66
67
        if ($validData) {
68
            $applicant->user->update([
69
                'first_name' => $validData['first_name'],
70
                'last_name' => $validData['last_name'],
71
                'email' => $validData['email'],
72
            ]);
73
        }
74
75
        return redirect()->route(WhichPortal::prefixRoute('settings.edit'))->withSuccess(Lang::get('success.update_personal'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route...cess.update_personal')) also could return the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
76
    }
77
78
    /**
79
     * Update password.
80
     *
81
     * @param  \Illuminate\Http\Request $request   Incoming request.
82
     * @param  \App\Models\Applicant    $applicant Incoming Applicant.
83
     * @return \Illuminate\Http\Response
84
     */
85
    public function updatePassword(Request $request, Applicant $applicant)
86
    {
87
        $validData = $request->validate([
88
            'current_password' => ['required', new PasswordCorrectRule],
89
            'new_password' => ['required', new PasswordFormatRule],
90
            'new_confirm_password' => ['required', 'same:new_password']
91
        ]);
92
93
        if ($validData) {
94
            $applicant->user->update(['password'=> Hash::make($validData['new_password'])]);
95
        }
96
97
        return redirect()->route(WhichPortal::prefixRoute('settings.edit'))->withSuccess(Lang::get('success.update_password'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route...cess.update_password')) also could return the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
98
    }
99
100
    /**
101
     * Update government information.
102
     *
103
     * @param  \Illuminate\Http\Request $request   Incoming request.
104
     * @param  \App\Models\Applicant    $applicant Incoming Applicant.
105
     * @return \Illuminate\Http\Response
106
     */
107
    public function updateGovernment(Request $request, Applicant $applicant)
108
    {
109
        $validData = $request->validate([
110
            'gov_email' => 'nullable|required_unless:department,0|email:rfc|max:191',
111
                            Rule::unique('users', 'gov_email')->ignore($applicant->user->id)
112
        ]);
113
114
        if ($validData) {
115
            $applicant->user->update(['gov_email' => $validData['gov_email']]);
116
        }
117
118
        return redirect()->route(WhichPortal::prefixRoute('settings.edit'))->withSuccess(Lang::get('success.update_government'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route...ss.update_government')) also could return the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
119
    }
120
}
121