diff --git a/app/Http/Controllers/BeatmapsController.php b/app/Http/Controllers/BeatmapsController.php index be0feca32b1..70f43e4140b 100644 --- a/app/Http/Controllers/BeatmapsController.php +++ b/app/Http/Controllers/BeatmapsController.php @@ -23,7 +23,7 @@ */ class BeatmapsController extends Controller { - const DEFAULT_API_INCLUDES = ['beatmapset.ratings', 'failtimes', 'max_combo']; + const DEFAULT_API_INCLUDES = ['beatmapset.ratings', 'failtimes', 'max_combo', 'owners']; const DEFAULT_SCORE_INCLUDES = ['user', 'user.country', 'user.cover', 'user.team']; public function __construct() @@ -194,7 +194,7 @@ public function attributes($id) * * Field | Type | Description * -------- | ------------------------------------- | ----------- - * beatmaps | [BeatmapExtended](#beatmapextended)[] | Includes `beatmapset` (with `ratings`), `failtimes`, and `max_combo`. + * beatmaps | [BeatmapExtended](#beatmapextended)[] | Includes `beatmapset` (with `ratings`), `failtimes`, `max_combo`, and `owners`. * * @queryParam ids[] integer Beatmap IDs to be returned. Specify once for each beatmap ID requested. Up to 50 beatmaps can be requested at once. Example: 1 * @@ -216,6 +216,7 @@ public function index() ::whereIn('beatmap_id', $ids) ->whereHas('beatmapset') ->with([ + 'beatmapOwners.user', 'beatmapset', 'beatmapset.userRatings' => fn ($q) => $q->select('beatmapset_id', 'rating'), 'failtimes', diff --git a/app/Libraries/Search/BeatmapsetQueryParser.php b/app/Libraries/Search/BeatmapsetQueryParser.php index faa4f51b8cd..24d3e16b040 100644 --- a/app/Libraries/Search/BeatmapsetQueryParser.php +++ b/app/Libraries/Search/BeatmapsetQueryParser.php @@ -41,6 +41,12 @@ public static function parse(?string $query): array case 'bpm': $option = static::makeFloatRangeOption($op, $m['value'], 0.01 / 2); break; + case 'circles': + $option = static::makeIntRangeOption($op, $m['value']); + break; + case 'sliders': + $option = static::makeIntRangeOption($op, $m['value']); + break; case 'length': $parsed = get_length_seconds($m['value']); if ($parsed !== null) { diff --git a/app/Libraries/Search/BeatmapsetSearch.php b/app/Libraries/Search/BeatmapsetSearch.php index f88edc7f930..96857e5777f 100644 --- a/app/Libraries/Search/BeatmapsetSearch.php +++ b/app/Libraries/Search/BeatmapsetSearch.php @@ -307,6 +307,8 @@ private function addSimpleFilters(BoolQuery $query, BoolQuery $nested): void 'accuracy' => ['field' => 'beatmaps.diff_overall', 'type' => 'range'], 'ar' => ['field' => 'beatmaps.diff_approach', 'type' => 'range'], 'bpm' => ['field' => 'bpm', 'type' => 'range'], + 'countNormal' => ['field' => 'beatmaps.countNormal', 'type' => 'range'], + 'countSlider' => ['field' => 'beatmaps.countSlider', 'type' => 'range'], 'created' => ['field' => 'submit_date', 'type' => 'range'], 'cs' => ['field' => 'beatmaps.diff_size', 'type' => 'range'], 'difficultyRating' => ['field' => 'beatmaps.difficultyrating', 'type' => 'range'], diff --git a/app/Libraries/Search/BeatmapsetSearchParams.php b/app/Libraries/Search/BeatmapsetSearchParams.php index 9cbd9b9e0d9..03cce272fbd 100644 --- a/app/Libraries/Search/BeatmapsetSearchParams.php +++ b/app/Libraries/Search/BeatmapsetSearchParams.php @@ -19,6 +19,8 @@ class BeatmapsetSearchParams extends SearchParams public ?array $ar = null; public ?string $artist = null; public ?array $bpm = null; + public ?array $countNormal = null; + public ?array $countSlider = null; public ?array $created = null; public ?string $creator = null; public ?array $cs = null; diff --git a/app/Libraries/Search/BeatmapsetSearchRequestParams.php b/app/Libraries/Search/BeatmapsetSearchRequestParams.php index c070c61139e..935295c2f0b 100644 --- a/app/Libraries/Search/BeatmapsetSearchRequestParams.php +++ b/app/Libraries/Search/BeatmapsetSearchRequestParams.php @@ -210,6 +210,7 @@ private function parseQuery(): void 'ar' => 'ar', 'artist' => 'artist', 'bpm' => 'bpm', + 'circles' => 'countNormal', 'created' => 'created', 'creator' => 'creator', 'cs' => 'cs', @@ -221,6 +222,7 @@ private function parseQuery(): void 'length' => 'totalLength', 'od' => 'accuracy', 'ranked' => 'ranked', + 'sliders' => 'countSlider', 'source' => 'source', 'stars' => 'difficultyRating', 'status' => 'statusRange', diff --git a/database/migrations/2015_01_01_133337_base_tables.php b/database/migrations/2015_01_01_133337_base_tables.php index 6769a697b86..a19516f4168 100644 --- a/database/migrations/2015_01_01_133337_base_tables.php +++ b/database/migrations/2015_01_01_133337_base_tables.php @@ -1135,7 +1135,7 @@ public function up() }); Schema::create('phpbb_users', function (Blueprint $table) { - $table->mediumIncrements('user_id'); + $table->mediumIncrements('user_id')->from(2); $table->tinyInteger('user_type')->default(0); $table->mediumInteger('group_id')->unsigned()->default(2); $table->mediumText('user_permissions'); diff --git a/resources/js/docs/sidebar-toggle.ts b/resources/js/docs/sidebar-toggle.ts index 335f758d8f6..c5642d58546 100644 --- a/resources/js/docs/sidebar-toggle.ts +++ b/resources/js/docs/sidebar-toggle.ts @@ -19,7 +19,8 @@ export default class SidebarToggle { this.navButton.addEventListener('click', this.onClickNavButton); } - private readonly onClickNavButton = () => { + private readonly onClickNavButton = (e: MouseEvent) => { + e.preventDefault(); this.menuWrapper.classList.toggle('open'); this.navButton.classList.toggle('open'); }; diff --git a/resources/views/docs/_structures/beatmap.md b/resources/views/docs/_structures/beatmap.md index c3e6ac46a1f..dc8894a82b2 100644 --- a/resources/views/docs/_structures/beatmap.md +++ b/resources/views/docs/_structures/beatmap.md @@ -21,6 +21,7 @@ beatmapset | [Beatmapset](#beatmapset)\|[BeatmapsetExtended](#beatmapsetextende checksum | string? | | failtimes | [Failtimes](#beatmap-failtimes) | | max_combo | integer | | +owners | [BeatmapOwner](#beatmapowner)[] | List of owners (mappers) for the Beatmap.
diff --git a/resources/views/docs/_structures/beatmap_owner.md b/resources/views/docs/_structures/beatmap_owner.md new file mode 100644 index 00000000000..8c0654dd3e7 --- /dev/null +++ b/resources/views/docs/_structures/beatmap_owner.md @@ -0,0 +1,8 @@ +## BeatmapOwner + +Field | Type | Description +-------- | ------- | ------------ +id | integer | [User](#user) id of the Beatmap owner. +username | string | Username of the Beatmap owner. + +Users that are no longer visible will still appear as a `BeatmapOwner` but have the `username` set to `[deleted user]`.