From c8199abee157c55a32ce501ebe98ed0a32be7bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Sun, 21 Dec 2025 18:35:44 +0100 Subject: [PATCH 1/2] Bei Pokalauslosung werden jetzt die richtigen Sieger erkannt --- .../components/com_sportsmanager/admin.php | 80 ++++++++++++++----- .../com_sportsmanager/sportsmanager.php | 20 ++++- 2 files changed, 78 insertions(+), 22 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 1bd5953..3e599fa 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -9923,12 +9923,13 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $sperren = false; + $Fehlertext = ""; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); $rundenTitel = $jInput->get('rundentitel', 0, 'STRING'); $spielumplatz3 = $jInput->get('spielumplatz3', 0, 'INT'); - + $teams = []; if ($veranstaltungId == 0) die("Missing id!"); @@ -9964,18 +9965,30 @@ function adminBegegnungenPokalrundeAuslosenForm(): void else{ $anzahlmatches = pow(2, $anzahlrunden - $rundenNr); //Verlierer rausfiltern - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" - . "\n FROM #__sportsmanager_begegnung AS t1" - . "\n LEFT JOIN #__sportsmanager_team AS t2" - . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" - . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" - . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" - . "\n WHERE t4.veranstaltung_id = $veranstaltungId;"; + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2" + . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" + . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" + . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" + . "\n WHERE t4.veranstaltung_id = $veranstaltungId;"; $loosers = loadObjectList($db, $query); $Zeile = 0; foreach($loosers AS $looser) { + if ($looser->Verlierer == 0) + { + $Fehlertext = "Mindestens ein Sieger konnte nicht ermittelt werden!!!"; + $sperren = true; + } if ($Zeile > 0) $Verlierer .= ","; $Verlierer .= $looser->Verlierer; $Zeile++; @@ -10034,8 +10047,15 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if ($spielumplatz3) { - //Verlierer Halbfinale ermitteln - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" + //Verlierer Halbfinale ermitteln + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" @@ -10049,7 +10069,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $matches[2]['rundentitel'] = "Spiel um Platz 3"; } - $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; @@ -10082,12 +10101,11 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if (!$db->execute()) { die($db->stderr(true)); } - + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ - echo " - $Fehlertext\n"; + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, $Fehlertext); } } @@ -10103,6 +10121,7 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $matches = []; $sperren = false; + $Fehlertext = ""; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); @@ -10219,7 +10238,9 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if ($rundenNr >= 2){ $query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, t1.heim_team_id, t1.gast_team_id, - t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte + t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, + t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, + t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id @@ -10227,13 +10248,25 @@ function adminBegegnungenPokalrundeAuslosenForm(): void WHERE t4.veranstaltung_id = " . $veranstaltungId . " AND t1.spieltag = " . ($rundenNr - 1) . " ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr;"; $begegnungen = json_decode(json_encode(loadObjectList($db, $query)), true); + foreach($begegnungen AS $begegnung) { if ($begegnung['Heim_Satzpunkte'] > $begegnung['Gast_Satzpunkte']) $sieger = $begegnung['heim_team_id']; - else + if ($begegnung['Gast_Satzpunkte'] > $begegnung['Heim_Satzpunkte']) $sieger = $begegnung['gast_team_id']; - + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte']) + { + if ($begegnung['Heim_Tore'] > $begegnung['Gast_Tore']) + $sieger = $begegnung['heim_team_id']; + else if ($begegnung['Gast_Tore'] > $begegnung['Heim_Tore']) + $sieger = $begegnung['gast_team_id']; + else { + $sieger = 0; + $Fehlertext = "Mindestens ein Sieger konnte nicht ermittelt werden!!!"; + $sperren = true; + } + } if ($begegnung['Spiel_Nr'] % 2) $matches[round($begegnung['Spiel_Nr']/2)]['heim'] = $sieger; else @@ -10244,7 +10277,14 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if ($spielumplatz3) { //Verlierer Halbfinale ermitteln - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" @@ -10269,7 +10309,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void } } - $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; @@ -10305,8 +10344,7 @@ function adminBegegnungenPokalrundeAuslosenForm(): void redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ - echo " - $Fehlertext\n"; + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, $Fehlertext); } } diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index dd205c0..4ed5d18 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -2379,7 +2379,7 @@ function turnierbaumAnzeigen($veranstaltung): void else $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Heim']); } - } else + } else if ($begegnung['Heim_Satzpunkte'] < $begegnung['Gast_Satzpunkte']) { $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 2; if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ @@ -2388,6 +2388,24 @@ function turnierbaumAnzeigen($veranstaltung): void else $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Gast']); } + } else + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte'] && $begegnung['Heim_Tore'] > $begegnung['Gast_Tore']) { + $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 1; + if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ + if (round($begegnung['Spiel_Nr'] % 2)) + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Heim']); + else + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Heim']); + } + } else + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte'] && $begegnung['Heim_Tore'] < $begegnung['Gast_Tore']) { + $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 2; + if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ + if (round($begegnung['Spiel_Nr'] % 2)) + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Gast']); + else + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Gast']); + } } else { $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 0; } From de3705ca65f2eebbbfdff63d5db95d74d4a0c1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Mon, 22 Dec 2025 09:19:19 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=C3=84nderungen=20nach=20Kommentaren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/structure/components/com_sportsmanager/admin.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 3e599fa..8bf3e9b 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -10041,8 +10041,8 @@ function adminBegegnungenPokalrundeAuslosenForm(): void for ($matchNr = 0; $matchNr < $anzahlmatches; $matchNr++) { $team_heim = $matchNr * 2 ; $team_gast = $team_heim + 1; - $matches[$matchNr]['heim'] = $teams_auslosung[$team_heim]['team_id']; - $matches[$matchNr]['gast'] = $teams_auslosung[$team_gast]['team_id']; + $matches[$matchNr + 1]['heim'] = $teams_auslosung[$team_heim]['team_id']; + $matches[$matchNr + 1]['gast'] = $teams_auslosung[$team_gast]['team_id']; } if ($spielumplatz3) @@ -10071,10 +10071,10 @@ function adminBegegnungenPokalrundeAuslosenForm(): void foreach($matches AS $spiel_nr => $match) { - $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; + $matches[$spiel_nr]['rundentitel'] = $match['rundentitel'] ?? $rundenTitel; $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt; - $matches[$spiel_nr]['heimspielort_id'] = $teams[$teams_setzliste[$setzung[0]]]['heimspielort_id']; $team_heim = $match['heim']; + $matches[$spiel_nr]['heimspielort_id'] = $teams[$team_heim]['heimspielort_id']; if ($datum_kw != null && $teams[$team_heim]['heimspiel_wochentag'] !== 0) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $teams[$team_heim]['heimspiel_wochentag'] - 1)); $matches[$spiel_nr]['zeitpunkt'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], @@ -10117,7 +10117,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $teams = []; $setzliste = []; - $setzung = []; $matches = []; $sperren = false; @@ -10205,8 +10204,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $sperren = true; } - $matches = []; - if ($rundenNr == 1){ $setzliste = getSetzliste($anzahlrunden); $spiel_nr = 0;