diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 3acd25d..bbfa1e3 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -11123,6 +11123,8 @@ function adminSaveBegegnungSpielplan(): void $total_gast_punkte = 0; $total_heim_spielpunkte = 0; $total_gast_spielpunkte = 0; + $total_heim_tore = 0; + $total_gast_tore = 0; $spiel_nr = 1; do { $spieltyp = $spieltypen[$spiel_nr - 1] ?? ''; @@ -11269,10 +11271,24 @@ function adminSaveBegegnungSpielplan(): void $total_heim_spielpunkte += $spiel_heim_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 (!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)" - . "\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'") . ");"; + $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'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ");"; } else { $teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id; $query = "UPDATE #__sportsmanager_teamspiel" @@ -11284,7 +11300,9 @@ function adminSaveBegegnungSpielplan(): void . "\n teamspiel_gast_punkte = '$spiel_gast_punkte'," . "\n teamspiel_heim_spielpunkte = '$spiel_heim_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"; } $db->setQuery($query); @@ -11309,14 +11327,18 @@ function adminSaveBegegnungSpielplan(): void . "\n SET heim_punkte = '$total_heim_punkte'," . "\n gast_punkte = '$total_gast_punkte'," . "\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"; } else { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET heim_punkte = NULL," . "\n gast_punkte = 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"; } $db->setQuery($query); @@ -11458,7 +11480,9 @@ function adminDeleteMatchReportBegegnung($id,$veranstaltungId): void . "\n SET heim_punkte = NULL," . "\n gast_punkte = 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"; $db->setQuery($query); if (!$db->execute()) { diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 34cbd75..0df172f 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -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) { $query = "SELECT aktion_user_id, termin_aktion_id" . "\n FROM #__sportsmanager_termin_aktion"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 92eb3de..a787d92 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -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(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(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 AS werte USING (team_id)" . "\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_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.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.buchholz2 = 0" . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; @@ -6164,6 +6170,8 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo $total_heim_spielpunkte = 0; $total_gast_spielpunkte = 0; + $total_heim_tore = count($spiele) > 0 ? 0 : null; + $total_gast_tore = $total_heim_tore; foreach ($spiele as $spiel) { $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_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" . "\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"; $db->setQuery($query); if (!$db->execute()) { @@ -6189,7 +6210,9 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo $query = "UPDATE #__sportsmanager_begegnung" . "\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"; $db->setQuery($query); if (!$db->execute()) { diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php index 6f78cb3..3d689b2 100644 --- a/src/structure/components/com_sportsmanager/tools.php +++ b/src/structure/components/com_sportsmanager/tools.php @@ -642,6 +642,17 @@ function spielpunkteFuerSpiel($wertung, $heim_punkte, $gast_punkte): array 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 // returns TRUE if files are the same, FALSE otherwise function files_identical($fn1, $fn2): bool diff --git a/src/structure/script.php b/src/structure/script.php index 089a1b6..ffc1ba2 100644 --- a/src/structure/script.php +++ b/src/structure/script.php @@ -149,6 +149,8 @@ return new class () implements InstallerScriptInterface . "\n `gast_punkte` smallint(6) DEFAULT NULL," . "\n `heim_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 PRIMARY KEY (`begegnung_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_differenz` smallint(6) 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 `buchholz2` smallint(6) DEFAULT NULL," . "\n PRIMARY KEY (`team_id`)," @@ -776,6 +782,8 @@ return new class () implements InstallerScriptInterface . "\n `teamspiel_heim_spielpunkte` smallint(6) DEFAULT NULL," . "\n `teamspiel_gast_spielpunkte` smallint(6) 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 KEY `begegnung_id` (`begegnung_id`)," . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`)," @@ -1307,7 +1315,7 @@ return new class () implements InstallerScriptInterface $db->setQuery( $query ); 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 ); if (!$db->execute()) { die($db->stderr(true)); }