From e1a0637795d2940b04f736050d68d2c198cb378c Mon Sep 17 00:00:00 2001 From: svennickel Date: Wed, 9 Sep 2026 18:45:44 +0200 Subject: [PATCH] Spielpunkte-Regel an eine Stelle: spielpunkteFuerSpiel() in tools.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorarbeit fuer die STFV-Satzwertung (#304/#306-Konzept, Abschnitt 6): die Spielpunkte-Kaskade stand woertlich doppelt im PHP — einmal beim Speichern des Spielberichts (admin.php, Rechenweg A), einmal in begegnungenAktualisieren() (sportsmanager.php, Rechenweg B). Der Remis-Vorfall (35384a5, 5d1df85) ist genau aus dieser Doppelung entstanden. Bevor eine vierte Wertung dazukommt, wird die Regel EINE Funktion: spielpunkteFuerSpiel(wertung, heim, gast) in tools.php, beide Wege rufen sie nur noch auf. Reine Umformung, keine Verhaltensaenderung; die dritte Rechenstelle (das erzeugte Formular-JavaScript) bleibt in diesem Schritt unangetastet. Gemessen, nicht nur begruendet — vorab wurden vier weitere Prueflige angelegt, damit ALLE Wertungen und Spielformen unter der Messlatte liegen (C = Sieg 3/ Remis 1, D = Sieg 1, E = Race mit 9:9-Abbruch, F = Mehrere mit Ergebnis je Satz samt Satz-Remis; dazu die bestehenden A = Gewinnsaetze, B = Einer sowie Damenbundesliga und Testliga). Ablauf identisch vor und nach der Umformung: alle zehn Modi unveraendert durchs Formular gespeichert (Rechenweg B ueber alle 116 Begegnungen), dazu zehn Begegnungen quer durch alle Ligen unveraendert durchs Spielbericht-Formular (Rechenweg A). Danach verglichen: - Datenbank-Dump (116 Begegnungen, 455 teamspiel-Zeilen, 32 Team-Zeilen, 138 bestenliste_punkte-Zeilen, 756 Zeilen gesamt): VOLLSTAENDIG identisch. - Frontend-Dump (8 Ligen je 3 Spieltagsansichten + 7 Spielerstatistiken, 30995 Zeilen HTML): VOLLSTAENDIG identisch. --- .../components/com_sportsmanager/admin.php | 48 ++---------------- .../com_sportsmanager/sportsmanager.php | 49 ++----------------- .../components/com_sportsmanager/tools.php | 14 ++++++ 3 files changed, 21 insertions(+), 90 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 34f794c..3acd25d 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -11262,51 +11262,9 @@ function adminSaveBegegnungSpielplan(): void $total_heim_punkte += $spiel_heim_punkte; $total_gast_punkte += $spiel_gast_punkte; - if ($spieltyp[0] != "D") { - if ($spielpunkte_wertung_einzel == 2) { - $spiel_heim_spielpunkte = $spiel_heim_punkte; - $spiel_gast_spielpunkte = $spiel_gast_punkte; - } else { - if ($spiel_heim_punkte > $spiel_gast_punkte) { - $spiel_heim_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); - $spiel_gast_spielpunkte = 0; - } else if ($spiel_heim_punkte < $spiel_gast_punkte) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); - } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } else if ($spielpunkte_wertung_einzel != 3) { - $spiel_heim_spielpunkte = 1; - $spiel_gast_spielpunkte = 1; - } else { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } - } - } else { - if ($spielpunkte_wertung_doppel == 2) { - $spiel_heim_spielpunkte = $spiel_heim_punkte; - $spiel_gast_spielpunkte = $spiel_gast_punkte; - } else { - if ($spiel_heim_punkte > $spiel_gast_punkte) { - $spiel_heim_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); - $spiel_gast_spielpunkte = 0; - } else if ($spiel_heim_punkte < $spiel_gast_punkte) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); - } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } else if ($spielpunkte_wertung_doppel != 3) { - $spiel_heim_spielpunkte = 1; - $spiel_gast_spielpunkte = 1; - } else { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } - } - } + list($spiel_heim_spielpunkte, $spiel_gast_spielpunkte) = spielpunkteFuerSpiel( + $spieltyp[0] != "D" ? $spielpunkte_wertung_einzel : $spielpunkte_wertung_doppel, + $spiel_heim_punkte, $spiel_gast_punkte); $total_heim_spielpunkte += $spiel_heim_spielpunkte; $total_gast_spielpunkte += $spiel_gast_spielpunkte; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index c0b2c24..92eb3de 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -6169,51 +6169,10 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo $spiel_heim_punkte = $spiel->teamspiel_heim_punkte; $spiel_gast_punkte = $spiel->teamspiel_gast_punkte; - if ($spiel->heim_spieler_2_id === NULL && $spiel->gast_spieler_2_id === NULL) { - if ($spielpunkte_wertung_einzel == 2) { - $spiel_heim_spielpunkte = $spiel_heim_punkte; - $spiel_gast_spielpunkte = $spiel_gast_punkte; - } else { - if ($spiel_heim_punkte > $spiel_gast_punkte) { - $spiel_heim_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); - $spiel_gast_spielpunkte = 0; - } else if ($spiel_heim_punkte < $spiel_gast_punkte) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); - } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } else if ($spielpunkte_wertung_einzel != 3) { - $spiel_heim_spielpunkte = 1; - $spiel_gast_spielpunkte = 1; - } else { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } - } - } else { - if ($spielpunkte_wertung_doppel == 2) { - $spiel_heim_spielpunkte = $spiel_heim_punkte; - $spiel_gast_spielpunkte = $spiel_gast_punkte; - } else { - if ($spiel_heim_punkte > $spiel_gast_punkte) { - $spiel_heim_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); - $spiel_gast_spielpunkte = 0; - } else if ($spiel_heim_punkte < $spiel_gast_punkte) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); - } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } else if ($spielpunkte_wertung_doppel != 3) { - $spiel_heim_spielpunkte = 1; - $spiel_gast_spielpunkte = 1; - } else { - $spiel_heim_spielpunkte = 0; - $spiel_gast_spielpunkte = 0; - } - } - } + list($spiel_heim_spielpunkte, $spiel_gast_spielpunkte) = spielpunkteFuerSpiel( + $spiel->heim_spieler_2_id === NULL && $spiel->gast_spieler_2_id === NULL + ? $spielpunkte_wertung_einzel : $spielpunkte_wertung_doppel, + $spiel_heim_punkte, $spiel_gast_punkte); $total_heim_spielpunkte += $spiel_heim_spielpunkte; $total_gast_spielpunkte += $spiel_gast_spielpunkte; diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php index 015fb66..6f78cb3 100644 --- a/src/structure/components/com_sportsmanager/tools.php +++ b/src/structure/components/com_sportsmanager/tools.php @@ -628,6 +628,20 @@ function runden_detailliert_auswertung($runden): array return array($ergebnis, $heim_saetze, $unentschieden_saetze, $gast_saetze, $heim_punkte, $gast_punkte); } +function spielpunkteFuerSpiel($wertung, $heim_punkte, $gast_punkte): array +{ + if ($wertung == 2) + return array($heim_punkte, $gast_punkte); + $sieg = $wertung == 0 ? 2 : ($wertung == 1 ? 3 : 1); + if ($heim_punkte > $gast_punkte) + return array($sieg, 0); + if ($heim_punkte < $gast_punkte) + return array(0, $sieg); + if (($heim_punkte == 0 && $gast_punkte == 0) || $wertung == 3) + return array(0, 0); + return array(1, 1); +} + // pass two file names // returns TRUE if files are the same, FALSE otherwise function files_identical($fn1, $fn2): bool