| Total Complexity | 56 | 
| Total Lines | 402 | 
| Duplicated Lines | 0 % | 
| Changes | 1 | ||
| Bugs | 0 | Features | 1 | 
Complex classes like GroupManageController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use GroupManageController, and based on these observations, apply Extract Interface, too.
| 1 | <?php  | 
            ||
| 19 | class GroupManageController extends Controller  | 
            ||
| 20 | { | 
            ||
| 21 | /**  | 
            ||
| 22 | * The Ajax Contest Arrange.  | 
            ||
| 23 | *  | 
            ||
| 24 | * @param Request $request web request  | 
            ||
| 25 | *  | 
            ||
| 26 | * @return JsonResponse  | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 27 | */  | 
            ||
| 28 | public function arrangeContest(Request $request)  | 
            ||
| 29 |     { | 
            ||
| 30 | $request->validate([  | 
            ||
| 31 | 'name' => 'required|max:255',  | 
            ||
| 32 | 'problems' => 'required|max:2550',  | 
            ||
| 33 | 'begin_time' => 'required|date',  | 
            ||
| 34 | 'status_visibility' => 'required|integer',  | 
            ||
| 35 | 'end_time' => 'required|date|after:begin_time',  | 
            ||
| 36 | 'gid' => 'required|integer',  | 
            ||
| 37 | 'description' => 'string',  | 
            ||
| 38 | 'public' => 'integer',  | 
            ||
| 39 | 'practice' => 'integer'  | 
            ||
| 40 | ]);  | 
            ||
| 41 | |||
| 42 | $all_data=$request->all();  | 
            ||
| 43 | |||
| 44 |         if (($all_data['public'] ?? 0) && ($all_data['practice'] ?? 0)) { | 
            ||
| 45 | return ResponseModel::err(4007);  | 
            ||
| 46 | }  | 
            ||
| 47 | |||
| 48 | $contestModel=new ContestModel();  | 
            ||
| 49 | $groupModel=new GroupModel();  | 
            ||
| 50 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 51 |         if ($clearance<2) { | 
            ||
| 52 | return ResponseModel::err(2001);  | 
            ||
| 53 | }  | 
            ||
| 54 |         $problems=explode(",", $all_data["problems"]); | 
            ||
| 55 |         if (count($problems)>26) { | 
            ||
| 56 | return ResponseModel::err(4002);  | 
            ||
| 57 | }  | 
            ||
| 58 | $i=0;  | 
            ||
| 59 | $problemSet=[];  | 
            ||
| 60 |         foreach ($problems as $p) { | 
            ||
| 61 |             if (!empty($p)) { | 
            ||
| 62 | $i++;  | 
            ||
| 63 | $problemSet[]=[  | 
            ||
| 64 | "number"=>$i,  | 
            ||
| 65 | "pcode"=>$p,  | 
            ||
| 66 | "points"=>100  | 
            ||
| 67 | ];  | 
            ||
| 68 | }  | 
            ||
| 69 | }  | 
            ||
| 70 | |||
| 71 |         if (empty($problemSet)) { | 
            ||
| 72 | return ResponseModel::err(1003);  | 
            ||
| 73 | }  | 
            ||
| 74 | |||
| 75 | $cid=$contestModel->arrangeContest($all_data["gid"], [  | 
            ||
| 76 | "assign_uid"=>Auth::user()->id,  | 
            ||
| 77 | "name"=>$all_data["name"],  | 
            ||
| 78 | "description"=>$all_data["description"],  | 
            ||
| 79 | "status_visibility"=>$all_data["status_visibility"],  | 
            ||
| 80 | "begin_time"=>$all_data["begin_time"],  | 
            ||
| 81 | "end_time"=>$all_data["end_time"],  | 
            ||
| 82 | "practice"=>$all_data["practice"] ?? 0,  | 
            ||
| 83 | "public"=>$all_data["public"] ?? 0,  | 
            ||
| 84 | ], $problemSet);  | 
            ||
| 85 | |||
| 86 | return ResponseModel::success(200, 'Successful!', $cid);  | 
            ||
| 87 | }  | 
            ||
| 88 | |||
| 89 | public function changeGroupName(Request $request)  | 
            ||
| 90 |     { | 
            ||
| 91 | $request->validate([  | 
            ||
| 92 | 'gid' => 'required|integer',  | 
            ||
| 93 | 'group_name' => 'max:50',  | 
            ||
| 94 | ]);  | 
            ||
| 95 | |||
| 96 | $all_data=$request->all();  | 
            ||
| 97 | |||
| 98 | $groupModel=new GroupModel();  | 
            ||
| 99 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 100 |         if ($clearance<2) { | 
            ||
| 101 | return ResponseModel::err(2001);  | 
            ||
| 102 | }  | 
            ||
| 103 | |||
| 104 | $groupModel->changeGroupName($all_data["gid"], $all_data["group_name"]);  | 
            ||
| 105 | return ResponseModel::success(200);  | 
            ||
| 106 | }  | 
            ||
| 107 | |||
| 108 | public function changeJoinPolicy(Request $request)  | 
            ||
| 129 | }  | 
            ||
