Completed
Push — develop ( 10b573...34b970 )
by Abdelrahman
09:38
created

UsersController::form()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 23
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 17
nc 4
nop 2
dl 0
loc 23
rs 9.0856
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cortex\Fort\Http\Controllers\Adminarea;
6
7
use Illuminate\Http\Request;
8
use Rinvex\Fort\Models\User;
9
use Spatie\MediaLibrary\Models\Media;
10
use Illuminate\Foundation\Http\FormRequest;
11
use Cortex\Foundation\DataTables\LogsDataTable;
12
use Cortex\Fort\DataTables\Adminarea\UsersDataTable;
13
use Cortex\Foundation\DataTables\ActivitiesDataTable;
14
use Cortex\Fort\Http\Requests\Adminarea\UserFormRequest;
15
use Cortex\Foundation\Http\Controllers\AuthorizedController;
16
use Cortex\Fort\Http\Requests\Adminarea\UserAttributesFormRequest;
17
18
class UsersController extends AuthorizedController
19
{
20
    /**
21
     * {@inheritdoc}
22
     */
23
    protected $resource = 'users';
24
25
    /**
26
     * Display a listing of the resource.
27
     *
28
     * @param \Cortex\Fort\DataTables\Adminarea\UsersDataTable $usersDataTable
29
     *
30
     * @return \Illuminate\Http\JsonResponse|\Illuminate\View\View
31
     */
32
    public function index(UsersDataTable $usersDataTable)
33
    {
34
        return $usersDataTable->with([
35
            'id' => 'adminarea-users-index-table',
36
            'phrase' => trans('cortex/fort::common.users'),
37
        ])->render('cortex/foundation::adminarea.pages.datatable');
38
    }
39
40
    /**
41
     * Get a listing of the resource logs.
42
     *
43
     * @param \Rinvex\Fort\Models\User $user
44
     *
45
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
0 ignored issues
show
Documentation introduced by
Should the return type not be \Illuminate\Http\JsonRes...e|\Illuminate\View\View?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
46
     */
47
    public function logs(User $user, LogsDataTable $logsDataTable)
48
    {
49
        return $logsDataTable->with([
50
            'resource' => $user,
51
            'tabs' => 'adminarea.users.tabs',
52
            'phrase' => trans('cortex/fort::common.users'),
53
            'id' => "adminarea-users-{$user->getKey()}-logs-table",
54
        ])->render('cortex/foundation::adminarea.pages.datatable-logs');
55
    }
56
57
    /**
58
     * Get a listing of the resource activities.
59
     *
60
     * @param \Rinvex\Fort\Models\User $user
61
     *
62
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
0 ignored issues
show
Documentation introduced by
Should the return type not be \Illuminate\Http\JsonRes...e|\Illuminate\View\View?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
63
     */
64
    public function activities(User $user, ActivitiesDataTable $activitiesDataTable)
65
    {
66
        return $activitiesDataTable->with([
67
            'resource' => $user,
68
            'tabs' => 'adminarea.users.tabs',
69
            'phrase' => trans('cortex/fort::common.users'),
70
            'id' => "adminarea-users-{$user->getKey()}-activities-table",
71
        ])->render('cortex/foundation::adminarea.pages.datatable-logs');
72
    }
73
74
    /**
75
     * Show the form for create/update of the given resource attributes.
76
     *
77
     * @param \Illuminate\Http\Request $request
78
     * @param \Rinvex\Fort\Models\User $user
79
     *
80
     * @return \Illuminate\View\View
81
     */
82
    public function attributes(Request $request, User $user)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
83
    {
84
        return view('cortex/fort::adminarea.pages.user-attributes', compact('user'));
85
    }
86
87
    /**
88
     * Process the account update form.
89
     *
90
     * @param \Cortex\Fort\Http\Requests\Adminarea\UserAttributesFormRequest $request
91
     *
92
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
93
     */
94
    public function updateAttributes(UserAttributesFormRequest $request)
95
    {
96
        $data = $request->validated();
97
        $currentUser = $request->user($this->getGuard());
98
99
        // Update profile
100
        $currentUser->fill($data)->save();
101
102
        return intend([
103
            'back' => true,
104
            'with' => ['success' => trans('cortex/fort::messages.account.updated_attributes')],
105
        ]);
106
    }
107
108
    /**
109
     * Show the form for create/update of the given resource.
110
     *
111
     * @param \Illuminate\Http\Request $request
112
     * @param \Rinvex\Fort\Models\User $user
113
     *
114
     * @return \Illuminate\View\View
115
     */
116
    public function form(Request $request, User $user)
117
    {
118
        $countries = collect(countries())->map(function ($country, $code) {
119
            return [
120
                'id' => $code,
121
                'text' => $country['name'],
122
                'emoji' => $country['emoji'],
123
            ];
124
        })->values();
125
        $authUser = $request->user($this->getGuard());
126
        $languages = collect(languages())->pluck('name', 'iso_639_1');
127
        $genders = ['male' => trans('cortex/fort::common.male'), 'female' => trans('cortex/fort::common.female')];
128
129
        $roles = $authUser->isSuperadmin()
130
            ? app('rinvex.fort.role')->all()->pluck('name', 'id')->toArray()
131
            : $authUser->roles->pluck('name', 'id')->toArray();
132
133
        $abilities = $authUser->isSuperadmin()
134
            ? app('rinvex.fort.ability')->all()->groupBy('resource')->map->pluck('name', 'id')->toArray()
135
            : $authUser->allAbilities->groupBy('resource')->map->pluck('name', 'id')->toArray();
136
137
        return view('cortex/fort::adminarea.pages.user', compact('user', 'abilities', 'roles', 'countries', 'languages', 'genders'));
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 133 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
138
    }
139
140
    /**
141
     * Store a newly created resource in storage.
142
     *
143
     * @param \Cortex\Fort\Http\Requests\Adminarea\UserFormRequest $request
144
     *
145
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
146
     */
147
    public function store(UserFormRequest $request)
148
    {
149
        return $this->process($request, app('rinvex.fort.user'));
150
    }
151
152
    /**
153
     * Update the given resource in storage.
154
     *
155
     * @param \Cortex\Fort\Http\Requests\Adminarea\UserFormRequest $request
156
     * @param \Rinvex\Fort\Models\User                             $user
157
     *
158
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
159
     */
160
    public function update(UserFormRequest $request, User $user)
161
    {
162
        return $this->process($request, $user);
163
    }
164
165
    /**
166
     * Process the form for store/update of the given resource.
167
     *
168
     * @param \Illuminate\Foundation\Http\FormRequest $request
169
     * @param \Rinvex\Fort\Models\User                $user
170
     *
171
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
172
     */
173
    protected function process(FormRequest $request, User $user)
174
    {
175
        // Prepare required input fields
176
        $data = $request->validated();
177
178
        ! $request->hasFile('profile_picture')
179
        || $user->addMediaFromRequest('profile_picture')
180
                ->sanitizingFileName(function ($fileName) {
181
                    return md5($fileName).'.'.pathinfo($fileName, PATHINFO_EXTENSION);
182
                })
183
                ->toMediaCollection('profile_picture', config('cortex.fort.media.disk'));
184
185
        ! $request->hasFile('cover_photo')
186
        || $user->addMediaFromRequest('cover_photo')
187
                ->sanitizingFileName(function ($fileName) {
188
                    return md5($fileName).'.'.pathinfo($fileName, PATHINFO_EXTENSION);
189
                })
190
                ->toMediaCollection('cover_photo', config('cortex.fort.media.disk'));
191
192
        // Save user
193
        $user->fill($data)->save();
194
195
        return intend([
196
            'url' => route('adminarea.users.index'),
197
            'with' => ['success' => trans('cortex/fort::messages.user.saved', ['username' => $user->username])],
198
        ]);
199
    }
200
201
    /**
202
     * Delete the given resource from storage.
203
     *
204
     * @param \Rinvex\Fort\Models\User $user
205
     *
206
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
207
     */
208
    public function delete(User $user)
209
    {
210
        $user->delete();
211
212
        return intend([
213
            'url' => route('adminarea.users.index'),
214
            'with' => ['warning' => trans('cortex/fort::messages.user.deleted', ['username' => $user->username])],
215
        ]);
216
    }
217
218
    /**
219
     * Delete the given resource from storage.
220
     *
221
     * @param \Rinvex\Fort\Models\User          $user
222
     * @param \Spatie\MediaLibrary\Models\Media $media
223
     *
224
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
225
     */
226
    public function deleteMedia(User $user, Media $media)
227
    {
228
        $user->media()->where($media->getKeyName(), $media->getKey())->first()->delete();
229
230
        return intend([
231
            'url' => route('adminarea.users.edit', ['user' => $user]),
232
            'with' => ['warning' => trans('cortex/fort::messages.user.media_deleted')],
233
        ]);
234
    }
235
}
236