Completed
Push — master ( 174227...634be5 )
by Sherif
05:26
created

UsersController::group()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 3
nc 4
nop 4
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
        'full_name'     => 'string|max:100', 
38
        'user_name'     => 'string|unique:users,user_name,{id}', 
39
        'email'         => 'required|email|unique:users,email,{id}', 
40
        'mobile_number' => 'string|unique:users,mobile_number,{id}', 
41
        'password'      => 'required|min:6'
42
    ];
43
44
    /**
45
     * Return the logged in user account.
46
     * 
47
     * @return \Illuminate\Http\Response
48
     */
49
    public function account()
50
    {
51
        $relations = $this->relations && $this->relations['account'] ? $this->relations['account'] : [];
52
        return \Response::json(\Core::users()->account($relations), 200);
53
    }
54
55
    /**
56
     * Block the user.
57
     *
58
     * @param  integer  $id
59
     * @return \Illuminate\Http\Response
60
     */
61
    public function block($id)
62
    {
63
        return \Response::json(\Core::users()->block($id), 200);
64
    }
65
66
    /**
67
     * Unblock the user.
68
     *
69
     * @param  integer  $id
70
     * @return \Illuminate\Http\Response
71
     */
72
    public function unblock($id)
73
    {
74
        return \Response::json(\Core::users()->unblock($id), 200);
75
    }
76
77
    /**
78
     * Logout the user.
79
     * 
80
     * @return \Illuminate\Http\Response
81
     */
82
    public function logout()
83
    {
84
        return \Response::json(\Core::users()->logout(), 200);
85
    }
86
87
    /**
88
     * Handle a registration request.
89
     *
90
     * @param  \Illuminate\Http\Request  $request
91
     * @return \Illuminate\Http\Response
92
     */
93 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...
94
    {
95
        $this->validate($request, [
96
            'full_name'     => 'string|max:100', 
97
            'user_name'     => 'string|unique:users,user_name,{id}', 
98
            'email'         => 'required|email|unique:users,email,{id}', 
99
            'mobile_number' => 'string|unique:users,mobile_number,{id}', 
100
            'password'      => 'required|min:6'
101
            ]);
102
103
        return \Response::json(\Core::users()->register($request->only('email', 'password')), 200);
104
    }
105
106
    /**
107
     * Handle a login request of the none admin to the application.
108
     *
109
     * @param  \Illuminate\Http\Request  $request
110
     * @return \Illuminate\Http\Response
111
     */
112 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...
113
    {
114
        $this->validate($request, [
115
            'email'    => 'required|email', 
116
            'password' => 'required|min:6',
117
            'admin'    => 'boolean'
118
            ]);
119
120
        return \Response::json(\Core::users()->login($request->only('email', 'password'), $request->get('admin')), 200);
121
    }
122
123
    /**
124
     * Handle a social login request of the none admin to the application.
125
     *
126
     * @param  \Illuminate\Http\Request  $request
127
     * @return \Illuminate\Http\Response
128
     */
129 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...
130
    {
131
        $this->validate($request, [
132
            'auth_code'    => 'required_without:access_token',
133
            'access_token' => 'required_without:auth_code',
134
            'type'         => 'required|in:facebook,google'
135
            ]);
136
137
        return \Response::json(\Core::users()->loginSocial($request->only('auth_code', 'access_token', 'type')), 200);
138
    }
139
140
    /**
141
     * Handle an assign groups to user request.
142
     *
143
     * @param  \Illuminate\Http\Request  $request
144
     * @return \Illuminate\Http\Response
145
     */
146 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...
147
    {
148
        $this->validate($request, [
149
            'group_ids' => 'required|exists:groups,id', 
150
            'user_id'   => 'required|exists:users,id'
151
            ]);
152
153
        return \Response::json(\Core::users()->assignGroups($request->get('user_id'), $request->get('group_ids')), 200);
154
    }
155
156
    /**
157
     * Send a reset link to the given user.
158
     *
159
     * @param  \Illuminate\Http\Request  $request
160
     * @return \Illuminate\Http\Response
161
     */
162
    public function sendreset(Request $request)
163
    {
164
        $this->validate($request, ['email' => 'required|email', 'url' => 'required|url']);
165
166
        return \Response::json(\Core::users()->sendReset($request->only('email'), $request->get('url')), 200);
167
    }
168
169
    /**
170
     * Reset the given user's password.
171
     *
172
     * @param  \Illuminate\Http\Request  $request
173
     * @return \Illuminate\Http\Response
174
     */
175 View Code Duplication
    public function resetpassword(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...
176
    {
177
        $this->validate($request, [
178
            'token'                 => 'required',
179
            'email'                 => 'required|email',
180
            'password'              => 'required|confirmed|min:6',
181
            'password_confirmation' => 'required',
182
        ]);
183
184
        return \Response::json(\Core::users()->resetPassword($request->only('email', 'password', 'password_confirmation', 'token')), 200);
185
    }
186
187
    /**
188
     * Change the logged in user password.
189
     *
190
     * @param  \Illuminate\Http\Request  $request
191
     * @return \Illuminate\Http\Response
192
     */
193 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...
194
    {
195
        $this->validate($request, [
196
            'old_password'          => 'required',
197
            'password'              => 'required|confirmed|min:6',
198
            'password_confirmation' => 'required',
199
        ]);
200
201
        return \Response::json(\Core::users()->changePassword($request->only('old_password', 'password', 'password_confirmation')), 200);
202
    }
203
204
    /**
205
     * Refresh the expired login token.
206
     *
207
     * @return \Illuminate\Http\Response
208
     */
209
    public function refreshtoken()
210
    {
211
        return \Response::json(\Core::users()->refreshtoken(), 200);
212
    }
213
214
    /**
215
     * Paginate all users with inthe given group.
216
     * 
217
     * @param  string $groupName
218
     * @param  integer $perPage
219
     * @param  string  $sortBy
220
     * @param  boolean $desc
221
     * @return \Illuminate\Http\Response
222
     */
223
    public function group($groupName, $perPage = 15, $sortBy = 'created_at', $desc = 1)
224
    {
225
        $relations = $this->relations && $this->relations['group'] ? $this->relations['group'] : [];
226
        return \Response::json(\Core::users()->group($groupName, $relations, $perPage, $sortBy, $desc), 200);
227
    }
228
}
229