| 130 | |||
| 131 | public function changeGroupImage(Request $request)  | 
            ||
| 132 |     { | 
            ||
| 133 | $request->validate([  | 
            ||
| 134 | 'gid' => 'required|integer',  | 
            ||
| 135 | ]);  | 
            ||
| 136 | |||
| 137 | $all_data=$request->all();  | 
            ||
| 138 | |||
| 139 |         if (!empty($request->file('img')) && $request->file('img')->isValid()) { | 
            ||
| 140 |             $extension=$request->file('img')->extension(); | 
            ||
| 141 |         } else { | 
            ||
| 142 | return ResponseModel::err(1005);  | 
            ||
| 143 | }  | 
            ||
| 144 | |||
| 145 | $allow_extension=['jpg', 'png', 'jpeg', 'gif', 'bmp'];  | 
            ||
| 146 | |||
| 147 | $groupModel=new GroupModel();  | 
            ||
| 148 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 149 |         if ($clearance<2) { | 
            ||
| 150 | return ResponseModel::err(2001);  | 
            ||
| 151 | }  | 
            ||
| 152 | |||
| 153 |         if (!in_array($extension, $allow_extension)) { | 
            ||
| 154 | return ResponseModel::err(1005);  | 
            ||
| 155 | }  | 
            ||
| 156 | |||
| 157 |         $path=$request->file('img')->store('/static/img/group', 'NOJPublic'); | 
            ||
| 158 | |||
| 159 | $group=GroupModel::find($all_data["gid"]);  | 
            ||
| 160 | $old_path=$group->img;  | 
            ||
| 161 |         if ($old_path!='/static/img/group/default.png' && $old_path!='/static/img/group/noj.png' && $old_path!='/static/img/group/icpc.png') { | 
            ||
| 162 |             Storage::disk('NOJPublic')->delete($old_path); | 
            ||
| 163 | }  | 
            ||
| 164 | |||
| 165 | $group->img='/'.$path;  | 
            ||
| 166 | $group->save();  | 
            ||
| 167 | |||
| 168 | return ResponseModel::success(200, null, '/'.$path);  | 
            ||
| 169 | |||
| 170 | }  | 
            ||
| 171 | |||
| 172 | public function changeMemberClearance(Request $request)  | 
            ||
