diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 7637a7d..af4d123 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5267,54 +5267,24 @@ function updateDatabase(): void } if ($datenbank_version < 104) { - $query = $db->getQuery(true) - ->select('COUNT(*)') - ->from('INFORMATION_SCHEMA.COLUMNS') - ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_veranstaltung'))) - ->where('COLUMN_NAME = ' . $db->quote('direktervergleich')); - $db->setQuery($query); - $exists = (bool)$db->loadResult(); - - if (!$exists) { - $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); } - $query = $db->getQuery(true) - ->select('COUNT(*)') - ->from('INFORMATION_SCHEMA.COLUMNS') - ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_team'))) - ->where('COLUMN_NAME = ' . $db->quote('setzliste_nr')); - $db->setQuery($query); - $exists = (bool)$db->loadResult(); - - if (!$exists) { - $query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - - $query = $db->getQuery(true) - ->select('COUNT(*)') - ->from('INFORMATION_SCHEMA.COLUMNS') - ->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_begegnung'))) - ->where('COLUMN_NAME = ' . $db->quote('spiel_nr')); - $db->setQuery($query); - $exists = (bool)$db->loadResult(); - - if (!$exists) { - $query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } + $query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '104'" diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index ccb3c1f..b2dbff8 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -1620,7 +1620,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = die($db->stderr(true)); } $spieltage = $db->loadObjectList(); - $anzahl_spieltage_komplett = count($spieltage); + $anzahl_spieltage_komplett = $db->loadResult(); // Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde $query = "SELECT DISTINCT spieltag" @@ -1634,7 +1634,6 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = die($db->stderr(true)); } $spieltage = $db->loadObjectList(); - $anzahl_spieltage_gespielt = count($spieltage); $aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0; if ($spieltag == 0 || $veranstaltung->tabellenwertung >= 21) @@ -1644,45 +1643,11 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = $teams = getTabelleAktuellerSpieltag($veranstaltung); } else { $teams = getTabelleSpieltag($veranstaltung,$spieltag); + if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){ + $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag); + } } - - if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){ - $Gesamtpunkte = 1000; - $Anzahl_Spiele = 1000; - $Platz = 0; - foreach($teams AS $key => $value){ - if (($Gesamtpunkte != $value->gesamtpunkte) OR ($Anzahl_Spiele != $value->anzahl_spiele)){ - $Gesamtpunkte = $value->gesamtpunkte; - $Anzahl_Spiele = $value->anzahl_spiele; - $Platz = $value->platz; - @$Punktgleiche_Mannschaften[$Platz] = $value->team_id; - } - else{ - @$Punktgleiche_Mannschaften[$Platz] .= ",".$value->team_id; - @$Korrektur[$Platz] = $Punktgleiche_Mannschaften[$Platz]; - } - } - if (isset($Korrektur)){ - foreach($Korrektur AS $key => $value){ - $teams_korrektur = getTabelleSpieltag($veranstaltung,$spieltag,$value,$key-1); - foreach($teams_korrektur AS $key1 => $value1){ - foreach($teams AS $key2 => $value2){ - if ($value2->team_id == $value1->team_id){ - $value2->platz = $value1->platz; - } - } - } - } - } - - //Tabelle neu sortieren - usort($teams, function($a, $b) { - return $a->platz <=> $b->platz; - }); - } - - if (isJson()) { return JSON_sportsmanager::tabelleAnzeigen($modus, $teams); } else { @@ -1707,6 +1672,49 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = return ""; } +function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag) +{ + + $gesamtpunkte = 1000; + $anzahlSpiele = 1000; + $platz = 0; + $punktgleicheMannschaften = []; + $korrekturen = []; + + foreach($teams AS $team){ + if (($gesamtpunkte != $team->gesamtpunkte) OR ($anzahlSpiele != $team->anzahl_spiele)){ + $gesamtpunkte = $team->gesamtpunkte; + $anzahlSpiele = $team->anzahl_spiele; + $platz = $team->platz; + $punktgleicheMannschaften[$platz] = $team->team_id; + } + else{ + $punktgleicheMannschaften[$platz] .= ",".$team->team_id; + $korrekturen[$platz] = $punktgleicheMannschaften[$platz]; + } + } + + if (!empty($korrekturen)){ + foreach($korrekturen AS $key => $korrektur){ + $teamsKorrektur = getTabelleSpieltag($veranstaltung,$spieltag,$korrektur,$key-1); + foreach($teamsKorrektur AS $teamKorrektur){ + foreach($teams AS $team){ + if ($team->team_id == $teamKorrektur->team_id){ + $team->platz = $teamKorrektur->platz; + } + } + } + } + } + + //Tabelle neu sortieren + usort($teams, function($a, $b) { + return $a->platz <=> $b->platz; + }); + + return $teams; +} + function getTabelleAktuellerSpieltag($veranstaltung) { $db = getDatabase(); @@ -1721,8 +1729,7 @@ function getTabelleAktuellerSpieltag($veranstaltung) if (!$db->execute()) { die($db->stderr(true)); } - $teams = $db->loadObjectList(); - return $teams; + return $db->loadObjectList(); } function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_platz = 0) @@ -1773,7 +1780,7 @@ function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_ $query .= "\n ORDER BY spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; else $query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, teamname"; - //echo $query; + $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -4970,7 +4977,7 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert die($db->stderr(true)); } $spieltage = $db->loadObjectList(); - $anzahl_spieltage_komplett = count($spieltage); + $anzahl_spieltage_komplett = $db->loadResult(); // Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde $query = "SELECT DISTINCT spieltag" @@ -4984,43 +4991,12 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert die($db->stderr(true)); } $spieltage = $db->loadObjectList(); - $anzahl_spieltage_gespielt = count($spieltage); - + $anzahl_spieltage_gespielt = $db->loadResult(); + $aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0; + // Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind. if ($veranstaltung->direktervergleich AND $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2){ - $Gesamtpunkte = 1000; - $Anzahl_Spiele = 1000; - $Platz = 0; - foreach($teams AS $key => $value){ - if (($Gesamtpunkte != $value->gesamtpunkte) OR ($Anzahl_Spiele != $value->anzahl_spiele)){ - $Gesamtpunkte = $value->gesamtpunkte; - $Anzahl_Spiele = $value->anzahl_spiele; - $Platz = $value->platz; - @$Punktgleiche_Mannschaften[$Platz] = $value->team_id; - } - else{ - @$Punktgleiche_Mannschaften[$Platz] .= ",".$value->team_id; - @$Korrektur[$Platz] = $Punktgleiche_Mannschaften[$Platz]; - } - } - - if (isset($Korrektur)){ - foreach($Korrektur AS $key => $value){ - $teams_korrektur = getTabelleSpieltag($veranstaltung,999,$value,$key-1); - foreach($teams_korrektur AS $key1 => $value1){ - foreach($teams AS $key2 => $value2){ - if ($value2->team_id == $value1->team_id){ - $value2->platz = $value1->platz; - } - } - } - } - } - - //Tabelle neu sortieren - usort($teams, function($a, $b) { - return $a->platz <=> $b->platz; - }); + $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag); } $platz = 1; diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 273e631..3ef39ac 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -7206,7 +7206,7 @@ class HTML_sportsmanager_admin