Completed
Push — master ( eb2586...ec2395 )
by Sherif
01:59
created

UserController::assignGroups()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace App\Modules\Acl\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use App\Modules\Core\BaseClasses\BaseApiController;
7
use App\Modules\Acl\Repositories\UserRepository;
8
use App\Modules\Acl\Proxy\LoginProxy;
9
use App\Modules\Core\Utl\CoreConfig;
10
use App\Modules\Core\Http\Resources\General as GeneralResource;
11
use Illuminate\Support\Facades\App;
12
use App\Modules\Acl\Http\Requests\AssignGroups;
13
use App\Modules\Acl\Http\Requests\ChangePassword;
14
use App\Modules\Acl\Http\Requests\Login;
15
use App\Modules\Acl\Http\Requests\LoginSocial;
16
use App\Modules\Acl\Http\Requests\RefreshToken;
17
use App\Modules\Acl\Http\Requests\Register;
18
use App\Modules\Acl\Http\Requests\ResendEmailConfirmation;
19
use App\Modules\Acl\Http\Requests\ResetPassword;
20
use App\Modules\Acl\Http\Requests\SaveProfile;
21
use App\Modules\Acl\Http\Requests\SendReset;
22
use App\Modules\Acl\Http\Requests\ConfirmEmail;
23
use App\Modules\Acl\Http\Requests\InsertUser;
24
use App\Modules\Acl\Http\Requests\UpdateUser;
25
26
class UserController extends BaseApiController
27
{
28
    /**
29
     * List of all route actions that the base api controller
30
     * will skip permissions check for them.
31
     * @var array
32
     */
33
    protected $skipPermissionCheck = ['account', 'logout', 'changePassword', 'saveProfile', 'account'];
34
35
    /**
36
     * List of all route actions that the base api controller
37
     * will skip login check for them.
38
     * @var array
39
     */
40
    protected $skipLoginCheck = ['login', 'loginSocial', 'register', 'sendReset', 'resetPassword', 'refreshToken', 'confirmEmail', 'resendEmailConfirmation'];
41
42
    /**
43
     * The loginProxy implementation.
44
     *
45
     * @var App\Modules\Acl\Proxy\LoginProxy
46
     */
47
    protected $loginProxy;
48
49
    /**
50
     * Init new object.
51
     *
52
     * @param   LoginProxy     $loginProxy
53
     * @param   UserRepository $repo
54
     * @param   CoreConfig     $config
55
     * @return  void
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
56
     */
57
    public function __construct(LoginProxy $loginProxy, UserRepository $repo, CoreConfig $config)
58
    {
59
        $this->loginProxy = $loginProxy;
0 ignored issues
show
Documentation Bug introduced by
It seems like $loginProxy of type object<App\Modules\Acl\Proxy\LoginProxy> is incompatible with the declared type object<Illuminate\Suppor...s\Acl\Proxy\LoginProxy> of property $loginProxy.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
60
        parent::__construct($repo, $config, 'App\Modules\Acl\Http\Resources\AclUser');
61
    }
62
63
    /**
64
     * Insert the given model to storage.
65
     *
66
     * @param InsertUser $request
67
     * @return \Illuminate\Http\Response
68
     */
69
    public function insert(InsertUser $request)
70
    {
71
        return new $this->modelResource($this->repo->save($request->all()));
72
    }
73
74
    /**
75
     * Update the given model to storage.
76
     *
77
     * @param UpdateUser $request
78
     * @return \Illuminate\Http\Response
79
     */
80
    public function update(UpdateUser $request)
81
    {
82
        return new $this->modelResource($this->repo->save($request->all()));
83
    }
84
85
    /**
86
     * Return the logged in user account.
87
     *
88
     * @return \Illuminate\Http\Response
89
     */
90
    public function account()
91
    {
92
        return new $this->modelResource($this->repo->account($this->relations));
93
    }
94
95
    /**
96
     * Block the user.
97
     *
98
     * @param  integer  $id Id of the user.
99
     * @return \Illuminate\Http\Response
100
     */
101
    public function block($id)
102
    {
103
        return new $this->modelResource($this->repo->block($id));
104
    }
105
106
    /**
107
     * Unblock the user.
108
     *
109
     * @param  integer  $id Id of the user.
110
     * @return \Illuminate\Http\Response
111
     */
112
    public function unblock($id)
113
    {
114
        return new $this->modelResource($this->repo->unblock($id));
115
    }
116
117
    /**
118
     * Logout the user.
119
     *
120
     * @return \Illuminate\Http\Response
121
     */
122
    public function logout()
123
    {
124
        return new GeneralResource($this->loginProxy->logout());
125
    }
126
127
    /**
128
     * Handle a registration request.
129
     *
130
     * @param Register $request
131
     * @return \Illuminate\Http\Response
132
     */
133
    public function register(Register $request)
134
    {
135
        return new $this->modelResource($this->repo->register($request->only('name', 'email', 'password')));
136
    }
137
138
    /**
139
     * Handle a login request to the application.
140
     *
141
     * @param Login $request
142
     * @return \Illuminate\Http\Response
143
     */
144
    public function login(Login $request)
145
    {
146
        $result = $this->loginProxy->login($request->only('email', 'password'), $request->get('admin'));
147
148
        return (new $this->modelResource($result['user']))->additional(['meta' => $result['tokens']]);
149
    }
150
151
    /**
152
     * Handle a social login request of the none admin to the application.
153
     *
154
     * @param LoginSocial $request
155
     * @return \Illuminate\Http\Response
156
     */
157
    public function loginSocial(LoginSocial $request)
158
    {
159
        $result = $this->repo->loginSocial($request->get('auth_code'), $request->get('access_token'), $request->get('type'));
160
161
        return (new $this->modelResource($result['user']))->additional(['meta' => $result['tokens']]);
162
    }
163
164
    /**
165
     * Assign the given groups to the given user.
166
     *
167
     * @param AssignGroups $request
168
     * @return \Illuminate\Http\Response
169
     */
170
    public function assignGroups(AssignGroups $request)
171
    {
172
        return new $this->modelResource($this->repo->assignGroups($request->get('user_id'), $request->get('group_ids')));
173
    }
174
175
    /**
176
     * Send a reset link to the given user.
177
     *
178
     * @param SendReset $request
179
     * @return \Illuminate\Http\Response
180
     */
181
    public function sendReset(SendReset $request)
182
    {
183
        return new GeneralResource($this->repo->sendReset($request->get('email')));
184
    }
185
186
    /**
187
     * Reset the given user's password.
188
     *
189
     * @param ResetPassword $request
190
     * @return \Illuminate\Http\Response
191
     */
192
    public function resetPassword(ResetPassword $request)
193
    {
194
        return new GeneralResource($this->repo->resetPassword($request->only('email', 'password', 'password_confirmation', 'token')));
195
    }
196
197
    /**
198
     * Change the logged in user password.
199
     *
200
     * @param ChangePassword $request
201
     * @return \Illuminate\Http\Response
202
     */
203
    public function changePassword(ChangePassword $request)
204
    {
205
        return new GeneralResource($this->repo->changePassword($request->only('old_password', 'password', 'password_confirmation')));
206
    }
207
208
    /**
209
     * Confirm email using the confirmation code.
210
     *
211
     * @param ConfirmEmail $request
212
     * @return \Illuminate\Http\Response
213
     */
214
    public function confirmEmail(ConfirmEmail $request)
215
    {
216
        return new GeneralResource($this->repo->confirmEmail($request->only('confirmation_code')));
217
    }
218
219
    /**
220
     * Resend the email confirmation mail.
221
     *
222
     * @param ResendEmailConfirmation $request
223
     * @return \Illuminate\Http\Response
224
     */
225
    public function resendEmailConfirmation(ResendEmailConfirmation $request)
226
    {
227
        return new GeneralResource($this->repo->sendConfirmationEmail($request->get('email')));
228
    }
229
230
    /**
231
     * Refresh the expired login token.
232
     *
233
     * @param RefreshToken $request
234
     * @return \Illuminate\Http\Response
235
     */
236
    public function refreshToken(RefreshToken $request)
237
    {
238
        return new GeneralResource($this->loginProxy->refreshToken($request->get('refresh_token')));
239
    }
240
241
    /**
242
     * Paginate all users with in the given group.
243
     *
244
     * @param Request $request
245
     * @param  string $groupName The name of the requested group.
246
     * @return \Illuminate\Http\Response
247
     */
248
    public function group(Request $request, $groupName)
249
    {
250
        return $this->modelResource::collection($this->repo->group($request->all(), $groupName, $this->relations, $request->query('perPage'), $request->query('sortBy'), $request->query('desc')));
251
    }
252
253
    /**
254
     * Save the given data to the logged in user.
255
     *
256
     * @param SaveProfile $request
257
     * @return \Illuminate\Http\Response
258
     */
259
    public function saveProfile(SaveProfile $request)
260
    {
261
        return new $this->modelResource($this->repo->saveProfile($request->only('name', 'email', 'profile_picture')));
262
    }
263
}
264