Passed
Push — master ( 3b9459...1d6d9a )
by Ron
11:07 queued 34s
created

AdminController::submitPolicy()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 30
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 2.0065

Importance

Changes 0
Metric Value
cc 2
eloc 17
nc 2
nop 1
dl 0
loc 30
ccs 15
cts 17
cp 0.8824
crap 2.0065
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\User;
6
use App\Settings;
7
use Carbon\Carbon;
8
use App\UserRoleType;
9
use Illuminate\Http\Request;
10
use App\UserRolePermissions;
11
use App\UserRolePermissionTypes;
12
use Illuminate\Support\Facades\Log;
13
use Illuminate\Support\Facades\Auth;
14
use App\Http\Controllers\Controller;
15
use Illuminate\Support\Facades\Route;
16
use App\Http\Resources\UserCollection;
17
18
class AdminController extends Controller
19
{
20 62
    public function __construct()
21
    {
22
        //  Only Authorized users with specific admin permissions are allowed
23 62
        $this->middleware(['auth', 'can:allow_admin']);
24 62
    }
25
26
    //  Admin landing page
27 10
    public function index()
28
    {
29 10
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
30 10
        return view('admin.index');
31
    }
32
33
    //  Display all file links
34 2
    public function userLinks()
35
    {
36 2
        $userLinks = new UserCollection(
37 2
                        User::withCount([
38 2
                                'FileLinks',
39
                                'FileLinks as expired_file_links_count' => function($query)
40
                                {
41 2
                                    $query->where('expire', '<', Carbon::now());
42 2
                                }
43
                            ])
44 2
                            ->get()
45 2
                            ->makeVisible('user_id')
46
                    );
47
48 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
49 2
        return view('admin.userLinks', [
50 2
            'links' => $userLinks,
51
        ]);
52
    }
53
54
    //  Show the links for the selected user
55 2
    public function showLinks($id)
56
    {
57 2
        $user = User::find($id);
58
59 2
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
60 2
        Log::debug('User Link Data:', $user->toArray());
61 2
        return view('admin.linkDetails', [
62 2
            'user' => $user,
63
        ]);
64
    }
65
66
    //  Get the form to change the user password policy
67 4
    public function passwordPolicy()
68
    {
69 4
        $this->authorize('hasAccess', 'Manage Users');
70 4
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
71 4
        return view('admin.userSecurity', [
72 4
            'passExpire' => config('auth.passwords.settings.expire'),
73
        ]);
74
    }
75
76
    //  Submit the form to change the user password policy
77 4
    public function submitPolicy(Request $request)
78
    {
79 4
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data:', $request->toArray());
80 4
        $this->authorize('hasAccess', 'Manage Users');
81
82 4
        $request->validate([
83 4
            'passExpire' => 'required|numeric'
84
        ]);
85
86 4
        Settings::firstOrCreate(
87 4
            ['key'   => 'auth.passwords.settings.expire'],
88 4
            ['key'   => 'auth.passwords.settings.expire', 'value' => $request->passExpire]
89 4
        )->update(['value' => $request->passExpire]);
90 4
        Log::notice('User '.Auth::user()->full_name.' updated User Password Policy');
91
92
        //  If the setting is changing from never to xx days, update all users
93 4
        if ($request->passExpire == 0) {
94
            User::whereNotNull('password_expires')->update([
95
                'password_expires' => null
96
            ]);
97
        }
98
        else
99
        {
100 4
            $newExpire = Carbon::now()->addDays($request->passExpire);
101 4
            User::whereNull('password_expires')->update([
102 4
                'password_expires' => $newExpire
103
            ]);
104
        }
105
106 4
        return redirect()->back()->with('success', 'User Security Updated');
107
    }
108
109
    //  View the current roles that can be assigned to users
110 4
    public function roleSettings()
111
    {
112 4
        $this->authorize('hasAccess', 'Manage User Roles');
113 4
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name);
114
        $roles = UserRoleType::with(['UserRolePermissions' => function($query)
115
        {
116 4
            $query->join('user_role_permission_types', 'user_role_permission_types.perm_type_id', '=', 'user_role_permissions.perm_type_id');
117 4
        }])->get();
118 4
        $perms = UserRolePermissionTypes::all();
119 4
        Log::debug('User Role Data', $roles->toArray());
120 4
        Log::debug('Role Permissions Data', $perms->toArray());
121
122 4
        return view('admin.roleSettings', [
123 4
            'roles' => $roles,
124 4
            'perms' => $perms,
125
        ]);
126
    }
127
128 8
    public function submitRoleSettings(Request $request)
129
    {
130 8
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data: ', $request->toArray());
131 8
        $this->authorize('hasAccess', 'Manage User Roles');
132
133 8
        $request->validate([
134 8
            'name'        => 'required',
135
            'description' => 'required',
136
            'permissions' => 'required',
137
        ]);
138
139 8
        if($request->role_id)
140
        {
141 4
            $role = UserRoleType::find($request->role_id);
142 4
            if($role->allow_edit)
143
            {
144 2
                $role->update([
145 2
                    'name'        => $request->name,
146 2
                    'description' => $request->description,
147
                ]);
148 2
                foreach($request->permissions as $perm)
149
                {
150 2
                    UserRolePermissions::where('role_id', $request->role_id)->where('perm_type_id', $perm['perm_type_id'])->update([
151 2
                        'allow' => isset($perm['allow']) && $perm['allow'] ? 1 : 0,
152
                    ]);
153
                }
154
155 2
                Log::notice('Role '.$request->name.' (ID '.$request->role_id.') updated by '.Auth::user()->full_name);
156 2
                return response()->json(['success' => true]);
157
            }
158
159 2
            Log::warning('Role '.$request->name.' could not be Edited by '.Auth::user()->full_name);
160 2
            return response()->json(['success' => false, 'reason' => 'Unable to Edit this Role']);
161
        }
162
163 4
        $role = UserRoleType::create(
164
        [
165 4
            'name'        => $request->name,
166 4
            'description' => $request->description,
167
        ]);
168 4
        foreach ($request->permissions as $perm)
169
        {
170 4
            UserRolePermissions::create([
171 4
                'role_id'      => $role->role_id,
172 4
                'perm_type_id' => $perm['perm_type_id'],
173 4
                'allow'        => isset($perm['allow']) && $perm['allow'] ? 1 : 0,
174
            ]);
175
        }
176
177 4
        Log::notice('New role "'.$role->name.'" created by '.Auth::user()->full_name);
178 4
        return response()->json(['success' => true]);
179
    }
180
}
181