Completed
Pull Request — dev (#235)
by Alies
07:44
created

UserController::getRoles()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Backend;
4
5
use App\Models\User;
6
use Illuminate\Http\Request;
7
use App\Utils\RequestSearchQuery;
8
use App\Http\Requests\StoreUserRequest;
9
use App\Http\Requests\UpdateUserRequest;
10
use App\Repositories\Contracts\RoleRepository;
0 ignored issues
show
Bug introduced by
The type App\Repositories\Contracts\RoleRepository 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...
11
use App\Repositories\Contracts\UserRepository;
12
13
class UserController extends BackendController
14
{
15
    /**
16
     * @var UserRepository
17
     */
18
    protected $users;
19
20
    /**
21
     * @var RoleRepository
22
     */
23
    protected $roles;
24
25
    /**
26
     * Create a new controller instance.
27
     *
28
     * @param UserRepository                             $users
29
     * @param \App\Repositories\Contracts\RoleRepository $roles
30
     */
31
    public function __construct(UserRepository $users, RoleRepository $roles)
32
    {
33
        $this->users = $users;
34
        $this->roles = $roles;
35
    }
36
37
    public function getActiveUserCounter()
38
    {
39
        return $this->users->query()->whereActive(true)->count();
40
    }
41
42
    /**
43
     * Show the application dashboard.
44
     *
45
     * @param Request $request
46
     *
47
     * @throws \Exception
48
     *
49
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Symfony\Component\HttpFoundation\BinaryFileResponse
50
     */
51
    public function search(Request $request)
52
    {
53
        $requestSearchQuery = new RequestSearchQuery($request, $this->users->query(), [
54
            'name',
55
            'email',
56
        ]);
57
58
        if ($request->get('exportData')) {
59
            return $requestSearchQuery->export([
60
                'name',
61
                'email',
62
                'active',
63
                'last_access_at',
64
                'created_at',
65
                'updated_at',
66
            ],
67
                [
68
                    __('validation.attributes.name'),
69
                    __('validation.attributes.email'),
70
                    __('validation.attributes.active'),
71
                    __('labels.last_access_at'),
72
                    __('labels.created_at'),
73
                    __('labels.updated_at'),
74
                ],
75
                'users');
76
        }
77
78
        return $requestSearchQuery->result([
79
            'id',
80
            'name',
81
            'email',
82
            'active',
83
            'last_access_at',
84
            'created_at',
85
            'updated_at',
86
        ]);
87
    }
88
89
    /**
90
     * @param User $user
91
     *
92
     * @return User
93
     */
94
    public function show(User $user)
95
    {
96
        if (! $user->can_edit) {
97
            // Only Super admin can access himself
98
            abort(403);
99
        }
100
101
        return $user;
102
    }
103
104
    /**
105
     * @param StoreUserRequest $request
106
     *
107
     * @return mixed
108
     */
109
    public function store(StoreUserRequest $request)
110
    {
111
        $this->authorize('create users');
112
113
        $this->users->store($request->input());
114
115
        return $this->redirectResponse($request, __('alerts.backend.users.created'));
116
    }
117
118
    /**
119
     * @param User              $user
120
     * @param UpdateUserRequest $request
121
     *
122
     * @throws \Illuminate\Database\Eloquent\MassAssignmentException
123
     *
124
     * @return mixed
125
     */
126
    public function update(User $user, UpdateUserRequest $request)
127
    {
128
        $this->authorize('edit users');
129
130
        $this->users->update($user, $request->input());
131
132
        return $this->redirectResponse($request, __('alerts.backend.users.updated'));
133
    }
134
135
    /**
136
     * @param User    $user
137
     * @param Request $request
138
     *
139
     * @return mixed
140
     */
141
    public function destroy(User $user, Request $request)
142
    {
143
        $this->authorize('delete users');
144
145
        $this->users->destroy($user);
146
147
        return $this->redirectResponse($request, __('alerts.backend.users.deleted'));
148
    }
149
150
    /**
151
     * @param User $user
152
     *
153
     * @return mixed
154
     */
155
    public function impersonate(User $user)
156
    {
157
        $this->authorize('impersonate users');
158
159
        return $this->users->impersonate($user);
160
    }
161
162
    /**
163
     * @param \Illuminate\Http\Request $request
164
     *
165
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
166
     */
167
    public function batchAction(Request $request)
168
    {
169
        $action = $request->get('action');
170
        $ids = $request->get('ids');
171
172
        switch ($action) {
173
            case 'destroy':
174
                $this->authorize('delete users');
175
176
                $this->users->batchDestroy($ids);
0 ignored issues
show
Bug introduced by
It seems like $ids can also be of type null; however, parameter $ids of App\Repositories\Contrac...ository::batchDestroy() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

176
                $this->users->batchDestroy(/** @scrutinizer ignore-type */ $ids);
Loading history...
177
178
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_destroyed'));
179
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
180
            case 'enable':
181
                $this->authorize('edit users');
182
183
                $this->users->batchEnable($ids);
0 ignored issues
show
Bug introduced by
It seems like $ids can also be of type null; however, parameter $ids of App\Repositories\Contrac...pository::batchEnable() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

183
                $this->users->batchEnable(/** @scrutinizer ignore-type */ $ids);
Loading history...
184
185
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_enabled'));
186
                break;
187
            case 'disable':
188
                $this->authorize('edit users');
189
190
                $this->users->batchDisable($ids);
0 ignored issues
show
Bug introduced by
It seems like $ids can also be of type null; however, parameter $ids of App\Repositories\Contrac...ository::batchDisable() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

190
                $this->users->batchDisable(/** @scrutinizer ignore-type */ $ids);
Loading history...
191
192
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_disabled'));
193
                break;
194
        }
195
196
        return $this->redirectResponse($request, __('alerts.backend.actions.invalid'), 'error');
197
    }
198
199
    public function activeToggle(User $user)
200
    {
201
        $this->authorize('edit users');
202
        $user->update(['active' => ! $user->active]);
203
    }
204
}
205