Torsummen als eigene Spalten, NULL heisst unbekannt (Datenbankversion 123)

Die STFV-Tabellensortierung braucht als letzte inhaltliche Stufe die Tore — und
die stehen bisher ausschliesslich im tinytext ergebnis_detailliert, wo kein SQL
sie lesen kann (#306-Konzept, Abschnitt 2). Also neue, durchweg NULL-bare
Spalten: teamspiel_heim_tore/gast_tore, begegnung.heim_tore/gast_tore und
team.tore_gewonnen/verloren/differenz/quotient (Typen nach punkte_*-Vorbild).

toreFuerSpiel() in tools.php ist die einzige Rechenstelle: bei punktetyp 0 sind
die Punkte die Tore; wo Satzergebnisse gefuehrt werden (satzergebnisse 1),
werden sie aus ergebnis_detailliert summiert (runden_detailliert_auswertung);
sonst NULL — unter "Mehrere" ohne Satzerfassung spiegelt das Detail nur den
Satzstand, eine Torzahl steht dort nicht und stand dort nie. Geschrieben wird
an denselben zwei Stellen wie die Spielpunkte (Spielbericht speichern und
begegnungenAktualisieren), immer paarweise gesetzt oder paarweise NULL; das
Loeschen des Spielberichts nullt die Begegnungssummen mit. team.tore_* rechnet
teamstatistikAktualisieren immer mit — als SUM ueber CASE je Begegnung, OHNE
COALESCE: eine Begegnung mit unbekannten Toren traegt nichts bei, unbekannt
wird niemals als 0:0 gewertet. Gemessen an Prueflige F: ein geleertes
ergebnis_detailliert macht Spiel, Begegnung und die Differenz beider Teams
NULL (135/147 -> 85/98), die Wiederherstellung stellt exakt den alten Stand her.

KEIN Backfill in der Migration: updateDatabase() ruft begegnungenAktualisieren()
nicht auf, und ein Update soll gespeicherte Werte nicht anfassen. Gemessen: nach
Einspielen und einem Seitenaufruf steht die Version auf 123, alle 455 + 116 + 32
Tore-Felder sind NULL. Befuellt wird beim naechsten Speichern eines Berichts
bzw. komplett beim Speichern des Modus — gemessen ueber alle acht Ligen:
Einer/Race tragen Tore = Punkte (Damenbundesliga 42:31 -> 42:31), Satzerfassung
summiert die Saetze ("5:3 4:4 2:6 6:1" -> 17:14, Begegnung 50:49), "Mehrere"
ohne Satzerfassung bleibt ehrlich NULL (PRUEF Liga A, 30 Spiele, 0 Tore-Werte).

Beide Pflegeorte: Migration <123 in database/update.php (getTableColumns-Guard
je Tabelle, Versionsschreiben am Ende) UND die CREATEs in script.php samt
datenbank_version 123. Gemessen per probe_-Tabellen aus den Neuinstallations-
CREATEs gegen die migrierten Tabellen (information_schema: Name, Position, Typ,
Nullable, Default): alle drei Tabellen spaltenidentisch.

Bestand unberuehrt, gemessen mit derselben Messlatte wie beim Refactoring:
alle zehn Modi und dieselben zehn Begegnungen unveraendert erneut gespeichert,
danach Datenbank-Dump der Bestandsspalten (756 Zeilen) und Frontend-Dump
(30995 Zeilen HTML) gegen den Lauf mit dem alten Code verglichen:
VOLLSTAENDIG identisch.
This commit is contained in:
svennickel
2026-09-09 18:56:02 +02:00
parent e1a0637795
commit 79f3abc01a
5 changed files with 122 additions and 10 deletions
@@ -11123,6 +11123,8 @@ function adminSaveBegegnungSpielplan(): void
$total_gast_punkte = 0; $total_gast_punkte = 0;
$total_heim_spielpunkte = 0; $total_heim_spielpunkte = 0;
$total_gast_spielpunkte = 0; $total_gast_spielpunkte = 0;
$total_heim_tore = 0;
$total_gast_tore = 0;
$spiel_nr = 1; $spiel_nr = 1;
do { do {
$spieltyp = $spieltypen[$spiel_nr - 1] ?? ''; $spieltyp = $spieltypen[$spiel_nr - 1] ?? '';
@@ -11269,10 +11271,24 @@ function adminSaveBegegnungSpielplan(): void
$total_heim_spielpunkte += $spiel_heim_spielpunkte; $total_heim_spielpunkte += $spiel_heim_spielpunkte;
$total_gast_spielpunkte += $spiel_gast_spielpunkte; $total_gast_spielpunkte += $spiel_gast_spielpunkte;
list($spiel_heim_tore, $spiel_gast_tore) = toreFuerSpiel(
$teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0,
$spiel_heim_punkte, $spiel_gast_punkte,
$skip_spiel
? (isset($spiele_nummern[$spiel_nr]) ? $spiele_nummern[$spiel_nr]->ergebnis_detailliert : null)
: $ergebnis_detailliert);
if ($spiel_heim_tore === null || $total_heim_tore === null) {
$total_heim_tore = null;
$total_gast_tore = null;
} else {
$total_heim_tore += $spiel_heim_tore;
$total_gast_tore += $spiel_gast_tore;
}
if (!$skip_spiel) { if (!$skip_spiel) {
if (!isset($spiele_nummern[$spiel_nr])) { if (!isset($spiele_nummern[$spiel_nr])) {
$query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert)" $query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert, teamspiel_heim_tore, teamspiel_gast_tore)"
. "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; . "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ");";
} else { } else {
$teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id; $teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id;
$query = "UPDATE #__sportsmanager_teamspiel" $query = "UPDATE #__sportsmanager_teamspiel"
@@ -11284,7 +11300,9 @@ function adminSaveBegegnungSpielplan(): void
. "\n teamspiel_gast_punkte = '$spiel_gast_punkte'," . "\n teamspiel_gast_punkte = '$spiel_gast_punkte',"
. "\n teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte'," . "\n teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte',"
. "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'," . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte',"
. "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ","
. "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . ","
. "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'")
. "\n WHERE teamspiel_id = $teamspiel_id"; . "\n WHERE teamspiel_id = $teamspiel_id";
} }
$db->setQuery($query); $db->setQuery($query);
@@ -11309,14 +11327,18 @@ function adminSaveBegegnungSpielplan(): void
. "\n SET heim_punkte = '$total_heim_punkte'," . "\n SET heim_punkte = '$total_heim_punkte',"
. "\n gast_punkte = '$total_gast_punkte'," . "\n gast_punkte = '$total_gast_punkte',"
. "\n heim_spielpunkte = '$total_heim_spielpunkte'," . "\n heim_spielpunkte = '$total_heim_spielpunkte',"
. "\n gast_spielpunkte = '$total_gast_spielpunkte'" . "\n gast_spielpunkte = '$total_gast_spielpunkte',"
. "\n heim_tore = " . ($total_heim_tore === null ? "NULL" : "'$total_heim_tore'") . ","
. "\n gast_tore = " . ($total_gast_tore === null ? "NULL" : "'$total_gast_tore'")
. "\n WHERE begegnung_id = $id"; . "\n WHERE begegnung_id = $id";
} else { } else {
$query = "UPDATE #__sportsmanager_begegnung" $query = "UPDATE #__sportsmanager_begegnung"
. "\n SET heim_punkte = NULL," . "\n SET heim_punkte = NULL,"
. "\n gast_punkte = NULL," . "\n gast_punkte = NULL,"
. "\n heim_spielpunkte = NULL," . "\n heim_spielpunkte = NULL,"
. "\n gast_spielpunkte = NULL" . "\n gast_spielpunkte = NULL,"
. "\n heim_tore = NULL,"
. "\n gast_tore = NULL"
. "\n WHERE begegnung_id = $id"; . "\n WHERE begegnung_id = $id";
} }
$db->setQuery($query); $db->setQuery($query);
@@ -11458,7 +11480,9 @@ function adminDeleteMatchReportBegegnung($id,$veranstaltungId): void
. "\n SET heim_punkte = NULL," . "\n SET heim_punkte = NULL,"
. "\n gast_punkte = NULL," . "\n gast_punkte = NULL,"
. "\n heim_spielpunkte = NULL," . "\n heim_spielpunkte = NULL,"
. "\n gast_spielpunkte = NULL" . "\n gast_spielpunkte = NULL,"
. "\n heim_tore = NULL,"
. "\n gast_tore = NULL"
. "\n WHERE begegnung_id = $id"; . "\n WHERE begegnung_id = $id";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -5850,6 +5850,52 @@ function updateDatabase(): void
} }
} }
if ($datenbank_version < 123) {
$columns = $db->getTableColumns('#__sportsmanager_teamspiel');
if (!array_key_exists('teamspiel_heim_tore', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_teamspiel`"
. "\n ADD `teamspiel_heim_tore` SMALLINT(6) NULL DEFAULT NULL AFTER `ergebnis_detailliert`,"
. "\n ADD `teamspiel_gast_tore` SMALLINT(6) NULL DEFAULT NULL AFTER `teamspiel_heim_tore`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$columns = $db->getTableColumns('#__sportsmanager_begegnung');
if (!array_key_exists('heim_tore', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_begegnung`"
. "\n ADD `heim_tore` SMALLINT(6) NULL DEFAULT NULL AFTER `gast_spielpunkte`,"
. "\n ADD `gast_tore` SMALLINT(6) NULL DEFAULT NULL AFTER `heim_tore`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$columns = $db->getTableColumns('#__sportsmanager_team');
if (!array_key_exists('tore_gewonnen', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_team`"
. "\n ADD `tore_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `punkte_quotient`,"
. "\n ADD `tore_verloren` SMALLINT(6) NULL DEFAULT NULL AFTER `tore_gewonnen`,"
. "\n ADD `tore_differenz` SMALLINT(6) NULL DEFAULT NULL AFTER `tore_verloren`,"
. "\n ADD `tore_quotient` FLOAT(8,2) NULL DEFAULT NULL AFTER `tore_differenz`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '123'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($termin_aktionen_email_setzen) { if ($termin_aktionen_email_setzen) {
$query = "SELECT aktion_user_id, termin_aktion_id" $query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion"; . "\n FROM #__sportsmanager_termin_aktion";
@@ -5598,7 +5598,9 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
. "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb4 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu4 ON ttb4.begegnung_id = ttu4.begegnung_id WHERE ISNULL(ttu4.unbestaetigtes_ergebnis_id) AND ttb4.heim_team_id = t1.team_id AND (ttb4.heim_punkte != 0 OR ttb4.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb5 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu5 ON ttb5.begegnung_id = ttu5.begegnung_id WHERE ISNULL(ttu5.unbestaetigtes_ergebnis_id) AND ttb5.gast_team_id = t1.team_id AND (ttb5.heim_punkte != 0 OR ttb5.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen," . "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb4 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu4 ON ttb4.begegnung_id = ttu4.begegnung_id WHERE ISNULL(ttu4.unbestaetigtes_ergebnis_id) AND ttb4.heim_team_id = t1.team_id AND (ttb4.heim_punkte != 0 OR ttb4.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb5 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu5 ON ttb5.begegnung_id = ttu5.begegnung_id WHERE ISNULL(ttu5.unbestaetigtes_ergebnis_id) AND ttb5.gast_team_id = t1.team_id AND (ttb5.heim_punkte != 0 OR ttb5.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb6 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu6 ON ttb6.begegnung_id = ttu6.begegnung_id WHERE ISNULL(ttu6.unbestaetigtes_ergebnis_id) AND ttb6.heim_team_id = t1.team_id AND (ttb6.heim_punkte != 0 OR ttb6.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb7 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu7 ON ttb7.begegnung_id = ttu7.begegnung_id WHERE ISNULL(ttu7.unbestaetigtes_ergebnis_id) AND ttb7.gast_team_id = t1.team_id AND (ttb7.heim_punkte != 0 OR ttb7.gast_punkte != 0)), 0)) AS spielpunkte_verloren," . "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb6 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu6 ON ttb6.begegnung_id = ttu6.begegnung_id WHERE ISNULL(ttu6.unbestaetigtes_ergebnis_id) AND ttb6.heim_team_id = t1.team_id AND (ttb6.heim_punkte != 0 OR ttb6.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb7 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu7 ON ttb7.begegnung_id = ttu7.begegnung_id WHERE ISNULL(ttu7.unbestaetigtes_ergebnis_id) AND ttb7.gast_team_id = t1.team_id AND (ttb7.heim_punkte != 0 OR ttb7.gast_punkte != 0)), 0)) AS spielpunkte_verloren,"
. "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb8 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu8 ON ttb8.begegnung_id = ttu8.begegnung_id WHERE ISNULL(ttu8.unbestaetigtes_ergebnis_id) AND ttb8.heim_team_id = t1.team_id AND (ttb8.heim_punkte != 0 OR ttb8.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb9 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu9 ON ttb9.begegnung_id = ttu9.begegnung_id WHERE ISNULL(ttu9.unbestaetigtes_ergebnis_id) AND ttb9.gast_team_id = t1.team_id AND (ttb9.heim_punkte != 0 OR ttb9.gast_punkte != 0)), 0)) AS punkte_gewonnen," . "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb8 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu8 ON ttb8.begegnung_id = ttu8.begegnung_id WHERE ISNULL(ttu8.unbestaetigtes_ergebnis_id) AND ttb8.heim_team_id = t1.team_id AND (ttb8.heim_punkte != 0 OR ttb8.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb9 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu9 ON ttb9.begegnung_id = ttu9.begegnung_id WHERE ISNULL(ttu9.unbestaetigtes_ergebnis_id) AND ttb9.gast_team_id = t1.team_id AND (ttb9.heim_punkte != 0 OR ttb9.gast_punkte != 0)), 0)) AS punkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb10 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu10 ON ttb10.begegnung_id = ttu10.begegnung_id WHERE ISNULL(ttu10.unbestaetigtes_ergebnis_id) AND ttb10.heim_team_id = t1.team_id AND (ttb10.heim_punkte != 0 OR ttb10.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb11 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu11 ON ttb11.begegnung_id = ttu11.begegnung_id WHERE ISNULL(ttu11.unbestaetigtes_ergebnis_id) AND ttb11.gast_team_id = t1.team_id AND (ttb11.heim_punkte != 0 OR ttb11.gast_punkte != 0)), 0)) AS punkte_verloren" . "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb10 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu10 ON ttb10.begegnung_id = ttu10.begegnung_id WHERE ISNULL(ttu10.unbestaetigtes_ergebnis_id) AND ttb10.heim_team_id = t1.team_id AND (ttb10.heim_punkte != 0 OR ttb10.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb11 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu11 ON ttb11.begegnung_id = ttu11.begegnung_id WHERE ISNULL(ttu11.unbestaetigtes_ergebnis_id) AND ttb11.gast_team_id = t1.team_id AND (ttb11.heim_punkte != 0 OR ttb11.gast_punkte != 0)), 0)) AS punkte_verloren,"
. "\n (SELECT SUM(CASE WHEN ttb12.heim_team_id = t1.team_id THEN ttb12.heim_tore ELSE ttb12.gast_tore END) FROM #__sportsmanager_begegnung AS ttb12 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu12 ON ttb12.begegnung_id = ttu12.begegnung_id WHERE ISNULL(ttu12.unbestaetigtes_ergebnis_id) AND (ttb12.heim_team_id = t1.team_id OR ttb12.gast_team_id = t1.team_id) AND (ttb12.heim_punkte != 0 OR ttb12.gast_punkte != 0)) AS tore_gewonnen,"
. "\n (SELECT SUM(CASE WHEN ttb13.heim_team_id = t1.team_id THEN ttb13.gast_tore ELSE ttb13.heim_tore END) FROM #__sportsmanager_begegnung AS ttb13 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu13 ON ttb13.begegnung_id = ttu13.begegnung_id WHERE ISNULL(ttu13.unbestaetigtes_ergebnis_id) AND (ttb13.heim_team_id = t1.team_id OR ttb13.gast_team_id = t1.team_id) AND (ttb13.heim_punkte != 0 OR ttb13.gast_punkte != 0)) AS tore_verloren"
. "\n FROM #__sportsmanager_team AS t1 WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)" . "\n FROM #__sportsmanager_team AS t1 WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)"
. "\n AS werte USING (team_id)" . "\n AS werte USING (team_id)"
. "\n SET #__sportsmanager_team.siege = werte.siege," . "\n SET #__sportsmanager_team.siege = werte.siege,"
@@ -5614,6 +5616,10 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
. "\n #__sportsmanager_team.spielpunkte_verloren = werte.spielpunkte_verloren," . "\n #__sportsmanager_team.spielpunkte_verloren = werte.spielpunkte_verloren,"
. "\n #__sportsmanager_team.spielpunkte_differenz = werte.spielpunkte_gewonnen - werte.spielpunkte_verloren," . "\n #__sportsmanager_team.spielpunkte_differenz = werte.spielpunkte_gewonnen - werte.spielpunkte_verloren,"
. "\n #__sportsmanager_team.spielpunkte_quotient = IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren)," . "\n #__sportsmanager_team.spielpunkte_quotient = IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren),"
. "\n #__sportsmanager_team.tore_gewonnen = werte.tore_gewonnen,"
. "\n #__sportsmanager_team.tore_verloren = werte.tore_verloren,"
. "\n #__sportsmanager_team.tore_differenz = werte.tore_gewonnen - werte.tore_verloren,"
. "\n #__sportsmanager_team.tore_quotient = IF(werte.tore_verloren = 0, -1, werte.tore_gewonnen / werte.tore_verloren),"
. "\n #__sportsmanager_team.buchholz1 = 0," . "\n #__sportsmanager_team.buchholz1 = 0,"
. "\n #__sportsmanager_team.buchholz2 = 0" . "\n #__sportsmanager_team.buchholz2 = 0"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id";
@@ -6164,6 +6170,8 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
$total_heim_spielpunkte = 0; $total_heim_spielpunkte = 0;
$total_gast_spielpunkte = 0; $total_gast_spielpunkte = 0;
$total_heim_tore = count($spiele) > 0 ? 0 : null;
$total_gast_tore = $total_heim_tore;
foreach ($spiele as $spiel) { foreach ($spiele as $spiel) {
$spiel_heim_punkte = $spiel->teamspiel_heim_punkte; $spiel_heim_punkte = $spiel->teamspiel_heim_punkte;
@@ -6177,9 +6185,22 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
$total_heim_spielpunkte += $spiel_heim_spielpunkte; $total_heim_spielpunkte += $spiel_heim_spielpunkte;
$total_gast_spielpunkte += $spiel_gast_spielpunkte; $total_gast_spielpunkte += $spiel_gast_spielpunkte;
list($spiel_heim_tore, $spiel_gast_tore) = toreFuerSpiel(
$teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0,
$spiel_heim_punkte, $spiel_gast_punkte, $spiel->ergebnis_detailliert);
if ($spiel_heim_tore === null || $total_heim_tore === null) {
$total_heim_tore = null;
$total_gast_tore = null;
} else {
$total_heim_tore += $spiel_heim_tore;
$total_gast_tore += $spiel_gast_tore;
}
$query = "UPDATE #__sportsmanager_teamspiel" $query = "UPDATE #__sportsmanager_teamspiel"
. "\n SET teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte'," . "\n SET teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte',"
. "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'" . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte',"
. "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . ","
. "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'")
. "\n WHERE teamspiel_id = $spiel->teamspiel_id"; . "\n WHERE teamspiel_id = $spiel->teamspiel_id";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -6189,7 +6210,9 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
$query = "UPDATE #__sportsmanager_begegnung" $query = "UPDATE #__sportsmanager_begegnung"
. "\n SET heim_spielpunkte = '$total_heim_spielpunkte'," . "\n SET heim_spielpunkte = '$total_heim_spielpunkte',"
. "\n gast_spielpunkte = '$total_gast_spielpunkte'" . "\n gast_spielpunkte = '$total_gast_spielpunkte',"
. "\n heim_tore = " . ($total_heim_tore === null ? "NULL" : "'$total_heim_tore'") . ","
. "\n gast_tore = " . ($total_gast_tore === null ? "NULL" : "'$total_gast_tore'")
. "\n WHERE begegnung_id = $begegnung->begegnung_id"; . "\n WHERE begegnung_id = $begegnung->begegnung_id";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -642,6 +642,17 @@ function spielpunkteFuerSpiel($wertung, $heim_punkte, $gast_punkte): array
return array(1, 1); return array(1, 1);
} }
function toreFuerSpiel($punktetyp, $satzergebnisse, $heim_punkte, $gast_punkte, $ergebnis_detailliert): array
{
if ($punktetyp == 0)
return array((int)$heim_punkte, (int)$gast_punkte);
if (!empty($satzergebnisse) && !empty($ergebnis_detailliert)) {
$auswertung = runden_detailliert_auswertung($ergebnis_detailliert);
return array($auswertung[4], $auswertung[5]);
}
return array(null, null);
}
// pass two file names // pass two file names
// returns TRUE if files are the same, FALSE otherwise // returns TRUE if files are the same, FALSE otherwise
function files_identical($fn1, $fn2): bool function files_identical($fn1, $fn2): bool
+9 -1
View File
@@ -149,6 +149,8 @@ return new class () implements InstallerScriptInterface
. "\n `gast_punkte` smallint(6) DEFAULT NULL," . "\n `gast_punkte` smallint(6) DEFAULT NULL,"
. "\n `heim_spielpunkte` smallint(6) DEFAULT NULL," . "\n `heim_spielpunkte` smallint(6) DEFAULT NULL,"
. "\n `gast_spielpunkte` smallint(6) DEFAULT NULL," . "\n `gast_spielpunkte` smallint(6) DEFAULT NULL,"
. "\n `heim_tore` smallint(6) DEFAULT NULL,"
. "\n `gast_tore` smallint(6) DEFAULT NULL,"
. "\n `nichtraucherschutz` tinyint(4) DEFAULT '0'," . "\n `nichtraucherschutz` tinyint(4) DEFAULT '0',"
. "\n PRIMARY KEY (`begegnung_id`)," . "\n PRIMARY KEY (`begegnung_id`),"
. "\n KEY `heim_team_id` (`heim_team_id`)," . "\n KEY `heim_team_id` (`heim_team_id`),"
@@ -719,6 +721,10 @@ return new class () implements InstallerScriptInterface
. "\n `punkte_verloren` smallint(6) DEFAULT NULL," . "\n `punkte_verloren` smallint(6) DEFAULT NULL,"
. "\n `punkte_differenz` smallint(6) DEFAULT NULL," . "\n `punkte_differenz` smallint(6) DEFAULT NULL,"
. "\n `punkte_quotient` float(8,2) DEFAULT NULL," . "\n `punkte_quotient` float(8,2) DEFAULT NULL,"
. "\n `tore_gewonnen` smallint(6) DEFAULT NULL,"
. "\n `tore_verloren` smallint(6) DEFAULT NULL,"
. "\n `tore_differenz` smallint(6) DEFAULT NULL,"
. "\n `tore_quotient` float(8,2) DEFAULT NULL,"
. "\n `buchholz1` smallint(6) DEFAULT NULL," . "\n `buchholz1` smallint(6) DEFAULT NULL,"
. "\n `buchholz2` smallint(6) DEFAULT NULL," . "\n `buchholz2` smallint(6) DEFAULT NULL,"
. "\n PRIMARY KEY (`team_id`)," . "\n PRIMARY KEY (`team_id`),"
@@ -776,6 +782,8 @@ return new class () implements InstallerScriptInterface
. "\n `teamspiel_heim_spielpunkte` smallint(6) DEFAULT NULL," . "\n `teamspiel_heim_spielpunkte` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_gast_spielpunkte` smallint(6) DEFAULT NULL," . "\n `teamspiel_gast_spielpunkte` smallint(6) DEFAULT NULL,"
. "\n `ergebnis_detailliert` tinytext DEFAULT NULL," . "\n `ergebnis_detailliert` tinytext DEFAULT NULL,"
. "\n `teamspiel_heim_tore` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_gast_tore` smallint(6) DEFAULT NULL,"
. "\n PRIMARY KEY (`teamspiel_id`)," . "\n PRIMARY KEY (`teamspiel_id`),"
. "\n KEY `begegnung_id` (`begegnung_id`)," . "\n KEY `begegnung_id` (`begegnung_id`),"
. "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`)," . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`),"
@@ -1307,7 +1315,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '122';"; $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '123';";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }