public function scores($id) { $beatmap = Beatmap::findOrFail($id); $mode = Request::input('mode', Beatmap::modeStr($beatmap->playmode)); $mods = Request::input('enabledMods'); $type = Request::input('type', 'global'); $user = Auth::user(); if (!is_array($mods)) { $mods = []; } if ($type !== 'global' || !empty($mods)) { if ($user === null || !$user->isSupporter()) { return error_popup(trans('errors.supporter_only')); } } try { $query = $beatmap->scoresBest($mode)->defaultListing()->with('user'); } catch (\InvalidArgumentException $ex) { return error_popup($ex->getMessage()); } $query->withMods($mods); switch ($type) { case 'country': $query->fromCountry($user->country_acronym); break; case 'friend': $query->friendsOf($user); break; } $scoresList = json_collection($query->get(), new ScoreTransformer(), 'user'); if ($user !== null) { $score = (clone $query)->where('user_id', $user->user_id)->first(); if ($score !== null) { $userScore = json_item($score, new ScoreTransformer(), 'user'); $userScorePosition = 1 + (clone $query)->limit(null)->where('score', '>', $score->score)->count(); } } return ['scoresList' => $scoresList, 'userScore' => $userScore ?? null, 'userScorePosition' => $userScorePosition ?? null]; }