Passed
Push — master ( a04313...2ad4a1 )
by John
03:43
created

GroupController::removeMember()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 11
nc 2
nop 1
dl 0
loc 17
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Ajax;
4
5
use App\Models\ContestModel;
6
use App\Models\GroupModel;
7
use App\Models\ResponseModel;
8
use App\Models\AccountModel;
9
use App\Http\Controllers\Controller;
10
use Illuminate\Http\Request;
11
use Illuminate\Http\Response;
12
use Auth;
13
14
class GroupController extends Controller
15
{
16
    /**
17
     * The Ajax Contest Arrange.
18
     *
19
     * @param Request $request web request
20
     *
21
     * @return JsonResponse
0 ignored issues
show
Bug introduced by
The type App\Http\Controllers\Ajax\JsonResponse was not found. Maybe you did not declare it correctly or list all dependencies?

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:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
22
     */
23
    public function arrangeContest(Request $request)
24
    {
25
        $request->validate([
26
            'name' => 'required|max:255',
27
            'problems' => 'required|max:2550',
28
            'begin_time' => 'required|date',
29
            'end_time' => 'required|date|after:begin_time',
30
            'gid' => 'required|integer',
31
            'description' => 'string'
32
        ]);
33
34
        $all_data=$request->all();
35
36
        $contestModel=new ContestModel();
37
        $groupModel=new GroupModel();
38
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
39
        if ($clearance<2) {
40
            return ResponseModel::err(2001);
0 ignored issues
show
Bug Best Practice introduced by
The expression return App\Models\ResponseModel::err(2001) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type App\Http\Controllers\Ajax\JsonResponse.
Loading history...
41
        }
42
        $problems=explode(",", $all_data["problems"]);
43
        if (count($problems)>26) {
44
            return ResponseModel::err(4002);
0 ignored issues
show
Bug Best Practice introduced by
The expression return App\Models\ResponseModel::err(4002) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type App\Http\Controllers\Ajax\JsonResponse.
Loading history...
45
        }
46
        $i=0;
47
        $problemSet=[];
48
        foreach ($problems as $p) {
49
            if (!empty($p)) {
50
                $i++;
51
                $problemSet[]=[
52
                    "number"=>$i,
53
                    "pcode"=>$p,
54
                    "points"=>100
55
                ];
56
            }
57
        }
58
59
        if (empty($problemSet)) {
60
            return ResponseModel::err(1003);
0 ignored issues
show
Bug Best Practice introduced by
The expression return App\Models\ResponseModel::err(1003) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type App\Http\Controllers\Ajax\JsonResponse.
Loading history...
61
        }
62
63
        $contestModel->arrangeContest($all_data["gid"], [
64
            "name"=>$all_data["name"],
65
            "description"=>$all_data["description"],
66
            "begin_time"=>$all_data["begin_time"],
67
            "end_time"=>$all_data["end_time"],
68
        ], $problemSet);
69
70
        return ResponseModel::success(200);
0 ignored issues
show
Bug Best Practice introduced by
The expression return App\Models\ResponseModel::success(200) returns the type Illuminate\Http\JsonResponse which is incompatible with the documented return type App\Http\Controllers\Ajax\JsonResponse.
Loading history...
71
    }
72
73
    public function generateContestAccount(Request $request)
74
    {
75
        $request->validate([
76
            'cid' => 'required|integer',
77
            'ccode' => 'required|min:3|max:10',
78
            'num' => 'required|integer'
79
        ]);
80
81
        $all_data=$request->all();
82
83
        $groupModel=new GroupModel();
84
        $contestModel=new ContestModel();
85
        $gid=$contestModel->gid($all_data["cid"]);
86
        $clearance=$groupModel->judgeClearance($gid, Auth::user()->id);
87
        if ($clearance<3) {
88
            return ResponseModel::err(2001);
89
        }
90
        $accountModel=new AccountModel();
91
        $ret=$accountModel->generateContestAccount($all_data["cid"], $all_data["ccode"], $all_data["num"]);
92
        return ResponseModel::success(200, null, $ret);
93
    }
94
95
    public function changeNickName(Request $request)
96
    {
97
        $request->validate([
98
            'gid' => 'required|integer',
99
            'nick_name' => 'max:50',
100
        ]);
101
102
        $all_data=$request->all();
103
104
        $groupModel=new GroupModel();
105
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
106
        if ($clearance<1) {
107
            return ResponseModel::err(2001);
108
        }
109
        $groupModel->changeNickName($all_data["gid"], Auth::user()->id, $all_data["nick_name"]);
110
        return ResponseModel::success(200);
111
    }
112
113
    public function joinGroup(Request $request)
114
    {
115
        $request->validate([
116
            'gid' => 'required|integer',
117
        ]);
118
119
        $all_data=$request->all();
120
121
        $groupModel=new GroupModel();
122
        $join_policy=$groupModel->joinPolicy($all_data["gid"]);
123
        if (is_null($join_policy)) {
124
            return ResponseModel::err(7001);
125
        }
126
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
127
        if ($join_policy==3) {
128
            if ($clearance==-1) {
129
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
130
            } elseif ($clearance==-3) {
131
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
132
            }
133
            return ResponseModel::success(200);
134
        }
135
    }
136
137
    public function approveMember(Request $request)
138
    {
139
        $request->validate([
140
            'gid' => 'required|integer',
141
            'uid' => 'required|integer',
142
        ]);
143
144
        $all_data=$request->all();
145
146
        $groupModel=new GroupModel();
147
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
148
        $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);
149
        if ($clearance>1) {
150
            if($targetClearance!=0) {
151
                return ResponseModel::err(7003);
152
            }
153
            $groupModel->changeClearance($all_data["uid"], $all_data["gid"], 1);
154
            return ResponseModel::success(200);
155
        }
156
        return ResponseModel::err(7002);
157
    }
158
159
    public function removeMember(Request $request)
160
    {
161
        $request->validate([
162
            'gid' => 'required|integer',
163
            'uid' => 'required|integer',
164
        ]);
165
166
        $all_data=$request->all();
167
168
        $groupModel=new GroupModel();
169
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
170
        $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);
171
        if ($clearance>1 && $clearance>$targetClearance) {
172
            $groupModel->removeClearance($all_data["uid"], $all_data["gid"]);
173
            return ResponseModel::success(200);
174
        }
175
        return ResponseModel::err(7002);
176
    }
177
}
178