Completed
Push — master ( c1b837...1e8b34 )
by Sherif
07:31
created

UsersController::saveProfile()   B

Complexity

Conditions 6
Paths 10

Size

Total Lines 26
Code Lines 11

Duplication

Lines 26
Ratio 100 %

Importance

Changes 0
Metric Value
dl 26
loc 26
rs 8.439
c 0
b 0
f 0
cc 6
eloc 11
nc 10
nop 1
1
<?php
2
namespace App\Modules\V1\Acl\Http\Controllers;
3
4
use Illuminate\Foundation\Http\FormRequest;
5
use App\Modules\V1\Core\Http\Controllers\BaseApiController;
6
use Illuminate\Http\Request;
7
8
class UsersController extends BaseApiController
9
{
10
    /**
11
     * The name of the model that is used by the base api controller 
12
     * to preform actions like (add, edit ... etc).
13
     * @var string
14
     */
15
    protected $model               = 'users';
16
17
    /**
18
     * List of all route actions that the base api controller
19
     * will skip permissions check for them.
20
     * @var array
21
     */
22
    protected $skipPermissionCheck = ['account', 'logout', 'sendreset'];
23
24
    /**
25
     * List of all route actions that the base api controller
26
     * will skip login check for them.
27
     * @var array
28
     */
29
    protected $skipLoginCheck      = ['login', 'loginSocial', 'register', 'sendreset', 'resetpassword', 'refreshtoken'];
30
31
    /**
32
     * The validations rules used by the base api controller
33
     * to check before add.
34
     * @var array
35
     */
36
    protected $validationRules     = [
37
        'user_name'     => 'string|unique:users,user_name,{id}', 
38
        'email'         => 'required|email|unique:users,email,{id}', 
39
        'password'      => 'min:6'
40
    ];
41
42
    /**
43
     * Return the logged in user account.
44
     * 
45
     * @return \Illuminate\Http\Response
46
     */
47
    public function account()
48
    {
49
        $relations = $this->relations && $this->relations['account'] ? $this->relations['account'] : [];
50
        return \Response::json(\Core::users()->account($relations), 200);
51
    }
52
53
    /**
54
     * Block the user.
55
     *
56
     * @param  integer  $id
57
     * @return \Illuminate\Http\Response
58
     */
59
    public function block($id)
60
    {
61
        return \Response::json(\Core::users()->block($id), 200);
62
    }
63
64
    /**
65
     * Unblock the user.
66
     *
67
     * @param  integer  $id
68
     * @return \Illuminate\Http\Response
69
     */
70
    public function unblock($id)
71
    {
72
        return \Response::json(\Core::users()->unblock($id), 200);
73
    }
74
75
    /**
76
     * Logout the user.
77
     * 
78
     * @return \Illuminate\Http\Response
79
     */
80
    public function logout()
81
    {
82
        return \Response::json(\Core::users()->logout(), 200);
83
    }
84
85
    /**
86
     * Handle a registration request.
87
     *
88
     * @param  \Illuminate\Http\Request  $request
89
     * @return \Illuminate\Http\Response
90
     */
91 View Code Duplication
    public function register(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
92
    {
93
        $this->validate($request, [
94
            'user_name'     => 'string|unique:users,user_name,{id}', 
95
            'email'         => 'required|email|unique:users,email,{id}', 
96
            'password'      => 'required|min:6'
97
            ]);
98
99
        return \Response::json(\Core::users()->register($request->only('email', 'password')), 200);
100
    }
101
102
    /**
103
     * Handle a login request of the none admin to the application.
104
     *
105
     * @param  \Illuminate\Http\Request  $request
106
     * @return \Illuminate\Http\Response
107
     */
108 View Code Duplication
    public function login(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
109
    {
110
        $this->validate($request, [
111
            'email'    => 'required|email', 
112
            'password' => 'required|min:6',
113
            'admin'    => 'boolean'
114
            ]);
115
116
        return \Response::json(\Core::users()->login($request->only('email', 'password'), $request->get('admin')), 200);
117
    }
118
119
    /**
120
     * Handle a social login request of the none admin to the application.
121
     *
122
     * @param  \Illuminate\Http\Request  $request
123
     * @return \Illuminate\Http\Response
124
     */
125 View Code Duplication
    public function loginSocial(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
126
    {
127
        $this->validate($request, [
128
            'auth_code'    => 'required_without:access_token',
129
            'access_token' => 'required_without:auth_code',
130
            'type'         => 'required|in:facebook,google'
131
            ]);
132
133
        return \Response::json(\Core::users()->loginSocial($request->only('auth_code', 'access_token', 'type')), 200);
134
    }
135
136
    /**
137
     * Handle an assign groups to user request.
138
     *
139
     * @param  \Illuminate\Http\Request  $request
140
     * @return \Illuminate\Http\Response
141
     */
142 View Code Duplication
    public function assigngroups(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
143
    {
144
        $this->validate($request, [
145
            'group_ids' => 'required|exists:groups,id', 
146
            'user_id'   => 'required|exists:users,id'
147
            ]);
148
149
        return \Response::json(\Core::users()->assignGroups($request->get('user_id'), $request->get('group_ids')), 200);
150
    }
151
152
    /**
153
     * Send a reset link to the given user.
154
     *
155
     * @param  \Illuminate\Http\Request  $request
156
     * @return \Illuminate\Http\Response
157
     */
158
    public function sendreset(Request $request)
159
    {
160
        $this->validate($request, ['email' => 'required|email', 'url' => 'required|url']);
161
162
        return \Response::json(\Core::users()->sendReset($request->only('email'), $request->get('url')), 200);
163
    }
164
165
    /**
166
     * Reset the given user's password.
167
     *
168
     * @param  \Illuminate\Http\Request  $request
169
     * @return \Illuminate\Http\Response
170
     */
171
    public function resetpassword(Request $request)
172
    {
173
        $this->validate($request, [
174
            'token'                 => 'required',
175
            'email'                 => 'required|email',
176
            'password'              => 'required|confirmed|min:6',
177
            'password_confirmation' => 'required',
178
        ]);
179
180
        return \Response::json(\Core::users()->resetPassword($request->only('email', 'password', 'password_confirmation', 'token')), 200);
181
    }
182
183
    /**
184
     * Change the logged in user password.
185
     *
186
     * @param  \Illuminate\Http\Request  $request
187
     * @return \Illuminate\Http\Response
188
     */
189 View Code Duplication
    public function changePassword(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
190
    {
191
        $this->validate($request, [
192
            'old_password'          => 'required',
193
            'password'              => 'required|confirmed|min:6',
194
            'password_confirmation' => 'required',
195
        ]);
196
197
        return \Response::json(\Core::users()->changePassword($request->only('old_password', 'password', 'password_confirmation')), 200);
198
    }
199
200
    /**
201
     * Refresh the expired login token.
202
     *
203
     * @return \Illuminate\Http\Response
204
     */
205
    public function refreshtoken()
206
    {
207
        return \Response::json(\Core::users()->refreshtoken(), 200);
208
    }
209
210
    /**
211
     * Paginate all users with inthe given group.
212
     * 
213
     * @param  \Illuminate\Http\Request  $request
214
     * @param  string $groupName
215
     * @param  integer $perPage
216
     * @param  string  $sortBy
217
     * @param  boolean $desc
218
     * @return \Illuminate\Http\Response
219
     */
220
    public function group(Request $request, $groupName, $perPage = false, $sortBy = 'created_at', $desc = 1)
221
    {
222
        $relations = $this->relations && $this->relations['group'] ? $this->relations['group'] : [];
223
        return \Response::json(\Core::users()->group($request->all(), $groupName, $relations, $perPage, $sortBy, $desc), 200);
224
    }
225
226
    /**
227
     * Save the given data to the logged in user.
228
     *
229
     * @param  \Illuminate\Http\Request  $request
230
     * @return \Illuminate\Http\Response
231
     */
232 View Code Duplication
    public function saveProfile(Request $request) 
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
233
    {
234
        foreach ($this->validationRules as &$rule) 
235
        {
236
            if (strpos($rule, 'exists') && ! strpos($rule, 'deleted_at,NULL')) 
237
            {
238
                $rule .= ',deleted_at,NULL';
239
            }
240
241
            if ($request->has('id')) 
242
            {
243
                $rule = str_replace('{id}', $request->get('id'), $rule);
244
            }
245
            else
246
            {
247
                $rule = str_replace(',{id}', '', $rule);
248
            }
249
        }
250
251
        $this->validate($request, $this->validationRules);
252
253
        if ($this->model)
254
        {
255
            return \Response::json(call_user_func_array("\Core::{$this->model}", [])->saveProfile($request->all()), 200);
256
        }
257
    }
258
}
259