private static function sanitizeSearchParams(array &$params = [])
{
// sort param
if (count($params['sort']) !== 2) {
$params['sort'] = ['ranked', 'desc'];
}
if (!in_array((int) $params['mode'], Beatmap::MODES, true)) {
$params['mode'] = null;
}
$valid_sort_fields = ['title', 'artist', 'creator', 'difficulty', 'ranked', 'rating', 'plays'];
$valid_sort_orders = ['asc', 'desc'];
if (!in_array($params['sort'][0], $valid_sort_fields, true) || !in_array($params['sort'][1], $valid_sort_orders, true)) {
$params['sort'] = ['ranked', 'desc'];
}
// remap sort field to their db/elastic-search equivalents
$params['sort'][0] = str_replace(['difficulty', 'ranked', 'plays'], ['difficultyrating', 'approved_date', 'playcount'], $params['sort'][0]);
list($params['sort_field'], $params['sort_order']) = $params['sort'];
unset($params['sort']);
$valid_ranks = ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH'];
foreach ($params['rank'] as $rank) {
if (!in_array($rank, $valid_ranks, true)) {
unset($params['rank'][$rank]);
}
}
if ($params['query'] !== null) {
$params['query'] = preg_replace('/\\s{2,}/', ' ', $params['query']);
$params['query'] = trim($params['query']);
$query_parts = explode(' ', $params['query']);
foreach ($query_parts as $key => $value) {
$query_parts[$key] = urlencode($value);
}
$params['query'] = implode(' AND ', $query_parts);
}
}