Test Failed
Push — dev5 ( e927b9...4863c0 )
by Ron
06:38
created

UserController::initializeUser()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 9
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 17
ccs 0
cts 10
cp 0
crap 6
rs 9.9666
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use DB;
6
use Mail;
7
use App\Role;
0 ignored issues
show
Bug introduced by
The type App\Role was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use App\User;
9
use Carbon\Carbon;
10
use App\UserInitialize;
11
use Illuminate\Support\Str;
12
use App\Mail\InitializeUser;
13
use Illuminate\Http\Request;
14
use Illuminate\Validation\Rule;
15
use Illuminate\Support\Facades\Log;
16
use Illuminate\Support\Facades\Auth;
17
use App\Http\Controllers\Controller;
18
use Illuminate\Support\Facades\Route;
19
use Illuminate\Support\Facades\Notification;
20
use App\Notifications\NewUserEmail;
21
22
use App\UserRoleType;
23
24
class UserController extends Controller
25
{
26
    private $user;
27
    //  Constructor sets up middleware
28
    public function __construct()
29
    {
30
        $this->middleware('auth')->except('initializeUser', 'submitInitializeUser');
31
        $this->middleware(function ($request, $next) {
32
            $this->user = auth()->user();  //  TODO - is this correct????
33
            $this->authorize('hasAccess', 'Manage Users');
34
            return $next($request);
35
        });
36
    }
37
38
    //  Show the list of current users to edit
39
    public function index()
40
    {
41
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
42
        return view('admin.userIndex', [
43
            'link' => 'admin.user.edit'
44
        ]);
45
    }
46
47
    //  Check if a username is in use
48
    public function checkUser($username, $type)
49
    {
50
        $user = User::where($type, $username)->first();
51
52
        if(!$user)
53
        {
54
            return response()->json(['duplicate' => false]);
55
        }
56
57
        return response()->json([
58
            'duplicate' => true,
59
            'user'      => $user->full_name,
60
            'active'    => $user->active,
61
        ]);
62
    }
63
64
    //  Show the Add User form
65
    public function create()
66
    {
67
        $roles = UserRoleType::all(); // Role::all();
68
69
        $roleArr = [];
70
        foreach($roles as $role)
71
        {
72
            if($role->role_id == 1 && Auth::user()->role_id != 1)
73
            {
74
                continue;
75
            }
76
            else if($role->role_id == 2 && Auth::user()->role_id > 1)
77
            {
78
                continue;
79
            }
80
            else
81
            {
82
                // $roleArr[$role->role_id] = $role->name;
83
                $roleArr[] = [
84
                    'value' => $role->role_id,
85
                    'text'  => $role->name,
86
                ];
87
            }
88
        }
89
90
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
91
        return view('admin.newUser', [
92
            'roles' => $roleArr
93
        ]);
94
    }
95
96
    //  Submit the Add User form
97
    public function store(Request $request)
98
    {
99
        //  Validate the new user form
100
        $request->validate([
101
            'role'       => 'required|numeric',  //  TODO - add validation rule - is in user roles table
102
            'username'   => 'required|unique:users|regex:/^[a-zA-Z0-9_]*$/',
103
            'first_name' => 'required',
104
            'last_name'  => 'required',
105
            'email'      => 'required|unique:users',
106
        ]);
107
108
        //  Create the user
109
        $newUser = User::create([
110
            'role_id'    => $request->role,
111
            'username'   => $request->username,
112
            'first_name' => $request->first_name,
113
            'last_name'  => $request->last_name,
114
            'email'      => $request->email,
115
            'password'   => bcrypt(strtolower(Str::random(15))),
116
            'active'     => 1
117
        ]);
118
119
        $userID = $newUser->user_id;
120
121
        //  Create the setup user link
122
        $hash = strtolower(Str::random(30));
123
        UserInitialize::create([
124
            'username' => $request->username,
125
            'token'    => $hash
126
        ]);
127
128
        //  Email the new user
129
        // Mail::to($request->email)->send(new InitializeUser($hash, $request->username, $request->first_name.' '.$request->last_name));
130
        Notification::send($newUser, new NewUserEmail($newUser, $hash));
131
132
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
133
        Log::debug('User Data - ', $newUser->toArray());
134
        Log::notice('New User ID-'.$userID.' Created by ID-'.Auth::user()->user_id);
135
136
        // return redirect()->back()->with('success', 'New User Created');
137
        return response()->json(['success' => true]);
138
    }
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
    //  List all active or inactive users
163
    public function show($type)
164
    {
165
        $res = '';
166
        if($type == 'active')
167
        {
168
            $res = User::where('active', true)->with('UserLogins')->get();
169
        }
170
171
        $userList = [];
172
        foreach($res as $r)
173
        {
174
            $userList[] = [
175
                'user_id' => $r->user_id,
176
                'user'    => $r->first_name.' '.$r->last_name,
177
                'email'   => $r->email,
178
                'last'    => $r->UserLogins->last() ? date('M j, Y - g:i A', strtotime($r->UserLogins->last()->created_at)) : 'Never'
179
            ];
180
        }
181
182
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
183
        Log::debug('User List - ', $userList);
184
        return response()->json($userList);
185
    }
186
187
    //  Open the edit user form
188
    public function edit($id)
189
    {
190
        $roles    = Role::all();
191
        $userData = User::find($id);
192
        $userRole = DB::select('SELECT `role_id` FROM `user_role` WHERE `user_id` = ?', [$id])[0]->role_id;
193
194
        $roleArr = [];
195
        foreach($roles as $role)
196
        {
197
            if($role->role_id == 1 && !Auth::user()->hasAnyRole(['installer']))
198
            {
199
                continue;
200
            }
201
            else
202
            {
203
                $roleArr[$role->role_id] = $role->name;
204
            }
205
        }
206
207
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
208
        Log::debug('Edit user form opened for user ID-'.$id);
209
        return view('admin.editUser', [
210
            'userID' => $id,
211
            'roles'  => $roleArr,
212
            'role'   => $userRole,
213
            'user'   => $userData
214
        ]);
215
    }
216
217
    //  Submit the update user form
218
    public function update(Request $request, $id)
219
    {
220
        $request->validate([
221
            'username'   => [
222
                                'required',
223
                                Rule::unique('users')->ignore($id, 'user_id')
224
                            ],
225
            'first_name' => 'required',
226
            'last_name'  => 'required',
227
            'email'      => [
228
                                'required',
229
                                Rule::unique('users')->ignore($id, 'user_id')
230
                            ],
231
        ]);
232
233
        //  Update the user data
234
        User::find($id)->update(
235
        [
236
            'username'   => $request->username,
237
            'first_name' => $request->first_name,
238
            'last_name'  => $request->last_name,
239
            'email'      => $request->email
240
        ]);
241
242
        //  Update the user's role
243
        DB::update('UPDATE `user_role` SET `role_id` = ? WHERE `user_id` = ?', [$request->role, $id]);
244
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
245
        Log::debug('Edit user form submitted for User ID-'.$id.'  Data - ', $request->toArray());
246
        Log::notice('User ID-'.$id.' has updated their information.');
247
        return redirect(route('admin.user.index'))->with('success', 'User Updated Successfully');
248
    }
249
250
    //  List the active users to change the password for
251
    public function passwordList()
252
    {
253
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
254
        return view('admin.userIndex', [
255
            'link' => 'admin.changePassword'
256
        ]);
257
    }
258
259
    //  Change password form
260
    public function changePassword($id)
261
    {
262
        $name = User::find($id);
263
        $name = $name->first_name.' '.$name->last_name;
264
265
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
266
        Log::debug('Change change password form opened for User ID-'.$id);
267
        return view('admin.changePassword', [
268
            'id'   => $id,
269
            'user' => $name
270
        ]);
271
    }
272
273
    //  Submit the change password form
274
    public function submitPassword(Request $request, $id)
275
    {
276
        $request->validate([
277
            'password'   => 'required|string|min:6|confirmed'
278
        ]);
279
280
        $nextChange = isset($request->force_change) && $request->force_change == 'on' ? Carbon::now()->subDay() : null;
281
282
            //  Update the user data
283
        User::find($id)->update(
284
        [
285
            'password'         => bcrypt($request->password),
286
            'password_expires' => $nextChange
287
        ]);
288
289
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
290
        Log::debug('Password Change form submitted for user ID-'.$id.' Data - ', $request->toArray());
291
        Log::info('User ID-'.$id.' has changed their password.');
292
        return redirect(route('admin.user.index'))->with('success', 'User Password Updated Successfully');
293
    }
294
295
    //  Bring up the users that are available to deactivate
296
    public function disable()
297
    {
298
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
299
        return view('admin.userIndex', [
300
            'link' => 'admin.confirmDisable'
301
        ]);
302
    }
303
304
    //  Confirm to disable the user
305
    public function confirm($id)
306
    {
307
        $name = User::find($id);
308
        $name = $name->first_name.' '.$name->last_name;
309
310
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
311
        return view('admin.disableUser', [
312
            'id'   => $id,
313
            'name' => $name
314
        ]);
315
    }
316
317
    //  Disable the user
318
    public function destroy($id)
319
    {
320
        User::find($id)->update([
321
            'active' => 0
322
        ]);
323
324
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
325
        Log::notice('User ID-'.$id.' disabled by '.Auth::user()->user_id);
326
327
        return redirect(route('admin.user.index'))->with('success', 'User Deactivated Successfully');
328
    }
329
}
330