Möglichkeit Direkter Vergleich in Teamsport (issue #68)

This commit is contained in:
Jürgen Meyer
2025-07-23 09:40:05 +02:00
parent 77e2c6e910
commit 2b6563dae0
7 changed files with 302 additions and 46 deletions
@@ -7005,6 +7005,7 @@ function adminEditVeranstaltung(): void
$modus_id = $jInput->get('modus_id', 0, 'INT');
$verschieberegel_id = $jInput->get('verschieberegel_id', 0, 'INT');
$tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT');
$direktervergleich = $jInput->get('direktervergleich', 0, 'INT');
$unterteilung = $jInput->get('unterteilung', 0, 'INT');
$elo_wertung = $jInput->get('elo_wertung', 0, 'INT');
$logo_url = $db->escape(trim($jInput->get('logo_url', '', 'RAW')));
@@ -7024,8 +7025,8 @@ function adminEditVeranstaltung(): void
$elo_aktualisieren = false;
$spielerstatistik_aktualisieren = false;
if ($id == 0) {
$query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", modus_id, verschieberegel_id, tabellenwertung, unterteilung, elo_wertung, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES
('$veranstalterId', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$modus_id', '$verschieberegel_id', '$tabellenwertung', '$unterteilung', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');";
$query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", modus_id, verschieberegel_id, tabellenwertung, direktervergleich, unterteilung, elo_wertung, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES
('$veranstalterId', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$modus_id', '$verschieberegel_id', '$tabellenwertung', '$direktervergleich', '$unterteilung', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
@@ -7052,6 +7053,7 @@ function adminEditVeranstaltung(): void
. "\n modus_id = '$modus_id',"
. "\n verschieberegel_id = '$verschieberegel_id',"
. "\n tabellenwertung = '$tabellenwertung',"
. "\n direktervergleich = '$direktervergleich',"
. "\n unterteilung = '$unterteilung',"
. "\n elo_wertung = '$elo_wertung',"
. "\n logo_url = '$logo_url',"
@@ -5266,6 +5266,65 @@ 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 = $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 = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '104'"
. "\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";
@@ -1608,6 +1608,20 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$modus = $rows[0];
if ($veranstaltung->tabellenwertung > 0) {
// Alle Spieltage ermitteln
$query = "SELECT DISTINCT spieltag"
. "\n FROM #__sportsmanager_begegnung"
. "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"
. "\n ORDER BY spieltag";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_komplett = count($spieltage);
// Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde
$query = "SELECT DISTINCT spieltag"
. "\n FROM #__sportsmanager_begegnung"
@@ -1620,54 +1634,52 @@ 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)
$spieltag = $aktueller_spieltag;
if ($spieltag == $aktueller_spieltag) {
$query = "SELECT *"
. "\n FROM #__sportsmanager_team"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"
. "\n ORDER BY platz, teamname";
$teams = getTabelleAktuellerSpieltag($veranstaltung);
} else {
$query = "SELECT verein_id, teamname, zusatzpunkte,"
. "\n werte.*,"
. "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " + COALESCE(zusatzpunkte, 0) AS gesamtpunkte,"
. "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " AS begegnungspunkte,"
. "\n werte.punkte_gewonnen - werte.punkte_verloren AS punkte_differenz,"
. "\n IF(werte.punkte_verloren = 0, -1, werte.punkte_gewonnen / werte.punkte_verloren) AS punkte_quotient,"
. "\n werte.spielpunkte_gewonnen - werte.spielpunkte_verloren AS spielpunkte_differenz,"
. "\n IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren) AS spielpunkte_quotient"
. "\n FROM #__sportsmanager_team"
. "\n LEFT JOIN"
. "\n (SELECT t1.team_id,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte > tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte > tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS siege,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND (tt1.heim_team_id = t1.team_id OR tt1.gast_team_id = t1.team_id) AND tt1.heim_spielpunkte = tt1.gast_spielpunkte AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS unentschieden,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte < tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte < tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS niederlagen,"
. "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_verloren,"
. "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_verloren"
. "\n FROM #__sportsmanager_team AS t1 WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)"
. "\n AS werte USING (team_id)"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id";
if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7)
$query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8)
$query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
else if ($veranstaltung->tabellenwertung == 10)
$query .= "\n ORDER BY spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 11)
$query .= "\n ORDER BY spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
else
$query .= "\n ORDER BY gesamtpunkte DESC, teamname";
$teams = getTabelleSpieltag($veranstaltung,$spieltag);
}
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
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;
}
$teams = $db->loadObjectList();
else{
@$Punktgleiche_Mannschaften[$Platz] .= ",".$value->team_id;
@$Korrektur[$Platz] = $Punktgleiche_Mannschaften[$Platz];
}
}
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);
@@ -1693,6 +1705,86 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
return "";
}
function getTabelleAktuellerSpieltag($veranstaltung)
{
$db = getDatabase();
$query = "SELECT *,"
. "\n siege + unentschieden + niederlagen AS anzahl_spiele"
. "\n FROM #__sportsmanager_team"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"
. "\n ORDER BY platz, teamname";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$teams = $db->loadObjectList();
return $teams;
}
function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_platz = 0)
{
$db = getDatabase();
if ($mannschaften){
$filter_mannschaften_begegnung = "tt1.heim_team_id IN (" . $mannschaften . ") AND tt1.gast_team_id IN (" . $mannschaften . ") AND";
$filter_mannschaften_teams = "AND team_id IN (" . $mannschaften . ") ";
}
else{
$filter_mannschaften_begegnung = "";
$filter_mannschaften_teams = "";
}
$query = "SELECT verein_id, teamname, zusatzpunkte,"
. "\n werte.*,"
. "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " + COALESCE(zusatzpunkte, 0) AS gesamtpunkte,"
. "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " AS begegnungspunkte,"
. "\n werte.punkte_gewonnen - werte.punkte_verloren AS punkte_differenz,"
. "\n IF(werte.punkte_verloren = 0, -1, werte.punkte_gewonnen / werte.punkte_verloren) AS punkte_quotient,"
. "\n werte.spielpunkte_gewonnen - werte.spielpunkte_verloren AS spielpunkte_differenz,"
. "\n IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren) AS spielpunkte_quotient, "
. "\n werte.siege + werte.unentschieden + werte.niederlagen AS anzahl_spiele"
. "\n FROM #__sportsmanager_team"
. "\n LEFT JOIN"
. "\n (SELECT t1.team_id,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte > tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte > tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS siege,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND (tt1.heim_team_id = t1.team_id OR tt1.gast_team_id = t1.team_id) AND tt1.heim_spielpunkte = tt1.gast_spielpunkte AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS unentschieden,"
. "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte < tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte < tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS niederlagen,"
. "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + "
. "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + "
. "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_verloren,"
. "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + "
. "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen,"
. "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + "
. "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE " . $filter_mannschaften_begegnung . " ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_verloren"
. "\n FROM #__sportsmanager_team AS t1"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)"
. "\n AS werte USING (team_id)"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id " . $filter_mannschaften_teams;
if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7)
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8)
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
else if ($veranstaltung->tabellenwertung == 10)
$query .= "\n ORDER BY spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 11)
$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));
}
$teams = $db->loadObjectList();
$platz = $offset_platz;
foreach($teams AS $key => $value)
{
$value->platz = ++$platz;
}
return $teams;
}
#[NoReturn] function veranstaltungenTicker($aktuelle_saison_anzeigen = false): void
{
$db = getDatabase();
@@ -4841,12 +4933,12 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
}
}
$query = "SELECT * FROM #__sportsmanager_team"
$query = "SELECT *, siege + unentschieden + niederlagen AS anzahl_spiele FROM #__sportsmanager_team"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id";
if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7)
$query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8)
$query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
else if ($veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27)
$query .= "\n ORDER BY gesamtpunkte DESC, buchholz1 DESC, buchholz2 DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname";
else if ($veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28)
@@ -4858,13 +4950,75 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
else if ($veranstaltung->tabellenwertung == 23 || $veranstaltung->tabellenwertung == 26 || $veranstaltung->tabellenwertung == 29)
$query .= "\n ORDER BY gesamtpunkte DESC, buchholz1 DESC, buchholz2 DESC, teamname";
else // ($veranstaltung->tabellenwertung == 3, 6, 9)
$query .= "\n ORDER BY gesamtpunkte DESC, teamname";
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, teamname";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$teams = $db->loadObjectList();
// Alle Spieltage ermitteln
$query = "SELECT DISTINCT spieltag"
. "\n FROM #__sportsmanager_begegnung"
. "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"
. "\n ORDER BY spieltag";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_komplett = count($spieltage);
// Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde
$query = "SELECT DISTINCT spieltag"
. "\n FROM #__sportsmanager_begegnung"
. "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)"
. "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND (heim_spielpunkte != 0 OR gast_spielpunkte != 0) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id)"
. "\n ORDER BY spieltag DESC";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_gespielt = count($spieltage);
// 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];
}
}
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;
});
}
$platz = 1;
$tatsaechlicher_platz = 0;
$gesamtpunkte = 0;
@@ -7204,6 +7204,22 @@ class HTML_sportsmanager_admin
</select>
</td>
</tr>
<tr id="tr_hthr">
<td nowrap style="width: 20%; text-align: right">
<label for="direktervergleich"><?php echo Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="direktervergleich" id="dd_hthr" size="1">
<?php
$direktervergleich = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES'));
for ($i = 0; $i <= 1; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->direktervergleich == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($direktervergleich[$i]) . "</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
@@ -7378,6 +7394,26 @@ class HTML_sportsmanager_admin
<input type="hidden" name="task" value="admin_veranstaltung_save"/>
<input type="hidden" name="id" value="<?php echo($row != null ? $row->veranstaltung_id : "0"); ?>"/>
</form>
<script>
// Auswahlfeld Direkter Vergleich in Abhaengigkeit von Tabellenwertung anzeigen
const dropdown = document.getElementById("table_evaluation");
const zeile = document.getElementById("tr_hthr");
const unteroption = document.getElementById("dd_hthr");
function pruefeAnzeige() {
const wert = parseInt(dropdown.value);
if (wert >= 1 && wert <= 9) {
zeile.style.display = "";
} else {
zeile.style.display = "none";
unteroption.value = "0";
}
}
dropdown.addEventListener("change", pruefeAnzeige);
window.addEventListener("DOMContentLoaded", pruefeAnzeige);
</script>
<?php
}
@@ -536,6 +536,7 @@ COM_SPORTSMANAGER_FULL_RATING="Volle Wertung"
COM_SPORTSMANAGER_NO_RATING="Keine Wertung"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe"
COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..."
@@ -536,6 +536,7 @@ COM_SPORTSMANAGER_FULL_RATING="Full rating"
COM_SPORTSMANAGER_NO_RATING="No rating"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions"
COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..."
+3
View File
@@ -137,6 +137,7 @@ return new class () implements InstallerScriptInterface
. "\n `tisch` tinytext DEFAULT NULL,"
. "\n `zeitpunkt` datetime DEFAULT NULL,"
. "\n `spieltag` smallint(6) DEFAULT NULL,"
. "\n `spiel_nr` tinyint(4) DEFAULT NULL,"
. "\n `heim_punkte` smallint(6) DEFAULT NULL,"
. "\n `gast_punkte` smallint(6) DEFAULT NULL,"
. "\n `heim_spielpunkte` smallint(6) DEFAULT NULL,"
@@ -680,6 +681,7 @@ return new class () implements InstallerScriptInterface
. "\n `teamgruppe_id` int(11) DEFAULT NULL,"
. "\n `verein_id` int(11) DEFAULT NULL,"
. "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0',"
. "\n `setzliste_nr` tinyint(4) DEFAULT NULL,"
. "\n `teamname` varchar(50) NOT NULL,"
. "\n `tischtyp` varchar(200) DEFAULT NULL,"
. "\n `tischeigenschaften` varchar(200) DEFAULT NULL,"
@@ -1033,6 +1035,7 @@ return new class () implements InstallerScriptInterface
. "\n `modus_id` int(11) NOT NULL DEFAULT '0',"
. "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0',"
. "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `direktervergleich` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00',"
. "\n `letzter_tag` date DEFAULT NULL,"