Passed
Push — master ( b831b6...96f132 )
by John
06:04 queued 21s
created

GroupController::getPracticeStat()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 27
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 19
nc 4
nop 1
dl 0
loc 27
rs 9.6333
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Ajax;
4
5
use App\Models\GroupModel as OutdatedGroupModel;
6
use App\Models\Eloquent\Group;
7
use App\Models\ResponseModel;
8
use App\Http\Controllers\Controller;
9
use Illuminate\Http\Request;
10
use Auth;
11
12
class GroupController extends Controller
13
{
14
    public function changeNickName(Request $request)
15
    {
16
        $request->validate([
17
            'gid' => 'required|integer',
18
            'nick_name' => 'max:50',
19
        ]);
20
21
        $all_data=$request->all();
22
23
        $groupModel=new OutdatedGroupModel();
24
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
25
        if ($clearance<1) {
26
            return ResponseModel::err(2001);
27
        }
28
        $groupModel->changeNickName($all_data["gid"], Auth::user()->id, $all_data["nick_name"]);
29
        return ResponseModel::success(200);
30
    }
31
32
    public function joinGroup(Request $request)
33
    {
34
        $request->validate([
35
            'gid' => 'required|integer',
36
        ]);
37
38
        $all_data=$request->all();
39
40
        $groupModel=new OutdatedGroupModel();
41
        $join_policy=$groupModel->joinPolicy($all_data["gid"]);
42
        if (is_null($join_policy)) {
43
            return ResponseModel::err(7001);
44
        }
45
        $group  = Group::find($all_data['gid']);
46
        $leader = $group->leader;
47
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
48
        if ($join_policy==1) {
49
            if ($clearance==-1) {
50
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
51
                sendMessage([
52
                    'sender'   => 1,
53
                    'receiver' => $leader->id,
54
                    'title'    => "Some users agreed to join your group {$group->name}.",
55
                    'type'     => 2,
56
                    'data'     => [
57
                        'group' => [
58
                            'gcode' => $group->gcode,
59
                            'name'  => $group->name,
60
                            'url'   => route('group.detail',['gcode' => $group->gcode])
61
                        ],
62
                        'user'  => [
63
                            [
64
                                'name'  => Auth::user()->name,
65
                                'url'   => route('user.view',['uid' => Auth::user()->id])
66
                            ]
67
                        ]
68
                    ]
69
                ]);
70
                return ResponseModel::success(200,null,[
71
                    'uid'            => Auth::user()->id,
72
                    'role_color_old' => $groupModel->role_color[-1],
73
                    'role_color'     => $groupModel->role_color[1],
74
                    'role'           => $groupModel->role[1],
75
                ]);
76
            }
77
            return ResponseModel::success(200);
78
        } elseif ($join_policy==2) {
79
            if ($clearance==-3) {
80
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
81
                //send message to leader
82
                sendMessage([
83
                    'sender'   => 1,
84
                    'receiver' => $leader->id,
85
                    'title'    => 'Someone applied to join your group.',
86
                    'type'     => 1,
87
                    'data'     => [
88
                        'group' => [
89
                            'gcode' => $group->gcode,
90
                            'name'  => $group->name,
91
                            'url'   => route('group.detail',['gcode' => $group->gcode])
92
                        ],
93
                        'user'  => [
94
                            [
95
                                'name'  => Auth::user()->name,
96
                                'url'   => route('user.view',['uid' => Auth::user()->id])
97
                            ]
98
                        ]
99
                    ]
100
                ]);
101
            }
102
            return ResponseModel::success(200);
103
        } elseif ($join_policy==3 || $join_policy==0) {  //The default value of join_policy when you create a group will be 0 in old version.
104
            if ($clearance==-1) {
105
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
106
                sendMessage([
107
                    'sender'   => 1,
108
                    'receiver' => $leader->id,
109
                    'title'    => "Some users agreed to join your group {$group->name}.",
110
                    'type'     => 2,
111
                    'data'     => [
112
                        'group' => [
113
                            'gcode' => $group->gcode,
114
                            'name'  => $group->name,
115
                            'url'   => route('group.detail',['gcode' => $group->gcode])
116
                        ],
117
                        'user'  => [
118
                            [
119
                                'name'  => Auth::user()->name,
120
                                'url'   => route('user.view',['uid' => Auth::user()->id])
121
                            ]
122
                        ]
123
                    ]
124
                ]);
125
                return ResponseModel::success(200,null,[
126
                    'uid'            => Auth::user()->id,
127
                    'role_color_old' => $groupModel->role_color[-1],
128
                    'role_color'     => $groupModel->role_color[1],
129
                    'role'           => $groupModel->role[1]
130
                ]);
131
            } elseif ($clearance==-3) {
132
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
133
                //send message to leader
134
                sendMessage([
135
                    'sender'   => 1,
136
                    'receiver' => $leader->id,
137
                    'title'    => "Some users applied to join your group {$group->name}.",
138
                    'type'     => 1,
139
                    'data'     => [
140
                        'group' => [
141
                            'gcode' => $group->gcode,
142
                            'name'  => $group->name,
143
                            'url'   => route('group.detail',['gcode' => $group->gcode])
144
                        ],
145
                        'user'  => [
146
                            [
147
                                'name'  => Auth::user()->name,
148
                                'url'   => route('user.view',['uid' => Auth::user()->id])
149
                            ]
150
                        ]
151
                    ]
152
                ]);
153
            }
154
            return ResponseModel::success(200);
155
        }
156
    }
157
158
    public function exitGroup(Request $request)
159
    {
160
        $request->validate([
161
            'gid' => 'required|integer',
162
        ]);
163
        $uid = Auth::user()->id;
164
        $gid = $request->input('gid');
165
        $groupModel = new OutdatedGroupModel();
166
        $clearance = $groupModel->judgeClearance($gid,$uid);
167
        if($clearance == 3) {
168
            return ResponseModel::err(7008);
169
        }
170
        $groupModel->removeClearance($uid,$gid);
171
        return ResponseModel::success(200);
172
    }
173
174
    public function createGroup(Request $request)
175
    {
176
        $request->validate([
177
            'gcode' => 'required|alpha_dash|min:3|max:50',
178
            'name' => 'required|min:3|max:50',
179
            'public' => 'required|integer|min:1|max:2',
180
            'description' => 'nullable|max:60000',
181
            'join_policy'  => 'required|integer|min:1|max:3'
182
        ]);
183
184
        $all_data=$request->all();
185
186
        $groupModel=new OutdatedGroupModel();
187
        if($all_data["gcode"]=="create") return ResponseModel::err(7005);
188
        $is_group=$groupModel->isGroup($all_data["gcode"]);
189
        if($is_group) return ResponseModel::err(7006);
190
191
        $allow_extension=['jpg', 'png', 'jpeg', 'gif', 'bmp'];
192
        if (!empty($request->file('img')) && $request->file('img')->isValid()) {
193
            $extension=$request->file('img')->extension();
194
            if (!in_array($extension, $allow_extension)) {
195
                return ResponseModel::err(1005);
196
            }
197
            $path=$request->file('img')->store('/static/img/group', 'NOJPublic');
198
        } else {
199
            $path="static/img/group/default.png";
200
        }
201
        $img='/'.$path;
0 ignored issues
show
Bug introduced by
Are you sure $path of type false|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

201
        $img='/'./** @scrutinizer ignore-type */ $path;
Loading history...
202
203
        $groupModel->createGroup(Auth::user()->id, $all_data["gcode"], $img, $all_data["name"], $all_data["public"], $all_data["description"], $all_data["join_policy"]);
204
        return ResponseModel::success(200);
205
    }
206
207
    public function getPracticeStat(Request $request)
208
    {
209
        $request->validate([
210
            'gid' => 'required|integer',
211
            'mode' => 'required'
212
        ]);
213
214
        $all_data=$request->all();
215
216
        $groupModel=new OutdatedGroupModel();
217
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
218
        if ($clearance > 0) {
219
            switch($all_data['mode']){
220
                case 'contest':
221
                    $ret = $groupModel->groupMemberPracticeContestStat($all_data["gid"]);
222
                break;
223
                case 'tag':
224
                    $ret = $groupModel->groupMemberPracticeTagStat($all_data["gid"]);
225
                break;
226
                default:
227
                    return ResponseModel::err(1007);
228
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
229
            }
230
231
            return ResponseModel::success(200,null,$ret);
232
        }
233
        return ResponseModel::err(7002);
234
    }
235
236
    public function eloChangeLog(Request $request)
237
    {
238
        $request->validate([
239
            'gid' => 'required|integer',
240
            'uid' => 'required|integer',
241
        ]);
242
243
        $all_data=$request->all();
244
245
        $groupModel=new OutdatedGroupModel();
246
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
247
        if($clearance <= 0){
248
            return ResponseModel::err(7002);
249
        }
250
        $ret = $groupModel->getEloChangeLog($all_data['gid'],$all_data['uid']);
251
        return ResponseModel::success(200,null,$ret);
252
    }
253
}
254