1<?php
2
3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
4// See the LICENCE file in the repository root for full licence text.
5
6namespace App\Http\Controllers\InterOp;
7
8use App\Http\Controllers\Controller;
9use App\Jobs\BeatmapsetDelete;
10use App\Jobs\Notifications\UserBeatmapsetNew;
11use App\Jobs\Notifications\UserBeatmapsetRevive;
12use App\Models\BeatmapDiscussion;
13use App\Models\BeatmapDiscussionPost;
14use App\Models\Beatmapset;
15use App\Models\Event;
16use App\Models\User;
17
18class BeatmapsetsController extends Controller
19{
20 public function broadcastNew($id)
21 {
22 $beatmapset = Beatmapset::findOrFail($id);
23
24 (new UserBeatmapsetNew($beatmapset))->dispatch();
25
26 if (request()->boolean('create_event')) {
27 Event::generate('beatmapsetUpload', ['beatmapset' => $beatmapset]);
28 }
29
30 return response(null, 204);
31 }
32
33 public function broadcastRevive($id)
34 {
35 $beatmapset = Beatmapset::findOrFail($id);
36
37 (new UserBeatmapsetRevive($beatmapset))->dispatch();
38
39 if (request()->boolean('create_event')) {
40 Event::generate('beatmapsetRevive', ['beatmapset' => $beatmapset]);
41 }
42
43 return response(null, 204);
44 }
45
46 public function broadcastUpdate($id)
47 {
48 $beatmapset = Beatmapset::findOrFail($id);
49 $user = User::findOrFail(request()->integer('user_id'));
50
51 Event::generate('beatmapsetUpdate', ['beatmapset' => $beatmapset, 'user' => $user]);
52
53 return response(null, 204);
54 }
55
56 public function destroy($id)
57 {
58 $beatmapset = Beatmapset::findOrFail($id);
59 $user = User::findOrFail($GLOBALS['cfg']['osu']['legacy']['bancho_bot_user_id']);
60
61 (new BeatmapsetDelete($beatmapset, $user))->handle();
62
63 return response(null, 204);
64 }
65
66 public function disqualify($id)
67 {
68 $beatmapset = Beatmapset::findOrFail($id);
69 $user = User::findOrFail($GLOBALS['cfg']['osu']['legacy']['bancho_bot_user_id']);
70
71 $message = request('message') ?? null;
72
73 $discussion = new BeatmapDiscussion([
74 'beatmapset_id' => $beatmapset->getKey(),
75 'message_type' => 'problem',
76 'user_id' => $user->getKey(),
77 'resolved' => false,
78 ]);
79
80 $post = new BeatmapDiscussionPost([
81 'message' => $message,
82 'user_id' => $user->getKey(),
83 ]);
84
85 $discussion->getConnection()->transaction(function () use ($discussion, $post, $user) {
86 $discussion->saveOrExplode();
87 $post->beatmap_discussion_id = $discussion->getKey();
88 $post->saveOrExplode();
89
90 $discussion->beatmapset->disqualifyOrResetNominations($user, $discussion);
91 });
92
93 return ['beatmapset_discussion_id' => $discussion->getKey()];
94 }
95}