Test Failed
Push — master ( 24a1f5...1bb6c6 )
by Ron
01:55
created

app/Http/Controllers/UserController.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Exception;
6
use Illuminate\Http\Request;
7
use Illuminate\Support\Facades\Auth;
8
use Illuminate\Validation\Rule;
9
use Illuminate\Support\Facades\Log;
10
use Illuminate\Support\Facades\Mail;
11
use DB;
12
use App\Role;
13
use App\User;
14
use App\UserLogins;
15
use App\UserInitialize;
16
use App\Mail\InitializeUser;
17
18
class UserController extends Controller
19
{
20
    public function __construct()
21
    {
22
        $this->middleware('auth')->except('initializeUser', 'submitInitializeUser');
23
    }
24
    
25
    //  Show the list of current users
26
    public function index()
27
    {
28
        $users = User::where('active', 1)->with('UserLogins')->get();
29
30
        return view('admin.userList', [
31
            'users' => $users
32
        ]);
33
    }
34
35
    //  New user form
36
    public function create()
37
    {
38
        $roles = Role::all();
39
        
40
        $roleArr = [];
41
        foreach($roles as $role)
42
        {
43
            if($role->role_id == 1 && Auth::user()->role_id != 1)
44
            {
45
                continue;
46
            }
47
            else
48
            {
49
                $roleArr[$role->role_id] = $role->name;
50
            }
51
        }
52
        
53
        return view('admin.form.newUser', [
54
            'roles' => $roleArr
55
        ]);
56
    }
57
58
    //  Create the new user
59
    public function store(Request $request)
60
    {
61
        //  Validate the new user form
62
        $request->validate([
63
            'username'   => 'required|unique:users|regex:/^[a-zA-Z0-9_]*$/',
64
            'first_name' => 'required',
65
            'last_name'  => 'required',
66
            'email'      => 'required|unique:users',
67
//            'password'   => 'required|string|min:6|confirmed'
68
        ]);
69
        
70
        //  Create the user
71
        $newUser = User::create([
72
            'username'   => $request->username,
73
            'first_name' => $request->first_name,
74
            'last_name'  => $request->last_name,
75
            'email'      => $request->email,
76
            'password'   => bcrypt(strtolower(str_random(15))),
77
            'active'     => 1
78
        ]);
79
        
80
        $userID = $newUser->user_id;
81
        
82
        //  Assign the users role
83
        DB::insert('INSERT INTO `user_role` (`user_id`, `role_id`) VALUES (?, ?)', [$userID, $request->role]);
84
        
85
        //  Create the setup user link
86
        $hash = strtolower(str_random(30));
87
        UserInitialize::create([
88
            'username' => $request->username,
89
            'token'    => $hash
90
        ]);
91
        
92
        //  Email the new user
93
        
94
        try
95
        {
96
            Mail::to($request->email)->send(new InitializeUser($hash, $request->username, $request->first_name.' '.$request->last_name));
97
        }
98
        catch(Exception $e)
99
        {
100
            report($e);
101
        }
102
        
103
        Log::info('New User Created', ['created_by' => Auth::user()->user_id, 'new_id' => $userID]);
104
        
105
        return redirect(route('admin.users.index'))->with('success', 'User Created Successfully');
106
    }
107
    
108
    //  Finish setting up the user account by making them assign their password
109
    public function initializeUser($hash)
110
    {
111
        $this->middleware('guest');
112
        
113
        //  Validate the hash token
114
        $user = UserInitialize::where('token', $hash)->get();
115
        
116
        if($user->isEmpty())
117
        {
118
            return abort(404);
119
        }
120
        
121
        return view('account.form.initializePassword', ['hash' => $hash]);
122
    }
123
    
124
    //  Submit the password change and log in the user
125
    public function submitInitializeUser($hash, Request $request)
126
    {
127
        //  Verify that the link matches the assigned email address
128
        $valid = UserInitialize::where('token', $hash)->first();
129
        if(empty($valid))
130
        {
131
            return abort(404);
0 ignored issues
show
Are you sure the usage of abort(404) is correct as it seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
132
        }
133
        
134
        //  Validate the form
135
        $request->validate([
136
            'username' => [
137
                'required',
138
                Rule::in([$valid->username]),
139
            ],
140
            'newPass'  => 'required|string|min:6|confirmed'
141
        ]);
142
        
143
        //  Get the users information
144
        $userData = User::where('username', $valid->username)->first();
145
        
146
         //  Update the password
147
        User::find($userData->user_id)->update(
148
        [
149
            'password'   => bcrypt($request->newPass)
150
        ]);
151
        
152
        //  Remove the initialize instance
153
        UserInitialize::find($valid->id)->delete();
154
        
155
        //  Log the change
156
        Log::info('User has setup account', ['user_id' => $userData->user_id]);
157
        
158
        //  Log in the user
159
        Auth::loginUsingID($userData->user_id);
160
        
161
        //  Redirect the user to the dashboard
162
        return redirect(route('dashboard'));
163
    }
164
165
    //  Show the for to edit a users password
166
    public function show($id)
167
    {
168
        $name = User::find($id);
169
        $name = $name->first_name.' '.$name->last_name;
170
        return view('admin.form.resetPassword', [
171
            'id'   => $id,
172
            'user' => $name
173
        ]);
174
    }
175
    
176
    //  Submit the reset password form
177
    public function resetPassword(Request $request, $id)
178
    {
179
        $request->validate([
180
            'password'   => 'required|string|min:6|confirmed'
181
        ]);
182
        
183
         //  Update the user data
184
        User::find($id)->update(
185
        [
186
            'password'   => bcrypt($request->password)
187
        ]);
188
189
        
190
        return redirect(route('admin.users.index'))->with('success', 'User Password Updated Successfully');
191
    }
192
193
    //  Edit an existing user
194
    public function edit($id)
195
    {
196
        $roles = Role::all();
197
        $userData = User::find($id);
198
        $userRole = DB::select('SELECT `role_id` FROM `user_role` WHERE `user_id` = ?', [$id])[0]->role_id;
199
        
200
        $roleArr = [];
201
        foreach($roles as $role)
202
        {
203
            if($role->role_id == 1 && Auth::user()->role_id != 1)
204
            {
205
                continue;
206
            }
207
            else
208
            {
209
                $roleArr[$role->role_id] = $role->name;
210
            }
211
        }
212
        
213
        return view('admin.form.editUser', [
214
            'userID' => $id,
215
            'roles'  => $roleArr,
216
            'role'   => $userRole,
217
            'user'   => $userData
218
        ]);
219
    }
220
221
    //  Submit the updated user
222
    public function update(Request $request, $id)
223
    {
224
        $request->validate([
225
            'username'   => [
226
                                'required',
227
                                Rule::unique('users')->ignore($id, 'user_id')
228
                            ],
229
            'first_name' => 'required',
230
            'last_name'  => 'required',
231
            'email'      => [
232
                                'required',
233
                                Rule::unique('users')->ignore($id, 'user_id')
234
                            ],
235
        ]);
236
        
237
        //  Update the user data
238
        User::find($id)->update(
239
        [
240
            'username'   => $request->username,
241
            'first_name' => $request->first_name,
242
            'last_name'  => $request->last_name,
243
            'email'      => $request->email
244
        ]);
245
        
246
        //  Update the user's role
247
        DB::update('UPDATE `user_role` SET `role_id` = ? WHERE `user_id` = ?', [$request->role, $id]);
248
        
249
        return redirect(route('admin.users.index'))->with('success', 'User Updated Successfully');
250
    }
251
252
    //  Deactivae an active user
253
    public function destroy($id)
254
    {
255
         //  Update the user data
256
        User::find($id)->update(
257
        [
258
            'active'   => 0
259
        ]);
260
    }
261
}
262