Completed
Push — master ( d15589...061f13 )
by John
18s queued 12s
created

GroupController::joinGroup()   B

Complexity

Conditions 9
Paths 9

Size

Total Lines 31
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 22
nc 9
nop 1
dl 0
loc 31
rs 8.0555
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 Illuminate\Support\Facades\Storage;
13
use Auth;
14
15
class GroupController extends Controller
16
{
17
    public function changeNickName(Request $request)
18
    {
19
        $request->validate([
20
            'gid' => 'required|integer',
21
            'nick_name' => 'max:50',
22
        ]);
23
24
        $all_data=$request->all();
25
26
        $groupModel=new GroupModel();
27
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
28
        if ($clearance<1) {
29
            return ResponseModel::err(2001);
30
        }
31
        $groupModel->changeNickName($all_data["gid"], Auth::user()->id, $all_data["nick_name"]);
32
        return ResponseModel::success(200);
33
    }
34
35
    public function joinGroup(Request $request)
36
    {
37
        $request->validate([
38
            'gid' => 'required|integer',
39
        ]);
40
41
        $all_data=$request->all();
42
43
        $groupModel=new GroupModel();
44
        $join_policy=$groupModel->joinPolicy($all_data["gid"]);
45
        if (is_null($join_policy)) {
46
            return ResponseModel::err(7001);
47
        }
48
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
49
        if ($join_policy==1) {
50
            if ($clearance==-1) {
51
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
52
            }
53
            return ResponseModel::success(200);
54
        } elseif ($join_policy==2) {
55
            if ($clearance==-3) {
56
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
57
            }
58
            return ResponseModel::success(200);
59
        } elseif ($join_policy==3) {
60
            if ($clearance==-1) {
61
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
62
            } elseif ($clearance==-3) {
63
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
64
            }
65
            return ResponseModel::success(200);
66
        }
67
    }
68
69
    public function createGroup(Request $request)
70
    {
71
        $request->validate([
72
            'gcode' => 'required|alpha_dash|min:3|max:50',
73
            'name' => 'required|min:3|max:50',
74
            'public' => 'required|integer|min:1|max:2',
75
            'description' => 'nullable|max:60000',
76
            'join_policy'  => 'required|integer|min:1|max:3'
77
        ]);
78
79
        $all_data=$request->all();
80
81
        $groupModel=new GroupModel();
82
        if($all_data["gcode"]=="create") return ResponseModel::err(7005);
83
        $is_group=$groupModel->isGroup($all_data["gcode"]);
84
        if($is_group) return ResponseModel::err(7006);
85
86
        $allow_extension=['jpg', 'png', 'jpeg', 'gif', 'bmp'];
87
        if (!empty($request->file('img')) && $request->file('img')->isValid()) {
88
            $extension=$request->file('img')->extension();
89
            if (!in_array($extension, $allow_extension)) {
90
                return ResponseModel::err(1005);
91
            }
92
            $path=$request->file('img')->store('/static/img/group', 'NOJPublic');
93
        } else {
94
            $path="static/img/group/default.png";
95
        }
96
        $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

96
        $img='/'./** @scrutinizer ignore-type */ $path;
Loading history...
97
98
        $groupModel->createGroup(Auth::user()->id, $all_data["gcode"], $img, $all_data["name"], $all_data["public"], $all_data["description"], $all_data["join_policy"]);
99
        return ResponseModel::success(200);
100
    }
101
102
    public function getPracticeStat(Request $request)
103
    {
104
        $request->validate([
105
            'gid' => 'required|integer',
106
            'mode' => 'required'
107
        ]);
108
109
        $all_data=$request->all();
110
111
        $groupModel=new GroupModel();
112
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
113
        if ($clearance > 0) {
114
            switch($all_data['mode']){
115
                case 'contest':
116
                    $ret = $groupModel->groupMemberPracticeContestStat($all_data["gid"]);
117
                break;
118
                case 'tag':
119
                    $ret = $groupModel->groupMemberPracticeTagStat($all_data["gid"]);
120
                break;
121
                default:
122
                    return ResponseModel::err(1007);
123
                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...
124
            }
125
126
            return ResponseModel::success(200,null,$ret);
127
        }
128
        return ResponseModel::err(7002);
129
    }
130
131
    public function eloChangeLog(Request $request)
132
    {
133
        $request->validate([
134
            'gid' => 'required|integer',
135
            'uid' => 'required|integer',
136
        ]);
137
138
        $all_data=$request->all();
139
140
        $groupModel=new GroupModel();
141
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
142
        if($clearance <= 0){
143
            return ResponseModel::err(7002);
144
        }
145
        $ret = $groupModel->getEloChangeLog($all_data['gid'],$all_data['uid']);
146
        return ResponseModel::success(200,null,$ret);
147
    }
148
}
149