Completed
Pull Request — dev (#235)
by Alies
13:26 queued 06:27
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\UserRepository;
11
12
class UserController extends BackendController
13
{
14
    /**
15
     * @var UserRepository
16
     */
17
    protected $users;
18
19
    /**
20
     * Create a new controller instance.
21
     *
22
     * @param UserRepository                             $users
23
     */
24
    public function __construct(UserRepository $users)
25
    {
26
        $this->users = $users;
27
    }
28
29
    public function getActiveUserCounter()
30
    {
31
        return $this->users->query()->whereActive(true)->count();
32
    }
33
34
    /**
35
     * Show the application dashboard.
36
     *
37
     * @param Request $request
38
     *
39
     * @throws \Exception
40
     *
41
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Symfony\Component\HttpFoundation\BinaryFileResponse
42
     */
43
    public function search(Request $request)
44
    {
45
        $requestSearchQuery = new RequestSearchQuery($request, $this->users->query(), [
46
            'name',
47
            'email',
48
        ]);
49
50
        if ($request->get('exportData')) {
51
            return $requestSearchQuery->export([
52
                'name',
53
                'email',
54
                'active',
55
                'last_access_at',
56
                'created_at',
57
                'updated_at',
58
            ],
59
                [
60
                    __('validation.attributes.name'),
61
                    __('validation.attributes.email'),
62
                    __('validation.attributes.active'),
63
                    __('labels.last_access_at'),
64
                    __('labels.created_at'),
65
                    __('labels.updated_at'),
66
                ],
67
                'users');
68
        }
69
70
        return $requestSearchQuery->result([
71
            'id',
72
            'name',
73
            'email',
74
            'active',
75
            'last_access_at',
76
            'created_at',
77
            'updated_at',
78
        ]);
79
    }
80
81
    /**
82
     * @param User $user
83
     *
84
     * @return User
85
     */
86
    public function show(User $user)
87
    {
88
        if (! $user->can_edit) {
89
            // Only Super admin can access himself
90
            abort(403);
91
        }
92
93
        return $user;
94
    }
95
96
    /**
97
     * @param StoreUserRequest $request
98
     *
99
     * @return mixed
100
     */
101
    public function store(StoreUserRequest $request)
102
    {
103
        $this->authorize('create users');
104
105
        $this->users->store($request->input());
106
107
        return $this->redirectResponse($request, __('alerts.backend.users.created'));
108
    }
109
110
    /**
111
     * @param User              $user
112
     * @param UpdateUserRequest $request
113
     *
114
     * @throws \Illuminate\Database\Eloquent\MassAssignmentException
115
     *
116
     * @return mixed
117
     */
118
    public function update(User $user, UpdateUserRequest $request)
119
    {
120
        $this->authorize('edit users');
121
122
        $this->users->update($user, $request->input());
123
124
        return $this->redirectResponse($request, __('alerts.backend.users.updated'));
125
    }
126
127
    /**
128
     * @param User    $user
129
     * @param Request $request
130
     *
131
     * @return mixed
132
     */
133
    public function destroy(User $user, Request $request)
134
    {
135
        $this->authorize('delete users');
136
137
        $this->users->destroy($user);
138
139
        return $this->redirectResponse($request, __('alerts.backend.users.deleted'));
140
    }
141
142
    /**
143
     * @param User $user
144
     *
145
     * @return mixed
146
     */
147
    public function impersonate(User $user)
148
    {
149
        $this->authorize('impersonate users');
150
151
        return $this->users->impersonate($user);
152
    }
153
154
    /**
155
     * @param \Illuminate\Http\Request $request
156
     *
157
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
158
     */
159
    public function batchAction(Request $request)
160
    {
161
        $action = $request->get('action');
162
        $ids = $request->get('ids');
163
164
        switch ($action) {
165
            case 'destroy':
166
                $this->authorize('delete users');
167
168
                $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

168
                $this->users->batchDestroy(/** @scrutinizer ignore-type */ $ids);
Loading history...
169
170
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_destroyed'));
171
                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...
172
            case 'enable':
173
                $this->authorize('edit users');
174
175
                $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

175
                $this->users->batchEnable(/** @scrutinizer ignore-type */ $ids);
Loading history...
176
177
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_enabled'));
178
                break;
179
            case 'disable':
180
                $this->authorize('edit users');
181
182
                $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

182
                $this->users->batchDisable(/** @scrutinizer ignore-type */ $ids);
Loading history...
183
184
                return $this->redirectResponse($request, __('alerts.backend.users.bulk_disabled'));
185
                break;
186
        }
187
188
        return $this->redirectResponse($request, __('alerts.backend.actions.invalid'), 'error');
189
    }
190
191
    public function activeToggle(User $user)
192
    {
193
        $this->authorize('edit users');
194
        $user->update(['active' => ! $user->active]);
195
    }
196
}
197