From 1ccc9946a5ed940d5a5c55e236d66eb6617b6fc9 Mon Sep 17 00:00:00 2001 From: emkael Date: Thu, 21 May 2020 17:13:04 +0200 Subject: On manual parameter usage, requiring only parameters which are actually required --- API.md | 6 ++++-- http/api-inc.php | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/API.md b/API.md index cee96bb..9be9ad8 100644 --- a/API.md +++ b/API.md @@ -45,9 +45,11 @@ Wszystkie zaawansowane paramtery przekazywane są w zminnej HTTP `manual`. W parametrze `manual[points_cutoffs]` poprzedniki każdej pary (odsetek najwyższych miejsc) tworzą ciąg rosnący, następniki (odsetek maksymalnej liczby PKL) tworzą ciąg nierosnący. -W przypadku podania zarówno parametru `manual[min_points]`, jak i `manual[tournament_weight]`, parametry `tournament_rank` i `over39_boards` przestają być wymagane. +W przypadku podania parametru `manual[min_points]`, parametry `title_sum`, `tournament_rank` i `over39_boards` przestają być wymagane. -Dla turniejów o randze KMP powyższe parametry, jak i parametr liczby rozdań, są ignorowane (ale API wciąż wymaga podania parametrów `over39_boards`). +W przypadku podania parametru `manual[tournament_weight]`, parametry `tournament_rank` i `over39_boards` przestają być wymagane. + +Dla turniejów o randze KMP wszystkie parametry `manual` i parametr `over39_boards` są ignorowane (ale API wciąż wymaga podania parametru `over39_boards`). Przykładowe zapytania do API ---------------------------- diff --git a/http/api-inc.php b/http/api-inc.php index c75ed2e..e70957e 100644 --- a/http/api-inc.php +++ b/http/api-inc.php @@ -85,27 +85,35 @@ class ApiPkl { } function check_parameters() { - $this->ensure_parameters(array('type', 'contestants', 'title_sum')); + $this->ensure_parameters(array('type', 'contestants')); $this->check_values($this->parameters, array( - 'type' => function($r) { return ctype_digit($r) && intval($r) > 0; }, - 'contestants' => function($r) { return ctype_digit($r) && intval($r) > 0; }, - 'title_sum' => function($r) { return floatval($r) >= 0; } + 'type' => function($r) { return $this->is_integer($r) && intval($r) > 0; }, + 'contestants' => function($r) { return $this->is_integer($r) && intval($r) > 0; } )); if (isset($this->parameters['players'])) { $this->check_values($this->parameters, array( - 'players' => function($r) { return ctype_digit($r) && intval($r) > 0; } + 'players' => function($r) { return $this->is_integer($r) && intval($r) > 0; } )); } - if (!isset($this->parameters['manual']) || !isset($this->parameters['manual']['min_points']) || !isset($this->parameters['manual']['tournament_weight'])) { - $this->ensure_parameters(array('tournament_rank', 'over39_boards')); + if (!isset($this->parameters['manual']) || !isset($this->parameters['manual']['min_points'])) { + $this->ensure_parameters(array('title_sum')); $this->check_values($this->parameters, array( - 'tournament_rank' => function($r) { return ctype_digit($r) && ((intval($r) >= 0 && intval($r) <= 7) || in_array(intval($r), array(ApiPkl::RANK_KMP, ApiPkl::RANK_BNET))); }, - 'over39_boards' => function($r) { return ctype_digit($r) && intval($r) >= 0 && intval($r) <= 1; } + 'title_sum' => function($r) { return floatval($r) >= 0; } )); + if (!isset($this->parameters['manual']) || !isset($this->parameters['manual']['tournament_weight'])) { + $this->ensure_parameters(array('tournament_rank', 'over39_boards')); + $this->check_values($this->parameters, array( + 'tournament_rank' => function($r) { return $this->is_integer($r) && ((intval($r) >= 0 && intval($r) <= 7) || in_array(intval($r), array(ApiPkl::RANK_KMP, ApiPkl::RANK_BNET))); }, + 'over39_boards' => function($r) { return $this->is_integer($r) && intval($r) >= 0 && intval($r) <= 1; } + )); + } else { + $this->check_values($this->parameters['manual'], array( + 'tournament_weight' => function($r) { return $this->is_integer($r) && intval($r) > 0; } + )); + } } else { $this->check_values($this->parameters['manual'], array( - 'min_points' => function($r) { return ctype_digit($r) && intval($r) >= 0; }, - 'tournament_weight' => function($r) { return ctype_digit($r) && intval($r) > 0; } + 'min_points' => function($r) { return $this->is_integer($r) && intval($r) >= 0; } )); } if (isset($this->parameters['manual']) && isset($this->parameters['manual']['players_coefficient'])) { @@ -129,12 +137,19 @@ class ApiPkl { } $return['contestants'] = intval($this->parameters['contestants']); $return['players'] = isset($this->parameters['players']) ? intval($this->parameters['players']) : intval($this->parameters['contestants']) * $return['type']; - $return['title_sum'] = floatval($this->parameters['title_sum']); + $return['title_sum'] = isset($this->parameters['title_sum']) ? floatval($this->parameters['title_sum']) : 0.0; $weights = array( array(1, 2, 4, 5, 7, 10, 15, 25, ApiPkl::RANK_KMP => 0, ApiPkl::RANK_BNET => 1), array(2, 3, 5, 7, 10, 15, 25, 40, ApiPkl::RANK_KMP => 0, ApiPkl::RANK_BNET => 1) // not 2, according to MarcinW ); - $return['tournament_weight'] = (isset($this->parameters['manual']) && isset($this->parameters['manual']['tournament_weight'])) ? intval($this->parameters['manual']['tournament_weight']) : $weights[intval($this->parameters['over39_boards'])][intval($this->parameters['tournament_rank'])]; + $return['tournament_weight'] = 0; + if (isset($this->parameters['manual']) && isset($this->parameters['manual']['tournament_weight'])) { + $return['tournament_weight'] = intval($this->parameters['manual']['tournament_weight']); + } else { + if (isset($this->parameters['over39_boards']) && isset($this->parameters['tournament_rank'])) { + $return['tournament_weight'] = $weights[intval($this->parameters['over39_boards'])][intval($this->parameters['tournament_rank'])]; + } + } $min_points = array( array(0, 0, 0, 0, 50, 75, 150, 200, ApiPkl::RANK_KMP => 0, ApiPkl::RANK_BNET => 0), array(0, 0, 0, 0, 70, 100, 200, 300, ApiPkl::RANK_KMP => 0, ApiPkl::RANK_BNET => 0) -- cgit v1.2.3