Completed
Push — AddActivityLog ( afa80e...195157 )
by D.
45:05 queued 35:04
created

SettingController::updateUserRoles()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 9
nc 4
nop 1
1
<?php
2
3
namespace SET\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Config;
7
use SET\Setting;
8
use SET\User;
9
10
class SettingController extends Controller
11
{
12
    /**
13
     * Display a listing of the resource.
14
     *
15
     * @return \Illuminate\Http\Response
16
     */
17
    public function index()
18
    {
19
        $this->authorize('edit');
20
21
        $settings = Setting::getAll();
22
        $ldapControllers = $settings['adldap.connections.default.connection_settings.domain_controllers'] ?? config('adldap.connections.default.connection_settings.domain_controllers');
23
        $settings['ldap_controller1'] = $ldapControllers[0];
24
        $settings['ldap_controller2'] = $ldapControllers[1];
25
26
        $users = User::skipSystem()->active()->get()->sortBy('UserFullName');
27
        $userList = $users->pluck('UserFullName', 'id');
28
        $admins = $users->where('role', 'edit')->pluck('id')->all();
29
        $viewers = $users->where('role', 'view')->pluck('id')->all();
30
        $configAdmins = User::whereIn('username', Config::get('auth.admin'))
31
            ->get()->pluck('userFullName')->implode('; ');
32
33
        return view('setting.index', compact('settings', 'userList', 'admins', 'configAdmins', 'viewers'));
34
    }
35
36
    /**
37
     * Update the specified resource in storage.
38
     *
39
     * @param \Illuminate\Http\Request $request
40
     *
41
     * @return \Illuminate\Http\RedirectResponse
42
     */
43
    public function update(Request $request)
44
    {
45
        $this->authorize('edit');
46
47
        $data = $request->all();
48
        $data = $this->updateUserRoles($data);
49
        $data = $this->saveAdldapKeyFormat($data);
50
51
        unset($data['_method']);
52
        unset($data['_token']);
53
54
        foreach ($data as $key => $value) {
55
            Setting::set($key, $value);
56
        }
57
58
        return redirect()->action('SettingController@index');
59
    }
60
61
    /**
62
     * @param $data
63
     *
64
     * @return mixed
65
     */
66
    private function updateUserRoles($data)
67
    {
68
        User::where('role', '!=', '')->update(['role' => '']);
69
        if (isset($data['viewer'])) {
70
            User::whereIn('id', $data['viewer'])->update(['role' => 'view']);
71
            unset($data['viewer']);
72
        }
73
        if (isset($data['admin'])) {
74
            User::whereIn('id', $data['admin'])->update(['role' => 'edit']);
75
            unset($data['admin']);
76
        }
77
78
        return $data;
79
    }
80
81
    /**
82
     * PHP converts our periods to underscores.
83
     * This causes issues where adldap can't figure out the ADLDAP settings.
84
     * As such, we need to convert the correct underscores back to their dot notation.
85
     * Note: some underscores must be retained.
86
     *
87
     * @param $data
88
     */
89
    private function saveAdldapKeyFormat($data)
90
    {
91
        $adldapData = [
92
            'auth.providers.users.driver'                                   => 'auth_driver',
93
            'adldap.connections.default.connection_settings.base_dn'        => 'adldap_connections_default_connection_settings_base_dn',
94
            'adldap.connections.default.connection_settings.admin_username' => 'adldap_connections_default_connection_settings_admin_username',
95
            'adldap.connections.default.connection_settings.admin_password' => 'adldap_connections_default_connection_settings_admin_password',
96
            'adldap.connections.default.connection_settings.account_prefix' => 'adldap_connections_default_connection_settings_account_prefix',
97
            'adldap.connections.default.connection_settings.account_suffix' => 'adldap_connections_default_connection_settings_account_suffix',
98
            'adldap_auth.limitation_filter'                                 => 'adldap_auth_limitation_filter',
99
            'mail.driver'                                                   => 'mail_driver',
100
            'mail.username'                                                 => 'mail_username',
101
            'mail.password'                                                 => 'mail_password',
102
            'mail.port'                                                     => 'mail_port',
103
            'mail.encryption'                                               => 'mail_encryption',
104
            'mail.host'                                                     => 'mail_host',
105
        ];
106
107
        foreach ($adldapData as $correctKey => $formKey) {
108
            $data[$correctKey] = $data[$formKey];
109
            unset($data[$formKey]);
110
        }
111
112
        $data['adldap.connections.default.connection_settings.domain_controllers'] = [$data['ldap_controller1'], $data['ldap_controller2']];
113
        unset($data['ldap_controller1']);
114
        unset($data['ldap_controller2']);
115
116
        if ($data['adldap.connections.default.connection_settings.admin_password'] == '') {
117
            $data['adldap.connections.default.connection_settings.admin_password'] = Setting::get('adldap.connections.default.connection_settings.admin_password');
118
        }
119
120
        return $data;
121
    }
122
}
123