Completed
Pull Request — master (#48)
by Shawn
05:13 queued 02:49
created

SettingController   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 9
c 0
b 0
f 0
lcom 1
cbo 4
dl 0
loc 107
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A index() 0 18 1
A update() 0 17 2
A updateUserRoles() 0 14 3
B saveAdldapKeyFormat() 0 27 3
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
        ];
100
101
        foreach ($adldapData as $correctKey => $formKey) {
102
            $data[$correctKey] = $data[$formKey];
103
            unset($data[$formKey]);
104
        }
105
106
        $data['adldap.connections.default.connection_settings.domain_controllers'] = [$data['ldap_controller1'], $data['ldap_controller2']];
107
        unset($data['ldap_controller1']);
108
        unset($data['ldap_controller2']);
109
110
        if ($data['adldap.connections.default.connection_settings.admin_password'] == '') {
111
            $data['adldap.connections.default.connection_settings.admin_password'] = Setting::get('adldap.connections.default.connection_settings.admin_password');
112
        }
113
114
        return $data;
115
    }
116
}
117