| 173 |     { | 
            ||
| 174 | $request->validate([  | 
            ||
| 175 | 'gid' => 'required|integer',  | 
            ||
| 176 | 'uid' => 'required|integer',  | 
            ||
| 177 | 'permission' => 'required|integer|max:3|min:1',  | 
            ||
| 178 | ]);  | 
            ||
| 179 | |||
| 180 | $all_data=$request->all();  | 
            ||
| 181 | |||
| 182 | $groupModel=new GroupModel();  | 
            ||
| 183 | |||
| 184 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 185 | $target_clearance=$groupModel->judgeClearance($all_data["gid"], $all_data['uid']);  | 
            ||
| 186 | |||
| 187 |         if ($target_clearance==-3) { | 
            ||
| 188 | return ResponseModel::err(7004);  | 
            ||
| 189 | }  | 
            ||
| 190 | |||
| 191 |         if ($target_clearance>=$clearance || $clearance<2 || $all_data['permission']>=$clearance) { | 
            ||
| 192 | return ResponseModel::err(2001);  | 
            ||
| 193 | }  | 
            ||
| 194 | |||
| 195 | $groupModel->changeClearance($all_data['uid'], $all_data["gid"], $all_data['permission']);  | 
            ||
| 196 | |||
| 197 | $result_info=$groupModel->userProfile($all_data['uid'], $all_data["gid"]);  | 
            ||
| 198 | return ResponseModel::success(200, null, $result_info);  | 
            ||
| 199 | }  | 
            ||
| 200 | |||
| 201 | public function approveMember(Request $request)  | 
            ||
| 202 |     { | 
            ||
| 203 | $request->validate([  | 
            ||
| 204 | 'gid' => 'required|integer',  | 
            ||
| 205 | 'uid' => 'required|integer',  | 
            ||
| 206 | ]);  | 
            ||
| 207 | |||
| 208 | $all_data=$request->all();  | 
            ||
| 209 | |||
| 210 | $groupModel=new GroupModel();  | 
            ||
| 211 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 212 | $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);  | 
            ||
| 213 |         if ($clearance>1) { | 
            ||
| 214 |             if ($targetClearance!=0) { | 
            ||
| 215 | return ResponseModel::err(7003);  | 
            ||
| 216 | }  | 
            ||
| 217 | $groupModel->changeClearance($all_data["uid"], $all_data["gid"], 1);  | 
            ||
| 218 | return ResponseModel::success(200);  | 
            ||
| 219 | }  | 
            ||
| 220 | return ResponseModel::err(7002);  | 
            ||
| 221 | }  | 
            ||
| 222 | |||
| 223 | public function removeMember(Request $request)  | 
            ||
| 224 |     { | 
            ||
| 225 | $request->validate([  | 
            ||
| 226 | 'gid' => 'required|integer',  | 
            ||
| 227 | 'uid' => 'required|integer',  | 
            ||
| 228 | ]);  | 
            ||
| 229 | |||
| 230 | $all_data=$request->all();  | 
            ||
| 231 | |||
| 232 | $groupModel=new GroupModel();  | 
            ||
| 233 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 234 | $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);  | 
            ||
| 235 |         if ($clearance<=1 || $clearance<=$targetClearance) { | 
            ||
| 236 | return ResponseModel::err(7002);  | 
            ||
| 237 | }  | 
            ||
| 238 | |||
| 239 | $groupModel->removeClearance($all_data["uid"], $all_data["gid"]);  | 
            ||
| 240 | $groupModel->refreshElo($all_data["gid"]);  | 
            ||
| 241 | return ResponseModel::success(200);  | 
            ||
| 242 | }  | 
            ||
| 243 | |||
| 244 | public function inviteMember(Request $request)  | 
            ||
