diff --git a/app/Libraries/BBCodeForDB.php b/app/Libraries/BBCodeForDB.php index a20c675307f..8d3fb94e44d 100644 --- a/app/Libraries/BBCodeForDB.php +++ b/app/Libraries/BBCodeForDB.php @@ -375,7 +375,7 @@ function ($m) { public function parseYoutube($text) { return preg_replace_callback( - '#\[youtube\](.+?)\[/youtube\]#', + '#\[youtube\](?:https?://(?:youtu\.be/|(?:m\.|www\.|)youtube\.com/(?:embed/|shorts/|watch\?v=))|)(.+?)\[/youtube\]#', function ($m) { $videoId = preg_replace('/\?.*/', '', $this->extraEscapes($m[1])); diff --git a/app/Transformers/ScoreTransformer.php b/app/Transformers/ScoreTransformer.php index 13912ee752e..00603b106b5 100644 --- a/app/Transformers/ScoreTransformer.php +++ b/app/Transformers/ScoreTransformer.php @@ -79,21 +79,26 @@ public function transformSolo(ScoreModel|SoloScore $score) if ($best !== null) { $bestId = $best->getKey(); $pp = $best->pp; - $replay = $best->replay; + $hasReplay = $best->replay; } } elseif ($score instanceof SoloScore) { $pp = $score->pp; - $replay = $score->has_replay; + $hasReplay = $score->has_replay; } - return array_merge($score->data->jsonSerialize(), [ + $hasReplay ??= false; + + return [ + ...$score->data->jsonSerialize(), 'best_id' => $bestId ?? null, + 'has_replay' => $hasReplay, 'id' => $score->getKey(), 'legacy_perfect' => $legacyPerfect ?? null, 'pp' => $pp ?? null, - 'replay' => $replay ?? false, + // TODO: remove this redundant field sometime after 2024-02 + 'replay' => $hasReplay, 'type' => $score->getMorphClass(), - ]); + ]; } public function transformLegacy(LegacyMatch\Score|ScoreModel|SoloScore $score) diff --git a/resources/js/interfaces/solo-score-json.ts b/resources/js/interfaces/solo-score-json.ts index 7ac5ecb9b0c..d33708bdaa1 100644 --- a/resources/js/interfaces/solo-score-json.ts +++ b/resources/js/interfaces/solo-score-json.ts @@ -31,6 +31,7 @@ type SoloScoreJsonDefaultAttributes = { best_id: number | null; build_id: number | null; ended_at: string; + has_replay: boolean; id: number; legacy_score_id: number | null; legacy_total_score: number | null; @@ -39,7 +40,6 @@ type SoloScoreJsonDefaultAttributes = { passed: boolean; pp: number | null; rank: Rank; - replay: boolean | null; ruleset_id: number; started_at: string | null; statistics: Partial>; @@ -61,7 +61,7 @@ export default SoloScoreJson; export type SoloScoreJsonForBeatmap = SoloScoreJson & Required>; export type SoloScoreJsonForShow = SoloScoreJson -& Required> +& Required> & { beatmap: BeatmapExtendedJson & Required>; }; diff --git a/resources/js/utils/score-helper.ts b/resources/js/utils/score-helper.ts index 16a4d8bc51f..9320ff2bcfc 100644 --- a/resources/js/utils/score-helper.ts +++ b/resources/js/utils/score-helper.ts @@ -20,7 +20,7 @@ export function hasMenu(score: SoloScoreJson) { } export function hasReplay(score: SoloScoreJson) { - return score.replay != null && score.replay; + return score.has_replay; } export function hasShow(score: SoloScoreJson) { diff --git a/tests/Libraries/bbcode_examples/basic_youtube.base.txt b/tests/Libraries/bbcode_examples/basic_youtube.base.txt new file mode 100644 index 00000000000..0803895bc75 --- /dev/null +++ b/tests/Libraries/bbcode_examples/basic_youtube.base.txt @@ -0,0 +1,19 @@ +[youtube]https://youtube.com/shorts/mT5vq7egFqQ?si=ThgVtuwBmOJ3QFq9[/youtube] + +[youtube]https://m.youtube.com/shorts/mT5vq7egFqQ?si=ThgVtuwBmOJ3QFq9[/youtube] + +[youtube]https://www.youtube.com/shorts/mT5vq7egFqQ[/youtube] + +[youtube]https://www.youtube.com/embed/mT5vq7egFqQ?rel=0[/youtube] + +[youtube]mT5vq7egFqQ[/youtube] + +[youtube]https://youtu.be/YOeKD8ig3eM?si=DM3l66PIt6uXhv0K[/youtube] + +[youtube]https://m.youtube.com/watch?v=YOeKD8ig3eM[/youtube] + +[youtube]https://www.youtube.com/watch?v=YOeKD8ig3eM[/youtube] + +[youtube]https://www.youtube.com/embed/YOeKD8ig3eM?rel=0[/youtube] + +[youtube]YOeKD8ig3eM[/youtube] diff --git a/tests/Libraries/bbcode_examples/basic_youtube.db.txt b/tests/Libraries/bbcode_examples/basic_youtube.db.txt new file mode 100644 index 00000000000..c0b0b48eb1c --- /dev/null +++ b/tests/Libraries/bbcode_examples/basic_youtube.db.txt @@ -0,0 +1,19 @@ +[youtube:1]mT5vq7egFqQ[/youtube:1] + +[youtube:1]mT5vq7egFqQ[/youtube:1] + +[youtube:1]mT5vq7egFqQ[/youtube:1] + +[youtube:1]mT5vq7egFqQ[/youtube:1] + +[youtube:1]mT5vq7egFqQ[/youtube:1] + +[youtube:1]YOeKD8ig3eM[/youtube:1] + +[youtube:1]YOeKD8ig3eM[/youtube:1] + +[youtube:1]YOeKD8ig3eM[/youtube:1] + +[youtube:1]YOeKD8ig3eM[/youtube:1] + +[youtube:1]YOeKD8ig3eM[/youtube:1] diff --git a/tests/Libraries/bbcode_examples/basic_youtube.html b/tests/Libraries/bbcode_examples/basic_youtube.html new file mode 100644 index 00000000000..e65d4accbfb --- /dev/null +++ b/tests/Libraries/bbcode_examples/basic_youtube.html @@ -0,0 +1,39 @@ +
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +