Passed
Branch dev (36fa10)
by John
04:08
created

GroupController   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 66
c 1
b 0
f 0
dl 0
loc 104
rs 10
wmc 17

4 Methods

Rating   Name   Duplication   Size   Complexity  
A joinGroup() 0 21 5
A getPracticeStat() 0 27 4
A changeNickName() 0 16 2
B createGroup() 0 31 6
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==3) {
50
            if ($clearance==-1) {
51
                $groupModel->changeClearance(Auth::user()->id, $all_data["gid"], 1);
52
            } elseif ($clearance==-3) {
53
                $groupModel->addClearance(Auth::user()->id, $all_data["gid"], 0);
54
            }
55
            return ResponseModel::success(200);
56
        }
57
    }
58
59
    public function createGroup(Request $request)
60
    {
61
        $request->validate([
62
            'gcode' => 'required|alpha_dash|min:3|max:50',
63
            'name' => 'required|min:3|max:50',
64
            'public' => 'required|integer|min:1|max:2',
65
            'description' => 'nullable|max:60000',
66
            'join_policy'  => 'required|integer|min:1|max:3'
67
        ]);
68
69
        $all_data=$request->all();
70
71
        $groupModel=new GroupModel();
72
        if($all_data["gcode"]=="create") return ResponseModel::err(7005);
73
        $is_group=$groupModel->isGroup($all_data["gcode"]);
74
        if($is_group) return ResponseModel::err(7006);
75
76
        $allow_extension=['jpg', 'png', 'jpeg', 'gif', 'bmp'];
77
        if (!empty($request->file('img')) && $request->file('img')->isValid()) {
78
            $extension=$request->file('img')->extension();
79
            if (!in_array($extension, $allow_extension)) {
80
                return ResponseModel::err(1005);
81
            }
82
            $path=$request->file('img')->store('/static/img/group', 'NOJPublic');
83
        } else {
84
            $path="static/img/group/default.png";
85
        }
86
        $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

86
        $img='/'./** @scrutinizer ignore-type */ $path;
Loading history...
87
88
        $groupModel->createGroup(Auth::user()->id, $all_data["gcode"], $img, $all_data["name"], $all_data["public"], $all_data["description"], $all_data["join_policy"]);
89
        return ResponseModel::success(200);
90
    }
91
92
    public function getPracticeStat(Request $request)
93
    {
94
        $request->validate([
95
            'gid' => 'required|string',
96
            'mode' => 'required'
97
        ]);
98
99
        $all_data=$request->all();
100
101
        $groupModel=new GroupModel();
102
        $clearance=$groupModel->judgeClearance($all_data["gid"], Auth::user()->id);
103
        if ($clearance > 0) {
104
            switch($all_data['mode']){
105
                case 'contest':
106
                    $ret = $groupModel->groupMemberPracticeContestStat($all_data["gid"]);
107
                break;
108
                case 'tag':
109
                    $ret = $groupModel->groupMemberPracticeTagStat($all_data["gid"]);
110
                break;
111
                default:
112
                    return ResponseModel::err(1007);
113
                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...
114
            }
115
116
            return ResponseModel::success(200,null,$ret);
117
        }
118
        return ResponseModel::err(7002);
119
    }
120
}
121