]> git.localhorst.tv Git - alttp.git/blob - app/Http/Controllers/TournamentController.php
fd9aab35d79e91bae3be78889d49885ea740df6c
[alttp.git] / app / Http / Controllers / TournamentController.php
1 <?php
2
3 namespace App\Http\Controllers;
4
5 use App\Events\ApplicationAdded;
6 use App\Events\TournamentChanged;
7 use App\Models\Application;
8 use App\Models\Protocol;
9 use App\Models\Tournament;
10 use Illuminate\Auth\Access\AuthorizationException;
11 use Illuminate\Http\Request;
12
13 class TournamentController extends Controller
14 {
15
16         public function apply(Request $request, Tournament $tournament) {
17                 $this->authorize('apply', $tournament);
18                 $application = new Application();
19                 $application->tournament_id = $tournament->id;
20                 $application->user_id = $request->user()->id;
21                 $application->save();
22                 ApplicationAdded::dispatch($application);
23                 Protocol::applicationReceived($tournament, $application, $request->user());
24                 return $tournament->toJson();
25         }
26
27         public function single(Request $request, $id) {
28                 $tournament = Tournament::with(
29                         'applications',
30                         'applications.user',
31                         'rounds',
32                         'rounds.results',
33                         'participants',
34                         'participants.user',
35                 )->findOrFail($id);
36                 $this->authorize('view', $tournament);
37                 foreach ($tournament->rounds as $round) {
38                         try {
39                                 $this->authorize('seeResults', $round);
40                         } catch (AuthorizationException) {
41                                 $round->hideResults();
42                         }
43                 }
44                 return $tournament->toJson();
45         }
46
47         public function open(Request $request, Tournament $tournament) {
48                 $this->authorize('update', $tournament);
49                 $tournament->accept_applications = true;
50                 $tournament->save();
51                 TournamentChanged::dispatch($tournament);
52                 Protocol::tournamentOpenen($tournament, $request->user());
53                 return $tournament->toJson();
54         }
55
56         public function close(Request $request, Tournament $tournament) {
57                 $this->authorize('update', $tournament);
58                 $tournament->accept_applications = false;
59                 $tournament->save();
60                 TournamentChanged::dispatch($tournament);
61                 Protocol::tournamentClosed($tournament, $request->user());
62                 return $tournament->toJson();
63         }
64
65         public function lock(Request $request, Tournament $tournament) {
66                 $this->authorize('update', $tournament);
67                 $tournament->locked = true;
68                 $tournament->save();
69                 TournamentChanged::dispatch($tournament);
70                 Protocol::tournamentLocked($tournament, $request->user());
71                 return $tournament->toJson();
72         }
73
74         public function unlock(Request $request, Tournament $tournament) {
75                 $this->authorize('update', $tournament);
76                 $tournament->locked = false;
77                 $tournament->save();
78                 TournamentChanged::dispatch($tournament);
79                 Protocol::tournamentUnlocked($tournament, $request->user());
80                 return $tournament->toJson();
81         }
82
83 }