Issues (232)

app/Http/Controllers/TeamController.php (10 issues)

1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Championship;
6
use App\Http\Requests\TeamRequest;
7
use App\Team;
8
use App\Tournament;
9
use Illuminate\Auth\Access\AuthorizationException;
10
use Illuminate\Database\QueryException;
11
use Illuminate\Http\JsonResponse;
12
use Illuminate\Http\Request;
13
use Illuminate\Support\Collection;
14
use Illuminate\Support\Facades\Auth;
15
use Illuminate\Support\Facades\Lang;
16
use Illuminate\Support\Facades\Response;
17
use Illuminate\Support\Facades\View;
18
19
class TeamController extends Controller
20
{
21
    /**
22
     * Display a listing of the teams for a tournament.
23
     *
24
     * @param Tournament $tournament
25
     * @return View
26
     */
27
    public function index(Tournament $tournament)
28
    {
29
        $tournament = Tournament::with(['championships' => function ($query) {
30
            $query->with('teams')
31
                ->whereHas('category', function ($subquery) {
32
                    $subquery->where('isTeam', '=', 1);
33
                });
34
        }])->withCount('competitors', 'teams')
35
            ->find($tournament->id);
36
37
38
        $arrChampionshipsWithTeamsAndCompetitors = $tournament->championships->map(function ($championship) {
39
            $competitors = $championship->competitors->load('user')->map(function ($competitor) {
40
                return ["id" => $competitor->id, "name" => $competitor->user->name];
41
            })->toArray();
42
            $teams = $championship->teams()->with('competitors.user')->select('id','name')->get()->toArray();
43
            $tempAssignCompatitors = new Collection();
44
            $assignedCompetitors = $this->getAssignedCompetitors($championship, $tempAssignCompatitors);
45
            $freeCompetitors = $championship->competitors;
46
            if ($assignedCompetitors != null) {
47
                $freeCompetitors = $freeCompetitors->diff($assignedCompetitors);
48
            }
49
50
            return [
51
                'championship' => $championship->id,
52
                'competitors' => $competitors,
53
                'assignedCompetitors' => $assignedCompetitors,
54
                'freeCompetitors' => $freeCompetitors,
55
                'teams' => $teams
56
            ];
57
        })->toArray();
58
        return view("teams.index", compact('tournament', 'arrChampionshipsWithTeamsAndCompetitors'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('teams.index...hTeamsAndCompetitors')) returns the type Illuminate\Contracts\Vie...ry|Illuminate\View\View which is incompatible with the documented return type Illuminate\Support\Facades\View.
Loading history...
59
60
    }
61
62
    /**
63
     * @param $championship
64
     * @param $tempAssignCompatitors
65
     * @return mixed
66
     */
67
    private function getAssignedCompetitors($championship, $tempAssignCompatitors)
68
    {
69
        return $championship->teams->reduce(function ($acc, $team) use ($tempAssignCompatitors) {
70
            return $tempAssignCompatitors->push($team->competitors()->with('user')->get())->collapse();
71
        });
72
    }
73
74
    /**
75
     * Show the form for creating a new competitor.
76
     *
77
     * @param Tournament $tournament
78
     * @return View
79
     * @throws AuthorizationException
80
     */
81
    public function create(Tournament $tournament)
82
    {
83
        $team = new Team;
84
        $this->authorize('create', [Team::class, $tournament, Auth::user()]);
85
        return view("teams.form", compact('tournament', 'team', 'cts'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('teams.form'...ament', 'team', 'cts')) returns the type Illuminate\Contracts\Vie...ry|Illuminate\View\View which is incompatible with the documented return type Illuminate\Support\Facades\View.
Loading history...
86
    }
87
88
    /**
89
     * Store a newly created resource in storage.
90
     *
91
     * @param Request $request
92
     * @param Championship $championship
93
     * @return View
94
     * @throws AuthorizationException
95
     */
96
    public function store(Request $request, Championship $championship)
97
    {
98
        $this->authorize('store', [Team::class, $championship->tournament, Auth::user()]);
99
        try {
100
            $team = Team::where('championship_id', $championship->id)->orderBy('id', 'desc')->first();
101
            $short_id = 1;
102
            if ($team != null) {
103
                $short_id = $team->short_id + 1;
0 ignored issues
show
The property short_id does not seem to exist on App\Team. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
104
            }
105
            $request->request->add(['short_id' => $short_id]);
106
            $team = Team::create($request->all());
107
            flash()->success(trans('msg.team_create_successful', ['name' => $team->name]));
0 ignored issues
show
Are you sure the usage of flash() is correct as it seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
108
        } catch (QueryException $e) {
109
            flash()->error(trans('msg.team_create_error_already_exists', ['name' => $request->name]));
0 ignored issues
show
Are you sure the usage of flash() is correct as it seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
110
        }
111
112
        return back()->with('activeTab', $request->activeTab);
0 ignored issues
show
Bug Best Practice introduced by
The expression return back()->with('act...', $request->activeTab) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Support\Facades\View.
Loading history...
113
    }
114
115
    /**
116
     * Show the form for creating a new competitor.
117
     *
118
     * @param Tournament $tournament
119
     * @param $teamId
120
     * @return View
121
     * @throws AuthorizationException
122
     */
123
    public function edit(Tournament $tournament, $teamId)
124
    {
125
        $team = Team::findOrFail($teamId);
126
        $this->authorize('edit', [Team::class, $tournament, Auth::user()]);
127
128
        $cts = $tournament->buildCategoryList();
129
        return view("teams.form", compact('tournament', 'team', 'cts'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('teams.form'...ament', 'team', 'cts')) returns the type Illuminate\Contracts\Vie...ry|Illuminate\View\View which is incompatible with the documented return type Illuminate\Support\Facades\View.
Loading history...
130
    }
131
132
    /**
133
     * Update a newly created resource in storage.
134
     *
135
     * @param TeamRequest $request
136
     * @param Tournament $tournament
137
     * @param $teamId
138
     * @return Response
139
     * @throws AuthorizationException
140
     */
141
    public function update(TeamRequest $request, Tournament $tournament, $teamId)
142
    {
143
        $team = Team::findOrFail($teamId);
144
        $this->authorize('update', [Team::class, $tournament, Auth::user()]);
145
146
        $team->update($request->all());
147
        flash()->success(trans('msg.team_edit_successful', ['name' => $team->name]));
0 ignored issues
show
Are you sure the usage of flash() is correct as it seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
148
        return redirect()->route('teams.index', $tournament->slug);
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route...ex', $tournament->slug) returns the type Illuminate\Http\Redirect...nate\Routing\Redirector which is incompatible with the documented return type Illuminate\Support\Facades\Response.
Loading history...
149
150
    }
151
152
    /**
153
     * Remove the Team from storage.
154
     *
155
     * @param Team $team
156
     * @return JsonResponse
157
     * @throws AuthorizationException
158
     */
159
    public function destroy(Team $team)
160
    {
161
        $tournament = $team->championship->tournament;
0 ignored issues
show
The property championship does not seem to exist on App\Team. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
162
        $this->authorize('delete', [Team::class, $tournament, Auth::user()]);
163
164
        if ($team->forceDelete()) {
165
            return Response::json(['msg' => Lang::get('msg.team_delete_successful', ['name' => $team->name]), 'status' => 'success']);
166
        }
167
        return Response::json(['msg' => Lang::get('msg.team_delete_error', ['name' => $team->name]), 'status' => 'error']);
168
    }
169
}
170