Spielpunkte-Regel an eine Stelle: spielpunkteFuerSpiel() in tools.php

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.
This commit is contained in:
svennickel
2026-09-09 18:46:01 +02:00
parent 5d1df8579d
commit e1a0637795
3 changed files with 21 additions and 90 deletions
@@ -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;
@@ -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;
@@ -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