Passed
Push — master ( d35d45...a409d2 )
by
unknown
09:26
created

GroupController::changeJoinPolicy()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 12
nc 3
nop 1
dl 0
loc 20
rs 9.8666
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 changeGroupName(Request $request)
74
    {
75
        $request->validate([
76
            'gid' => 'required|integer',
77
            'group_name' => 'max:50',
78
        ]);
79
80
        $all_data=$request->all();
81
82
        $groupModel=new GroupModel();
83
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
84
        if ($clearance < 2){
85
            return ResponseModel::err(2001);
86
        }
87
88
        $groupModel->changeGroupName($all_data["gid"], $all_data["group_name"]);
89
        return ResponseModel::success(200);
90
    }
91
92
    public function changeJoinPolicy(Request $request){
93
        $request->validate([
94
            'gid' => 'required|integer',
95
            'join_policy' => 'required|integer',
96
        ]);
97
98
        $all_data=$request->all();
99
100
        $groupModel=new GroupModel();
101
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
102
        if ($clearance < 2){
103
            return ResponseModel::err(2001);
104
        }
105
106
        if ($all_data["join_policy"] < 1 || $all_data["join_policy"] > 3){
107
            return ResponseModel::err(1007);
108
        }
109
110
        $groupModel->changeJoinPolicy($all_data["gid"], $all_data["join_policy"]);
111
        return ResponseModel::success(200);
112
    }
113
114
    public function generateContestAccount(Request $request)
115
    {
116
        $request->validate([
117
            'cid' => 'required|integer',
118
            'ccode' => 'required|min:3|max:10',
119
            'num' => 'required|integer'
120
        ]);
121
122
        $all_data=$request->all();
123
124
        $groupModel=new GroupModel();
125
        $contestModel=new ContestModel();
126
        $gid=$contestModel->gid($all_data["cid"]);
127
        $clearance=$groupModel->judgeClearance($gid, Auth::user()->id);
128
        if ($clearance<3) {
129
            return ResponseModel::err(2001);
130
        }
131
        $accountModel=new AccountModel();
132
        $ret=$accountModel->generateContestAccount($all_data["cid"], $all_data["ccode"], $all_data["num"]);
133
        return ResponseModel::success(200, null, $ret);
134
    }
135
136
    public function changeNickName(Request $request)
137
    {
138
        $request->validate([
139
            'gid' => 'required|integer',
140
            'nick_name' => 'max:50',
141
        ]);
142
143
        $all_data=$request->all();
144
145
        $groupModel=new GroupModel();
146
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
147
        if ($clearance<1) {
148
            return ResponseModel::err(2001);
149
        }
150
        $groupModel->changeNickName($all_data["gid"], Auth::user()->id, $all_data["nick_name"]);
151
        return ResponseModel::success(200);
152
    }
153
154
    public function joinGroup(Request $request)
155
    {
156
        $request->validate([
157
            'gid' => 'required|integer',
158
        ]);
159
160
        $all_data=$request->all();
161
162
        $groupModel=new GroupModel();
163
        $join_policy=$groupModel->joinPolicy($all_data["gid"]);
164
        if (is_null($join_policy)) {
165
            return ResponseModel::err(7001);
166
        }
167
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
168
        if ($join_policy==3) {
169
            if ($clearance==-1) {
170
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
171
            } elseif ($clearance==-3) {
172
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
173
            }
174
            return ResponseModel::success(200);
175
        }
176
    }
177
178
    public function approveMember(Request $request)
179
    {
180
        $request->validate([
181
            'gid' => 'required|integer',
182
            'uid' => 'required|integer',
183
        ]);
184
185
        $all_data=$request->all();
186
187
        $groupModel=new GroupModel();
188
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
189
        $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);
190
        if ($clearance>1) {
191
            if($targetClearance!=0) {
192
                return ResponseModel::err(7003);
193
            }
194
            $groupModel->changeClearance($all_data["uid"], $all_data["gid"], 1);
195
            return ResponseModel::success(200);
196
        }
197
        return ResponseModel::err(7002);
198
    }
199
200
    public function removeMember(Request $request)
201
    {
202
        $request->validate([
203
            'gid' => 'required|integer',
204
            'uid' => 'required|integer',
205
        ]);
206
207
        $all_data=$request->all();
208
209
        $groupModel=new GroupModel();
210
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
211
        $targetClearance=$groupModel->judgeClearance($all_data["gid"], $all_data["uid"]);
212
        if ($clearance>1 && $clearance>$targetClearance) {
213
            $groupModel->removeClearance($all_data["uid"], $all_data["gid"]);
214
            return ResponseModel::success(200);
215
        }
216
        return ResponseModel::err(7002);
217
    }
218
}
219