]> git.localhorst.tv Git - alttp.git/blob - app/Http/Controllers/TournamentController.php
tournament settings
[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 discord(Request $request, Tournament $tournament) {
48                 $this->authorize('update', $tournament);
49                 $validatedData = $request->validate([
50                         'guild_id' => 'string|nullable',
51                 ]);
52                 if (array_key_exists('guild_id', $validatedData)) {
53                         $tournament->discord = $validatedData['guild_id'];
54                 }
55                 $tournament->save();
56                 if ($tournament->wasChanged()) {
57                         TournamentChanged::dispatch($tournament);
58                         Protocol::tournamentDiscord($tournament, $request->user());
59                 }
60                 return $tournament->toJson();
61         }
62
63         public function discordSettings(Request $request, Tournament $tournament) {
64                 $this->authorize('update', $tournament);
65                 $validatedData = $request->validate([
66                         'round_template' => 'string|nullable',
67                 ]);
68                 if (array_key_exists('round_template', $validatedData)) {
69                         $tournament->discord_round_template = $validatedData['round_template'];
70                 }
71                 $tournament->save();
72                 if ($tournament->wasChanged()) {
73                         TournamentChanged::dispatch($tournament);
74                         Protocol::tournamentDiscordSettings($tournament, $request->user());
75                 }
76                 return $tournament->toJson();
77         }
78
79         public function open(Request $request, Tournament $tournament) {
80                 $this->authorize('update', $tournament);
81                 $tournament->accept_applications = true;
82                 $tournament->save();
83                 TournamentChanged::dispatch($tournament);
84                 Protocol::tournamentOpenen($tournament, $request->user());
85                 return $tournament->toJson();
86         }
87
88         public function close(Request $request, Tournament $tournament) {
89                 $this->authorize('update', $tournament);
90                 $tournament->accept_applications = false;
91                 $tournament->save();
92                 TournamentChanged::dispatch($tournament);
93                 Protocol::tournamentClosed($tournament, $request->user());
94                 return $tournament->toJson();
95         }
96
97         public function lock(Request $request, Tournament $tournament) {
98                 $this->authorize('update', $tournament);
99                 $tournament->locked = true;
100                 $tournament->save();
101                 TournamentChanged::dispatch($tournament);
102                 Protocol::tournamentLocked($tournament, $request->user());
103                 return $tournament->toJson();
104         }
105
106         public function unlock(Request $request, Tournament $tournament) {
107                 $this->authorize('update', $tournament);
108                 $tournament->locked = false;
109                 $tournament->save();
110                 TournamentChanged::dispatch($tournament);
111                 Protocol::tournamentUnlocked($tournament, $request->user());
112                 return $tournament->toJson();
113         }
114
115 }