Passed
Push — dev5 ( df64bd...8206b9 )
by Ron
07:37
created

AdminController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 4
rs 10
ccs 3
cts 3
cp 1
crap 1
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\Settings;
6
use Carbon\Carbon;
7
use App\User;
8
use Illuminate\Http\Request;
9
use Illuminate\Support\Facades\Log;
10
use Illuminate\Support\Facades\Auth;
11
use App\Http\Controllers\Controller;
12
use Illuminate\Support\Facades\Route;
13
14
use App\Http\Resources\UserCollection;
15
use App\UserRolePermissionTypes;
16
use App\UserRolePermissions;
17
use App\UserRoleType;
18
19
class AdminController extends Controller
20
{
21 62
    public function __construct()
22
    {
23
        //  Only Authorized users with specific admin permissions are allowed
24 62
        $this->middleware(['auth', 'can:allow_admin']);
25 62
    }
26
27
    //  Admin landing page
28 10
    public function index()
29
    {
30 10
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
31 10
        return view('admin.index');
32
    }
33
34
    //  Display all file links
35 2
    public function userLinks()
36
    {
37 2
        $userLinks = new UserCollection(
38 2
                        User::withCount([
39 2
                                'FileLinks',
40
                                'FileLinks as expired_file_links_count' => function($query)
41
                                {
42 2
                                    $query->where('expire', '<', Carbon::now());
43 2
                                }
44
                            ])
45 2
                            ->get()
46 2
                            ->makeVisible('user_id')
47
                    );
48
49 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
50 2
        return view('admin.userLinks', [
51 2
            'links' => $userLinks,
52
        ]);
53
    }
54
55
    //  Show the links for the selected user
56 2
    public function showLinks($id)
57
    {
58 2
        $user     = User::find($id);
59
60 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
61 2
        return view('admin.linkDetails', [
62 2
            'user' => $user,
63
            // 'name'   => $userName
64
        ]);
65
    }
66
67
    //  Get the form to change the user password policy
68 4
    public function passwordPolicy()
69
    {
70 4
        $this->authorize('hasAccess', 'Manage Users');
71 4
        return view('admin.userSecurity', [
72 4
            'passExpire' => config('users.passExpires'),
73
        ]);
74
    }
75
76
    //  Submit the form to change the user password policy
77 4
    public function submitPolicy(Request $request)
78
    {
79 4
        $this->authorize('hasAccess', 'Manage Users');
80
81 4
        $request->validate([
82 4
            'passExpire' => 'required|numeric'
83
        ]);
84
85
        //  Determine if the password expires field is updated
86 4
        $oldExpire = config('users.passExpires');
87 4
        if ($request->passExpire != $oldExpire) {
88
            //  Update the setting in the database
89 4
            Settings::where('key', 'users.passExpires')->update([
90 4
                'value' => $request->passExpire
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
            Log::debug('Route ' . Route::currentRouteName() . ' visited by User ID-' . Auth::user()->user_id);
107 4
            Log::debug('Submitted Data - ', $request->toArray());
108 4
            Log::notice('User Settings have been changed by User ID-' . Auth::user()->user_id);
109 4
            return redirect()->back()->with('success', 'User Security Updated');
110
        }
111
    }
112
113 4
    public function roleSettings()
114
    {
115 4
        $this->authorize('hasAccess', 'Manage User Roles');
116
        $roles = UserRoleType::with(['UserRolePermissions' => function($query)
117
        {
118 4
            $query->join('user_role_permission_types', 'user_role_permission_types.perm_type_id', '=', 'user_role_permissions.perm_type_id');
119 4
        }])->get();
120 4
        $perms = UserRolePermissionTypes::all();
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
        $this->authorize('hasAccess', 'Manage User Roles');
131
132 8
        $request->validate([
133
            // 'role_id' => 'required',
134 8
            'name'        => 'required',
135
            'description' => 'required',
136
            'permissions' => 'required',
137
        ]);
138
139 8
        Log::debug('submitted data', $request->toArray());
140
141 8
        if($request->role_id)
142
        {
143 4
            $role = UserRoleType::find($request->role_id);
144 4
            if($role->allow_edit)
145
            {
146 2
                $role->update([
147 2
                    'name'        => $request->name,
148 2
                    'description' => $request->description,
149
                ]);
150 2
                foreach($request->permissions as $perm)
151
                {
152 2
                    UserRolePermissions::where('role_id', $request->role_id)->where('perm_type_id', $perm['perm_type_id'])->update([
153 2
                        'allow' => isset($perm['allow']) && $perm['allow'] ? 1 : 0,
154
                    ]);
155
                }
156
157 2
                return response()->json(['success' => true]);
158
            }
159
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
        return response()->json(['success' => true]);
178
    }
179
}
180