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

UsersController::form()   B

Complexity

Conditions 5
Paths 16

Size

Total Lines 24
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 5
eloc 18
nc 16
nop 2
dl 0
loc 24
rs 8.5125
c 3
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cortex\Fort\Http\Controllers\Managerarea;
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\Foundation\DataTables\ActivitiesDataTable;
13
use Cortex\Fort\DataTables\Managerarea\UsersDataTable;
14
use Cortex\Fort\Http\Requests\Managerarea\UserFormRequest;
15
use Cortex\Foundation\Http\Controllers\AuthorizedController;
16
use Cortex\Fort\Http\Requests\Managerarea\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\Managerarea\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' => 'managerarea-users-index-table',
36
            'phrase' => trans('cortex/fort::common.users'),
37
        ])->render('cortex/tenants::managerarea.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' => 'managerarea.attributes.tabs',
52
            'phrase' => trans('cortex/fort::common.users'),
53
            'id' => "managerarea-users-{$user->getKey()}-logs-table",
54
        ])->render('cortex/tenants::managerarea.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' => 'managerarea.attributes.tabs',
69
            'phrase' => trans('cortex/fort::common.users'),
70
            'id' => "managerarea-users-{$user->getKey()}-activities-table",
71
        ])->render('cortex/tenants::managerarea.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::managerarea.pages.user-attributes', compact('user'));
85
    }
86
87
    /**
88
     * Process the account update form.
89
     *
90
     * @param \Cortex\Fort\Http\Requests\Managerarea\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
        $owner = optional(optional(config('rinvex.tenants.active'))->owner)->getKey();
129
130
        $roles = $authUser->isSuperadmin() || $authUser->getKey() === $owner
131
            ? app('rinvex.fort.role')->all()->pluck('name', 'id')->toArray()
132
            : $authUser->roles->pluck('name', 'id')->toArray();
133
134
        $abilities = $authUser->isSuperadmin() || $authUser->getKey() === $owner
135
            ? app('rinvex.fort.role')->forAllTenants()->where('slug', 'manager')->first()->abilities->groupBy('resource')->map->pluck('name', 'id')->toArray()
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 158 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...
136
            : $authUser->allAbilities->groupBy('resource')->map->pluck('name', 'id')->toArray();
137
138
        return view('cortex/fort::managerarea.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 135 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...
139
    }
140
141
    /**
142
     * Store a newly created resource in storage.
143
     *
144
     * @param \Cortex\Fort\Http\Requests\Managerarea\UserFormRequest $request
145
     *
146
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
147
     */
148
    public function store(UserFormRequest $request)
149
    {
150
        return $this->process($request, app('rinvex.fort.user'));
151
    }
152
153
    /**
154
     * Update the given resource in storage.
155
     *
156
     * @param \Cortex\Fort\Http\Requests\Managerarea\UserFormRequest $request
157
     * @param \Rinvex\Fort\Models\User                               $user
158
     *
159
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
160
     */
161
    public function update(UserFormRequest $request, User $user)
162
    {
163
        return $this->process($request, $user);
164
    }
165
166
    /**
167
     * Process the form for store/update of the given resource.
168
     *
169
     * @param \Illuminate\Foundation\Http\FormRequest $request
170
     * @param \Rinvex\Fort\Models\User                $user
171
     *
172
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
173
     */
174
    protected function process(FormRequest $request, User $user)
175
    {
176
        // Prepare required input fields
177
        $data = $request->validated();
178
179
        ! $request->hasFile('profile_picture')
180
        || $user->addMediaFromRequest('profile_picture')
181
                ->sanitizingFileName(function ($fileName) {
182
                    return md5($fileName).'.'.pathinfo($fileName, PATHINFO_EXTENSION);
183
                })
184
                ->toMediaCollection('profile_picture', config('cortex.fort.media.disk'));
185
186
        ! $request->hasFile('cover_photo')
187
        || $user->addMediaFromRequest('cover_photo')
188
                ->sanitizingFileName(function ($fileName) {
189
                    return md5($fileName).'.'.pathinfo($fileName, PATHINFO_EXTENSION);
190
                })
191
                ->toMediaCollection('cover_photo', config('cortex.fort.media.disk'));
192
193
        // Save user
194
        $user->fill($data)->save();
195
196
        return intend([
197
            'url' => route('managerarea.users.index'),
198
            'with' => ['success' => trans('cortex/fort::messages.user.saved', ['username' => $user->username])],
199
        ]);
200
    }
201
202
    /**
203
     * Delete the given resource from storage.
204
     *
205
     * @param \Rinvex\Fort\Models\User $user
206
     *
207
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
208
     */
209
    public function delete(User $user)
210
    {
211
        $user->delete();
212
213
        return intend([
214
            'url' => route('managerarea.users.index'),
215
            'with' => ['warning' => trans('cortex/fort::messages.user.deleted', ['username' => $user->username])],
216
        ]);
217
    }
218
219
    /**
220
     * Delete the given resource from storage.
221
     *
222
     * @param \Rinvex\Fort\Models\User          $user
223
     * @param \Spatie\MediaLibrary\Models\Media $media
224
     *
225
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
226
     */
227
    public function deleteMedia(User $user, Media $media)
228
    {
229
        $user->media()->where($media->getKeyName(), $media->getKey())->first()->delete();
230
231
        return intend([
232
            'url' => route('managerarea.users.edit', ['user' => $user]),
233
            'with' => ['warning' => trans('cortex/fort::messages.user.media_deleted')],
234
        ]);
235
    }
236
}
237