summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2020-05-21 17:13:04 +0200
committeremkael <emkael@tlen.pl>2020-05-21 17:13:04 +0200
commit1ccc9946a5ed940d5a5c55e236d66eb6617b6fc9 (patch)
tree196cedabe53355c7944d7965e1e958915c0c1d95
parent97789b8e1df7d81e4f5c05fc4b228d68766d4f86 (diff)
On manual parameter usage, requiring only parameters which are actually required
-rw-r--r--API.md6
-rw-r--r--http/api-inc.php41
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)