From 3ea12b0377210c17188597a83897c01d76770d07 Mon Sep 17 00:00:00 2001 From: Jeroen De Meerleer Date: Wed, 25 Sep 2019 19:35:19 +0200 Subject: [PATCH 1/2] Implemented tiebreaks --- src/Enums/Tiebreak.php | 2 ++ src/Readers/Swar4.php | 56 +++++++++++++++++++++++++++++++++++++++++- src/Tournament.php | 6 +++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/Enums/Tiebreak.php b/src/Enums/Tiebreak.php index 82fab3e..7f44284 100644 --- a/src/Enums/Tiebreak.php +++ b/src/Enums/Tiebreak.php @@ -33,6 +33,8 @@ class Tiebreak extends Enum const Buchholz = "Buchholz"; const BuchholzMed = "Buchholz Median"; const BuchholzCut = "Buchholz Cut"; + const BuchholzMed2 = "Buchholz Median 2"; + const BuchholzCut2 = "Buchholz Cut 2"; const Sonneborn = "Sonneborn-Berger"; const Kashdan = "Kashdan"; const SoccerKashdan = "Soccer Kashdan"; diff --git a/src/Readers/Swar4.php b/src/Readers/Swar4.php index eac6a49..93414b9 100644 --- a/src/Readers/Swar4.php +++ b/src/Readers/Swar4.php @@ -15,6 +15,7 @@ namespace JeroenED\Libpairtwo\Readers; use DateTime; use JeroenED\Libpairtwo\Enums\Color; +use JeroenED\Libpairtwo\Enums\Tiebreak; use JeroenED\Libpairtwo\Enums\TournamentSystem; use JeroenED\Libpairtwo\Exceptions\IncompatibleReaderException; use JeroenED\Libpairtwo\Interfaces\ReaderInterface; @@ -234,9 +235,62 @@ class Swar4 implements ReaderInterface $this->getTournament()->setBinaryData('[TIE_BREAK]', $this->readData('String', $swshandle)); + $tiebreaks = []; for ($i = 0; $i < 5; $i++) { - $this->getTournament()->setBinaryData('Tiebreak_' . $i, $this->readData('Int', $swshandle)); + switch($this->readData('Int', $swshandle)) { + case 0: + default: + $tiebreak = Tiebreak::None; + break; + case 1: + $tiebreak = Tiebreak::Buchholz; + break; + case 2: + $tiebreak = Tiebreak::BuchholzMed; + break; + case 3: + $tiebreak = Tiebreak::BuchholzMed2; + break; + case 4: + $tiebreak = Tiebreak::BuchholzCut; + break; + case 5: + $tiebreak = Tiebreak::BuchholzCut2; + break; + case 6: + $tiebreak = Tiebreak::Sonneborn; + break; + case 7: + $tiebreak = Tiebreak::Cumulative; + break; + case 8: + $tiebreak = Tiebreak::Between; + break; + case 9: + $tiebreak = Tiebreak::Koya; + break; + case 10: + $tiebreak = Tiebreak::Baumbach; + break; + case 11: + $tiebreak = Tiebreak::AveragePerformance; + break; + case 12: + $tiebreak = Tiebreak::Aro; + break; + case 13: + $tiebreak = Tiebreak::AroCut; + break; + case 14: + $tiebreak = Tiebreak::BlackPlayed; + break; + case 15: + $tiebreak = Tiebreak::BlackWin; + break; + } + $tiebreaks[] = new Tiebreak($tiebreak); } + $this->getTournament()->setTiebreaks($tiebreaks); $this->getTournament()->setBinaryData('[EXCLUSION]', $this->readData('String', $swshandle)); $this->getTournament()->setBinaryData('ExclusionType', $this->readData('Int', $swshandle)); diff --git a/src/Tournament.php b/src/Tournament.php index 3e24b02..5dc9165 100644 --- a/src/Tournament.php +++ b/src/Tournament.php @@ -421,6 +421,12 @@ class Tournament case Tiebreak::BuchholzMed: return $this->calculateBuchholz($player, 1, 1); break; + case Tiebreak::BuchholzCut2: + return $this->calculateBuchholz($player, 2); + break; + case Tiebreak::BuchholzMed2: + return $this->calculateBuchholz($player, 2, 2); + break; case Tiebreak::Sonneborn: return $this->calculateSonneborn($player); break; From 627e9a4263cb8f2bc51c2888665da299d5520e6a Mon Sep 17 00:00:00 2001 From: Jeroen De Meerleer Date: Wed, 25 Sep 2019 19:47:28 +0200 Subject: [PATCH 2/2] Add points as very first tiebreak --- src/Readers/Swar4.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/Readers/Swar4.php b/src/Readers/Swar4.php index 93414b9..2ce9315 100644 --- a/src/Readers/Swar4.php +++ b/src/Readers/Swar4.php @@ -477,6 +477,7 @@ class Swar4 implements ReaderInterface } fclose($swshandle); $this->getTournament()->pairingsToRounds(); + $this->addTiebreaks(); return $this; } @@ -619,4 +620,24 @@ class Swar4 implements ReaderInterface return DateTime::createFromFormat('Ymd', $string); } } + + /** + * @return $this + */ + private function addTiebreaks(): Swar4 + { + switch ($this->getTournament()->getSystem()) { + case TournamentSystem::American: + $firstElement = new Tiebreak(Tiebreak::American); + break; + case TournamentSystem::Closed: + case TournamentSystem::Swiss: + default: + $firstElement = new Tiebreak(Tiebreak::Points); + } + $tiebreaks = $this->getTournament()->getTiebreaks(); + array_unshift($tiebreaks, $firstElement); + $this->getTournament()->setTiebreaks($tiebreaks); + return $this; + } }