From 111fdeb3069a28eef5a02552da1d38e62fde5778 Mon Sep 17 00:00:00 2001 From: svennickel Date: Wed, 9 Sep 2026 19:23:31 +0200 Subject: [PATCH] Spielerstatistik im Je-Satz-Modus: jeder Satz zaehlt wie ein Spiel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der STFV will in der Spielerstatistik jeden Satz als Spiel gezaehlt sehen. spielerstatistikAktualisieren() holt dafuer im Veranstaltungs-Zweig zusaetzlich ergebnis_detailliert und die beiden Wertungs-Spalten (der Join auf teamspiel_modus existiert schon), bestimmt je Zeile Einzel oder Doppel wie begegnungenAktualisieren ueber ISNULL(spieler_2_id) und zaehlt bei Wertung 4 Siege/Unentschieden/Niederlagen und die Satz-Spalten je SATZ aus runden_detailliert_auswertung — die angezeigte Spielezahl ist s+u+n und wird damit von selbst zur Satzzahl. spg/spv bleiben die (im 4er-Modus bereits satzbasierten) Spielpunkte; pg/pv bleiben die Punktesummen, also Saetze — ihre Einheiten-Beschriftung haengt an punktetyp und bliebe bei einer Tore-Umwidmung falsch. Ohne gespeicherte Satzergebnisse (App-Meldung nur mit Satzstand) zaehlt das Spiel wie bisher als EIN Spiel aus dem Punktevergleich — deterministisch, keine erfundenen Saetze. Die S/U/N-Zaehlung und die Satz-Spalten laufen jetzt ueber dieselben drei Zaehler (heim/unentschieden/gast je Zeile): fuer jede Wertung ausser 4 tragen sie exakt die alten 1-aus-3-Werte, das Ergebnis ist wertgleich zum bisherigen if/else — bewiesen ueber die Messlatte, nicht nur hergeleitet: 11 Modi + 11 Begegnungen unveraendert gespeichert, voller Datenbank-Dump (784 Zeilen) und Frontend-Dump (26987 Zeilen) vor/nach dem Wechsel — die EINZIGEN Unterschiede sind die 7 bestenliste_punkte-Zeilen der Je-Satz-Prueflige G, und dort nur s/u/n und sg/su/sv; spg/spv und pg/pv jeder Zeile sind unveraendert. Alle sieben Bestands-Bestenlisten (einschliesslich der Liga 'Mehrere mit Ergebnis je Satz' bei Wertung Sieg 2/Remis 1, die weiter je SPIEL zaehlt) sind identisch. Handrechnung dokumentiert an Spieler 115 der Prueflige G: Einzel '6:4 4:4 2:6 6:3' (2/1/1), Doppel '4:4 4:4 6:2 2:6' (1/2/1), Doppel '6:4 6:4 0:6 4:6' als Gast (2/0/2), dazu die Fallback-Begegnung ohne Satzdetails als eine Niederlage (0/0/1): zusammen 5 Siege, 3 Unentschieden, 5 Niederlagen = 13 'Spiele' (Saetze), Spielpunkte 15:15, Punkte 6:6 — exakt die gespeicherte Zeile. --- .../com_sportsmanager/sportsmanager.php | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index ac2ac95..233b831 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -6298,7 +6298,8 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea foreach ($veranstaltungen as $veranstaltung) { $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, heim_team_id, gast_team_id," - . "\n teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte" + . "\n teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert," + . "\n spielpunkte_wertung_einzel, spielpunkte_wertung_doppel" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = #__sportsmanager_team.team_id" . "\n LEFT JOIN #__sportsmanager_teamspiel ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_teamspiel.begegnung_id" @@ -6349,9 +6350,18 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea $heim_team_id = $begegnung->heim_team_id; $gast_team_id = $begegnung->gast_team_id; $ergebnis = $heim_punkte > $gast_punkte ? 1 : ($heim_punkte < $gast_punkte ? 2 : 0); - $heim_saetze = $ergebnis == 1 ? 1 : 0; - $unentschieden_saetze = $ergebnis == 0 ? 1 : 0; - $gast_saetze = $ergebnis == 2 ? 1 : 0; + $wertung = $begegnung->heim_spieler_2_id === NULL && $begegnung->gast_spieler_2_id === NULL + ? $begegnung->spielpunkte_wertung_einzel : $begegnung->spielpunkte_wertung_doppel; + if ($wertung == 4 && !empty($begegnung->ergebnis_detailliert)) { + $auswertung = runden_detailliert_auswertung($begegnung->ergebnis_detailliert); + $heim_saetze = $auswertung[1]; + $unentschieden_saetze = $auswertung[2]; + $gast_saetze = $auswertung[3]; + } else { + $heim_saetze = $ergebnis == 1 ? 1 : 0; + $unentschieden_saetze = $ergebnis == 0 ? 1 : 0; + $gast_saetze = $ergebnis == 2 ? 1 : 0; + } foreach ($beteiligte as $beteiligter) { $spieler_id = $beteiligter[0]; @@ -6373,12 +6383,9 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea else $punkte[$spieler_id]["team_id"] = $gast_team_id; } - if (($ergebnis == 1 && $typ == "H") || ($ergebnis == 2 && $typ != "H")) - $punkte[$spieler_id]["s"] += 1; - else if ($ergebnis != 0) - $punkte[$spieler_id]["n"] += 1; - else - $punkte[$spieler_id]["u"] += 1; + $punkte[$spieler_id]["s"] += $typ == "H" ? $heim_saetze : $gast_saetze; + $punkte[$spieler_id]["u"] += $unentschieden_saetze; + $punkte[$spieler_id]["n"] += $typ != "H" ? $heim_saetze : $gast_saetze; $punkte[$spieler_id]["spg"] += $typ == "H" ? $heim_spielpunkte : $gast_spielpunkte; $punkte[$spieler_id]["spv"] += $typ != "H" ? $heim_spielpunkte : $gast_spielpunkte; $punkte[$spieler_id]["sg"] += $typ == "H" ? $heim_saetze : $gast_saetze;