UserController::edit()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 8
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Itstructure\LaRbac\Http\Controllers;
4
5
use Illuminate\Foundation\Auth\User as Authenticatable;
6
use Itstructure\LaRbac\Helpers\Helper;
7
use Itstructure\LaRbac\Models\Role;
8
use Itstructure\LaRbac\Http\Requests\{
9
    UpdateUser as UpdateUserRequest,
10
    Delete as DeleteUserRequest
11
};
12
use Itstructure\GridView\DataProviders\EloquentDataProvider;
13
14
/**
15
 * Class UserController
16
 *
17
 * @package Itstructure\LaRbac\Http\Controllers
18
 *
19
 * @author Andrey Girnik <[email protected]>
20
 */
21
class UserController extends Controller
22
{
23
    /**
24
     * @var string
25
     */
26
    private $_userModelClass;
27
28
    /**
29
     * UserController constructor.
30
     */
31
    public function __construct()
32
    {
33
        $this->_userModelClass = config('rbac.userModelClass');
34
    }
35
36
    /**
37
     * Get list of all users.
38
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
39
     */
40
    public function index()
41
    {
42
        /** @var Authenticatable $userModelObj */
43
        $userModelObj = new $this->_userModelClass();
44
45
        $dataProvider = new EloquentDataProvider($userModelObj->newQuery()->with('roles'));
46
47
        $authIdentifierName = $userModelObj->getAuthIdentifierName();
48
49
        return view('rbac::users.index', compact('dataProvider', 'authIdentifierName'));
50
    }
51
52
    /**
53
     * Render page to edit current user.
54
     * @param int $id
55
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
56
     */
57
    public function edit(int $id)
58
    {
59
        $user = $this->findOrFail($id);
60
61
        $allRoles = Role::orderBy('id', 'desc')->get();
62
        $currentRoles = old('roles') ?? $user->roles->pluck('id')->toArray();
63
64
        return view('rbac::users.edit', compact('user', 'allRoles', 'currentRoles'));
65
    }
66
67
    /**
68
     * Update current user data.
69
     * @param int $id
70
     * @param UpdateUserRequest $request
71
     * @return \Illuminate\Http\RedirectResponse
72
     */
73
    public function update(int $id, UpdateUserRequest $request)
74
    {
75
        $this->findOrFail($id)
76
            ->fill($request->all())
77
            ->save();
78
79
        return redirect()->route('show_user', compact('id'));
80
    }
81
82
    /**
83
     * Render page to show current user.
84
     * @param int $id
85
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
86
     */
87
    public function show(int $id)
88
    {
89
        $user = $this->findOrFail($id);
90
91
        return view('rbac::users.show', compact('user'));
92
    }
93
94
    /**
95
     * Delete current user data.
96
     * @param DeleteUserRequest $request
97
     * @return \Illuminate\Http\RedirectResponse
98
     */
99
    public function delete(DeleteUserRequest $request)
100
    {
101
        foreach ($request->items as $item) {
102
103
            if (!is_numeric($item) || $request->user()->getAuthIdentifier() == $item) {
104
                continue;
105
            }
106
107
            call_user_func([
108
                $this->_userModelClass,
109
                'destroy',
110
            ], $item);
111
        }
112
113
        return redirect()->route('list_users');
114
    }
115
116
    /**
117
     * Find or fail user data.
118
     * @param int $id
119
     * @return mixed
120
     */
121
    private function findOrFail(int $id)
122
    {
123
        return Helper::retrieveUserModel($this->_userModelClass, $id);
124
    }
125
}
126