Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 59
0.00% covered (danger)
0.00%
0 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
UsersController
0.00% covered (danger)
0.00%
0 / 59
0.00% covered (danger)
0.00%
0 / 8
156
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 index
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
6
 create
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 store
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
6
 edit
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 update
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
 destroy
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
 duplicate
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Controllers\Bo;
4
5use App\Http\Controllers\Controller;
6use App\Http\Requests\Bo\Users\StoreUserRequest;
7use App\Http\Requests\Bo\Users\UpdateUserRequest;
8use App\Models\User;
9use App\Traits\Controllers\UpdateModelPublished;
10use Illuminate\Http\Request;
11use Illuminate\Support\Facades\DB;
12use Illuminate\Support\Str;
13
14class UsersController extends Controller
15{
16    use UpdateModelPublished;
17
18    /**
19     * Create the controller instance.
20     */
21    public function __construct()
22    {
23        $this->authorizeResource(User::class);
24    }
25
26    /**
27     * Display a listing of the resource.
28     *
29     * @param \Illuminate\Http\Request $request
30     * @return \Illuminate\Contracts\View\View
31     */
32    public function index(Request $request): \Illuminate\Contracts\View\View
33    {
34        /** @var \Illuminate\Database\Eloquent\Builder $userModels */
35        $userModels = User::query();
36
37        /** @var string $search Search field */
38        $search = $request->search;
39        if ($search) {
40            $this->searchQuery(
41                $userModels,
42                $search,
43                null,
44                'first_name',
45                'last_name',
46                'email',
47                'role',
48            );
49        }
50        $searchFields = \implode(', ', [
51            trans('validation.attributes.first_name'),
52            trans('validation.attributes.last_name'),
53            trans('validation.attributes.email'),
54            trans('validation.attributes.role'),
55        ]);
56
57        /** Sort columns with a query */
58        $this->sortQuery($userModels);
59
60        /** Custom pagination */
61        $userModels = $this->paginate($userModels);
62
63        return view('bo.pages.users.index', compact('userModels', 'search', 'searchFields'));
64    }
65
66
67    /**
68     * Show the form for creating a new resource.
69     *
70     * @param \App\Models\User $user
71     * @return \Illuminate\Contracts\View\View
72     */
73    public function create(User $user): \Illuminate\Contracts\View\View
74    {
75        return view('bo.pages.users.create', ['userModel' => $user]);
76    }
77
78    /**
79     * Store a newly created resource in storage.
80     *
81     * @param \App\Http\Requests\Bo\Users\StoreUserRequest $request
82     * @return \Illuminate\Http\RedirectResponse
83     */
84    public function store(StoreUserRequest $request): \Illuminate\Http\RedirectResponse
85    {
86        return DB::transaction(function () use ($request) {
87            $user = new User();
88            $user->fill($request->validated());
89
90            if ($user->saveOrFail()) {
91                return redirect()->route('bo.users.edit', $user)
92                    ->with('success', __('crud.messages.has_been_created', [
93                        'model' => Str::ucfirst(__('models.classes.user'))
94                    ]));
95            }
96            return redirect()->back()
97                ->with('error', __('crud.messages.cannot_be_created', [
98                    'model' => Str::ucfirst(__('models.classes.user'))
99                ]));
100        });
101    }
102
103    /**
104     * Show the form for editing the specified resource.
105     *
106     * @param App\Models\User $user
107     * @return \Illuminate\Contracts\View\View
108     */
109    public function edit(User $user): \Illuminate\Contracts\View\View
110    {
111        return view('bo.pages.users.edit', ['userModel' => $user]);
112    }
113
114    /**
115     * Update the specified resource in storage.
116     *
117     * @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request
118     * @param \App\Models\User                              $user
119     * @return \Illuminate\Http\RedirectResponse
120     */
121    public function update(UpdateUserRequest $request, User $user): \Illuminate\Http\RedirectResponse
122    {
123        return DB::transaction(function () use ($request, $user) {
124            $user->fill($request->validated());
125
126            if ($user->saveOrFail()) {
127                return redirect()->route('bo.users.edit', $user)
128                    ->with('success', __('crud.messages.has_been_updated', [
129                        'model' => Str::ucfirst(__('models.classes.user'))
130                    ]));
131            }
132            return redirect()->route('bo.users.edit', $user)
133                ->with('error', __('crud.messages.cannot_be_updated', [
134                    'model' => Str::ucfirst(__('models.classes.user'))
135                ]));
136        });
137    }
138
139    /**
140     * Remove the specified resource from storage.
141     *
142     * @param \App\Models\User $user
143     * @return \Illuminate\Http\RedirectResponse
144     */
145    public function destroy(User $user): \Illuminate\Http\RedirectResponse
146    {
147        if ($user->deleteOrFail()) {
148            return redirect()->route('bo.users.index')
149                ->with('success', __('crud.messages.has_been_deleted', [
150                    'model' => Str::ucfirst(__('models.classes.user'))
151                ]));
152        }
153        return redirect()->back()
154            ->with('error', __('crud.messages.cannot_be_deleted', [
155                'model' => Str::ucfirst(__('models.classes.user'))
156            ]));
157    }
158
159    /**
160     * Duplicate the specified resource.
161     *
162     * @param \App\Models\User $user
163     * @return \Illuminate\Contracts\View\View
164     */
165    public function duplicate(User $user): \Illuminate\Contracts\View\View
166    {
167        return $this->create($user->replicate());
168    }
169}