Completed
Push — master ( f81fd9...e392a3 )
by Fèvre
21s queued 15s
created

app/Http/Controllers/Admin/User/UserController.php (1 issue)

Labels
Severity
1
<?php
2
namespace Xetaravel\Http\Controllers\Admin\User;
3
4
use Illuminate\Http\RedirectResponse;
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Auth;
7
use Illuminate\Support\Facades\Hash;
8
use Illuminate\View\View;
9
use Xetaio\Mentions\Parser\MentionParser;
10
use Xetaravel\Http\Controllers\Admin\Controller;
11
use Xetaravel\Models\Repositories\UserRepository;
12
use Xetaravel\Models\Repositories\AccountRepository;
13
use Xetaravel\Models\User;
14
use Xetaravel\Models\Role;
15
use Xetaravel\Models\Validators\UserValidator;
16
17
class UserController extends Controller
18
{
19
    /**
20
     * Show the search page.
21
     *
22
     * @return \Illuminate\View\View
23
     */
24
    public function index(): View
25
    {
26
        $latestUsers = User::with(['roles'])
27
            ->limit(5)
28
            ->latest()
29
            ->get();
30
31
        $breadcrumbs = $this->breadcrumbs->addCrumb('Manage Users', route('admin.user.user.index'));
32
33
        return view('Admin::User.user.index', compact('latestUsers', 'breadcrumbs'));
34
    }
35
    /**
36
     * Search users related to the type.
37
     *
38
     * @param \Illuminate\Http\Request $request
39
     *
40
     * @return \Illuminate\View\View
41
     */
42
    public function search(Request $request): View
43
    {
44
        $query = User::with(['roles'])->select();
45
        $search = str_replace('%', '\\%', trim($request->input('search')));
46
        $type = trim($request->input('type'));
47
48
        switch ($type) {
49
            case 'username':
50
                $query->where('username', 'like', '%' . $search . '%');
51
                break;
52
53
            case 'email':
54
                $query->where('email', 'like', '%' . $search . '%');
55
                break;
56
57
            case 'register_ip':
58
                $query->where('register_ip', 'like', '%' . $search . '%');
59
                break;
60
61
            case 'last_login_ip':
62
                $query->where('last_login_ip', 'like', '%' . $search . '%');
63
                break;
64
65
            default:
66
                $query->where('username', 'like', '%' . $search . '%');
67
                $type = 'username';
68
                break;
69
        }
70
        $users = $query
71
            ->paginate(10)
72
            ->appends($request->except('page'));
73
74
        $breadcrumbs = $this->breadcrumbs
75
            ->addCrumb('Manage Users', route('admin.user.user.index'))
76
            ->addCrumb('Search an user', route('admin.user.user.search'));
77
78
        return view('Admin::User.user.search', compact('users', 'breadcrumbs', 'type', 'search'));
79
    }
80
81
    /**
82
     * Show the update form.
83
     *
84
     * @param \Illuminate\Http\Request $request
85
     * @param string $slug The slug of the user.
86
     * @param int $id The id of the user.
87
     *
88
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
89
     */
90
    public function showUpdateForm(Request $request, string $slug, int $id)
91
    {
92
        $user = User::findOrFail($id);
93
94
        $roles = Role::pluck('name', 'id');
95
        $attributes = Role::pluck('id')->toArray();
96
97
        $optionsAttributes = [];
98
        foreach ($attributes as $attribute) {
99
            $optionsAttributes[$attribute] = [
100
                'style' => Role::where('id', $attribute)->select('css')->first()->css
101
            ];
102
        }
103
104
        $breadcrumbs = $this->breadcrumbs
105
            ->setListElementClasses('breadcrumb breadcrumb-inverse bg-inverse mb-0')
106
            ->addCrumb('Manage Users', route('admin.user.user.index'))
107
            ->addCrumb(
108
                'Edit ' . e($user->username),
109
                route('admin.user.user.update', $user->slug, $user->id)
110
            );
111
112
        return view('Admin::User.user.update', compact('user', 'roles', 'optionsAttributes', 'breadcrumbs'));
113
    }
114
115
    /**
116
     * Handle an user update request for the application.
117
     *
118
     * @param \Illuminate\Http\Request $request
119
     * @param int $id The id of the user to update.
120
     *
121
     * @return \Illuminate\Http\RedirectResponse
122
     */
123
    public function update(Request $request, int $id): RedirectResponse
124
    {
125
        $user = User::findOrFail($id);
126
127
        UserValidator::update($request->all(), $user->id)->validate();
128
        UserRepository::update($request->all(), $user);
0 ignored issues
show
It seems like $user can also be of type boolean; however, parameter $user of Xetaravel\Models\Reposit...serRepository::update() does only seem to accept Xetaravel\Models\User, 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

128
        UserRepository::update($request->all(), /** @scrutinizer ignore-type */ $user);
Loading history...
129
        $account = AccountRepository::update($request->get('account'), $user->id);
130
131
        $parser = new MentionParser($account, ['mention' => false]);
132
        $signature = $parser->parse($account->signature);
133
        $biography = $parser->parse($account->biography);
134
135
        $account->signature = $signature;
136
        $account->biography = $biography;
137
        $account->save();
138
139
        $user->roles()->sync($request->get('roles'));
140
141
        return redirect()
142
            ->back()
143
            ->with('success', 'This user has been updated successfully !');
144
    }
145
146
    /**
147
     * Handle the delete request for the user.
148
     *
149
     * @param \Illuminate\Http\Request $request
150
     * @param int $id The id of the user to delete.
151
     *
152
     * @return \Illuminate\Http\RedirectResponse
153
     */
154
    public function delete(Request $request, int $id): RedirectResponse
155
    {
156
        $user = User::findOrFail($id);
157
158
        if (!Hash::check($request->input('password'), Auth::user()->password)) {
159
            return redirect()
160
                ->back()
161
                ->with('danger', 'Your Password does not match !');
162
        }
163
164
        if ($user->delete()) {
165
            return redirect()
166
                ->route('admin.user.user.index')
167
                ->with('success', 'This user has been deleted successfully !');
168
        }
169
170
        return redirect()
171
            ->route('admin.user.user.index')
172
            ->with('danger', 'An error occurred while deleting this user !');
173
    }
174
175
    /**
176
     * Delete the avatar for the specified user.
177
     *
178
     * @param int $id The id of the user.
179
     *
180
     * @return \Illuminate\Http\RedirectResponse
181
     */
182
    public function deleteAvatar(int $id): RedirectResponse
183
    {
184
        $user = User::findOrFail($id);
185
186
        $user->clearMediaCollection('avatar');
187
        $user->addMedia(resource_path('assets/images/avatar.png'))
188
            ->preservingOriginal()
189
            ->setName(substr(md5($user->username), 0, 10))
190
            ->setFileName(substr(md5($user->username), 0, 10) . '.png')
191
            ->toMediaCollection('avatar');
192
193
        return redirect()
194
            ->back()
195
            ->with('success', 'The avatar has been deleted successfully !');
196
    }
197
}
198