| 245 |     { | 
            ||
| 246 | $request->validate([  | 
            ||
| 247 | 'gid' => 'required|integer',  | 
            ||
| 248 | 'email' => 'required|email',  | 
            ||
| 249 | ]);  | 
            ||
| 250 | |||
| 251 | $all_data=$request->all();  | 
            ||
| 252 | |||
| 253 | $groupModel=new GroupModel();  | 
            ||
| 254 | $is_user=$groupModel->isUser($all_data["email"]);  | 
            ||
| 255 |         if (!$is_user) { | 
            ||
| 256 | return ResponseModel::err(2006);  | 
            ||
| 257 | }  | 
            ||
| 258 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 259 |         if ($clearance<2) { | 
            ||
| 260 | return ResponseModel::err(7002);  | 
            ||
| 261 | }  | 
            ||
| 262 | $targetClearance=$groupModel->judgeEmailClearance($all_data["gid"], $all_data["email"]);  | 
            ||
| 263 |         if ($targetClearance!=-3) { | 
            ||
| 264 | return ResponseModel::err(7003);  | 
            ||
| 265 | }  | 
            ||
| 266 | $groupModel->inviteMember($all_data["gid"], $all_data["email"]);  | 
            ||
| 267 | $basic=$groupModel->basic($all_data['gid']);  | 
            ||
| 268 |         $url=route('group.detail', ['gcode' => $basic['gcode']]); | 
            ||
| 269 |         $receiverInfo=User::where('email', $all_data['email'])->first(); | 
            ||
| 270 | $sender_name=Auth::user()->name;  | 
            ||
| 271 | sendMessage([  | 
            ||
| 272 | 'receiver' => $receiverInfo["id"],  | 
            ||
| 273 | 'sender' => Auth::user()->id,  | 
            ||
| 274 |             'title' => __('group.message.inviteJoin.title', ['sender_name' => $sender_name, 'group_name' => $basic['name']]), | 
            ||
| 275 |             'content' => __('group.message.inviteJoin.content', ['reciver_name' => $receiverInfo['name'], 'group_name' => $basic['name'], 'group_url' => $url]), | 
            ||
| 276 | ]);  | 
            ||
| 277 | return ResponseModel::success(200);  | 
            ||
| 278 | }  | 
            ||
| 279 | |||
| 280 | public function changeSubGroup(Request $request)  | 
            ||
| 281 |     { | 
            ||
| 282 | $request->validate([  | 
            ||
| 283 | 'gid'=>'required|integer',  | 
            ||
| 284 | 'uid'=>'required|integer',  | 
            ||
| 285 | 'sub'=>'nullable|max:60000'  | 
            ||
| 286 | ]);  | 
            ||
| 287 | |||
| 288 | $all_data=$request->all();  | 
            ||
| 289 | |||
| 290 | $groupModel=new GroupModel();  | 
            ||
| 291 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 292 | $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);  | 
            ||
| 293 |         if ($clearance>1 && $clearance>=$targetClearance) { | 
            ||
| 294 | $groupModel->changeGroup($all_data["uid"], $all_data["gid"], $all_data["sub"]);  | 
            ||
| 295 | return ResponseModel::success(200);  | 
            ||
| 296 | }  | 
            ||
| 297 | return ResponseModel::err(7002);  | 
            ||
| 298 | }  | 
            ||
| 299 | |||
| 300 | public function createNotice(Request $request)  | 
            ||
| 301 |     { | 
            ||
| 302 | $request->validate([  | 
            ||
| 303 | 'gid' => 'required|integer',  | 
            ||
| 304 | 'title' => 'required|min:3|max:50',  | 
            ||
| 305 | 'content' => 'required|min:3|max:60000',  | 
            ||
| 306 | ]);  | 
            ||
| 307 | |||
| 308 | $all_data=$request->all();  | 
            ||
| 309 | |||
| 310 | $groupModel=new GroupModel();  | 
            ||
| 311 | $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);  | 
            ||
| 312 |         if ($clearance<2) { | 
            ||
| 313 | return ResponseModel::err(2001);  | 
            ||
| 314 | }  | 
            ||
| 315 | $groupModel->createNotice($all_data["gid"], Auth::user()->id, $all_data["title"], $all_data["content"]);  | 
            ||
| 316 | return ResponseModel::success(200);  | 
            ||
| 317 | }  | 
            ||
| 318 | |||
| 319 | public function createHomework(Request $request)  | 
            ||
| 421 | }  | 
            ||
| 422 | }  | 
            ||
| 423 | 
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths