diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php
index c5ff367..a31841f 100644
--- a/src/structure/components/com_sportsmanager/admin.php
+++ b/src/structure/components/com_sportsmanager/admin.php
@@ -658,6 +658,7 @@ function adminEinstellungen(): void
$lizenz_anzeigen = $jInput->get('lizenz_anzeigen', 0, 'INT');
$anzahl_mitglieder_zeigen = $jInput->get('anzahl_mitglieder_zeigen', 0, 'INT');
$verband_anzeigen = $jInput->get('verband_anzeigen', 0, 'INT');
+ $turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT');
$termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT');
$spielerimport_persoenliche_daten_vorauswahl = $jInput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT');
@@ -707,7 +708,7 @@ function adminEinstellungen(): void
if (!$db->execute()) {
die($db->stderr(true));
}
-
+
$query = "REPLACE #__sportsmanager_einstellungen"
. "\n SET name = 'verband_anzeigen'"
. ", wert = '$verband_anzeigen'";
@@ -716,6 +717,14 @@ function adminEinstellungen(): void
die($db->stderr(true));
}
+ $query = "REPLACE #__sportsmanager_einstellungen"
+ . "\n SET name = 'turnierbaum_zeigen'"
+ . ", wert = '$turnierbaum_zeigen'";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
$query = "REPLACE #__sportsmanager_einstellungen"
. "\n SET name = 'ansprechpartner_ausblenden'"
. ", wert = '$ansprechpartner_ausblenden'";
@@ -6095,6 +6104,7 @@ function adminEditVeranstaltung(): void
$tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT');
$direktervergleich = $jInput->get('direktervergleich', 0, 'INT');
$unterteilung = $jInput->get('unterteilung', 0, 'INT');
+ $spieltag_titel_zeigen = $jInput->get('spieltag_titel_zeigen', 0, 'INT');
$elo_wertung = $jInput->get('elo_wertung', 0, 'INT');
$logo_url = $db->escape(trim($jInput->get('logo_url', '', 'RAW')));
$ticker_logo_url = $db->escape(trim($jInput->get('ticker_logo_url', '', 'RAW')));
@@ -6113,8 +6123,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, 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');";
+ $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", modus_id, verschieberegel_id, tabellenwertung, direktervergleich, unterteilung, spieltag_titel_zeigen, 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', '$spieltag_titel_zeigen', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
@@ -6139,6 +6149,7 @@ function adminEditVeranstaltung(): void
. "\n tabellenwertung = '$tabellenwertung',"
. "\n direktervergleich = '$direktervergleich',"
. "\n unterteilung = '$unterteilung',"
+ . "\n spieltag_titel_zeigen = '$spieltag_titel_zeigen',"
. "\n elo_wertung = '$elo_wertung',"
. "\n logo_url = '$logo_url',"
. "\n ticker_logo_url = '$ticker_logo_url',"
@@ -6401,6 +6412,7 @@ function adminEditMannschaft(): void
$beschraenkter_zugriff_veranstaltungen_ids = $beschraenkter_zugriff_veranstaltungen ? benutzerVeranstaltungIdsModerator() : null;
$teamname = $db->escape(trim($jInput->get('teamname', '', 'RAW')));
+ $teamname_kurz = $db->escape(trim($jInput->get('teamname_kurz', '', 'RAW')));
$platz = $jInput->get('platz', 0, 'INT');
$verein_id = $jInput->get('verein_id', 0, 'INT');
$tischtyp = $db->escape(trim($jInput->get('tischtyp', '', 'RAW')));
@@ -6434,9 +6446,10 @@ function adminEditMannschaft(): void
$veranstaltung = $rows[0];
if ($id == 0) {
- $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, zusatzpunkte" . ($veranstaltung->tabellenwertung == -2 ? ", platz" : "") . ", pin)"
- . "\n VALUES (" . ($verein_id != 0 ? "'$verein_id'" : "NULL") . ", '$veranstaltungId', '$teamname', '$tischtyp', '$tischeigenschaften', '$heimspiel_wochentag', '$heimspiel_uhrzeit', " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . ", '$nichtraucherschutz', '$zusatzpunkte'" . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? ", '$platz'" : ", NULL") : "") . ", '$pin');";
- $db->setQuery($query);
+ $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, teamname_kurz, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, zusatzpunkte" . ($veranstaltung->tabellenwertung == -2 ? ", platz" : "") . ", pin)"
+ . "\n VALUES (" . ($verein_id != 0 ? "'$verein_id'" : "NULL") . ", '$veranstaltungId', '$teamname', '$teamname_kurz', '$tischtyp', '$tischeigenschaften', '$heimspiel_wochentag', '$heimspiel_uhrzeit', " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . ", '$nichtraucherschutz', '$zusatzpunkte'" . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? ", '$platz'" : ", NULL") : "") . ", '$pin');";
+ echo $query;
+ $db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
@@ -6457,6 +6470,7 @@ function adminEditMannschaft(): void
$query = "UPDATE #__sportsmanager_team"
. "\n SET verein_id = " . ($verein_id != 0 ? "'$verein_id'" : "NULL") . ","
. "\n teamname = '$teamname',"
+ . "\n teamname_kurz = '$teamname_kurz',"
. "\n tischtyp = '$tischtyp',"
. "\n tischeigenschaften = '$tischeigenschaften',"
. "\n heimspiel_wochentag = '$heimspiel_wochentag',"
@@ -6682,6 +6696,7 @@ function mannschaftsgruppe_verknuepfen($quelle_team_id, $ziel_team_id, $mannscha
. "\n SET teamgruppe_id = '$teamgruppe_id',"
. "\n verein_id = " . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . ","
. "\n teamname = '" . $db->escape($team->teamname) . "',"
+ . "\n teamname_kurz = '" . $db->escape($team->teamname_kurz) . "',"
. "\n tischtyp = '" . $db->escape($team->tischtyp) . "',"
. "\n tischeigenschaften = '" . $db->escape($team->tischeigenschaften) . "',"
. "\n heimspiel_wochentag = '" . $db->escape($team->heimspiel_wochentag) . "',"
@@ -7701,7 +7716,7 @@ function adminBegegnungen(): void
. "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id"
. "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id"
. "\n WHERE t2.veranstaltung_id = $veranstaltungId"
- . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "t1.spieltag, " : "") . "t1.zeitpunkt, heim_name";
+ . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "t1.spieltag, t1.spiel_nr, " : "") . "t1.zeitpunkt, heim_name";
$rows = loadObjectList($db, $query);
HTML_sportsmanager_admin::adminBegegnungen($veranstaltung, $modus, $rows);
}
@@ -9281,8 +9296,8 @@ function adminBegegnungenGenerierenForm(): void
if ($spiele[$spieltag][$spielnr][0] > $anzahlteams || $spiele[$spieltag][$spielnr][1] > $anzahlteams)
continue;
- $heim_team_id = $teamIds[$spiele[$spieltag][$spielnr][0]];
- $gast_team_id = $teamIds[$spiele[$spieltag][$spielnr][1]];
+ $heim_team_id = $teamIds[trim($spiele[$spieltag][$spielnr][0])];
+ $gast_team_id = $teamIds[trim($spiele[$spieltag][$spielnr][1])];
$heim_team = null;
foreach ($teams as $t) {
@@ -9323,6 +9338,7 @@ function adminBegegnungenGenerierenForm(): void
$Begegnung[$Zeile]['zeitpunkt'] = $zeitpunkt;
$Begegnung[$Zeile]['heim_team_id'] = $heim_team_id;
$Begegnung[$Zeile]['gast_team_id'] = $gast_team_id;
+ $Begegnung[$Zeile]['spiel_nr'] = $spielnr;
$Zeile++;
@@ -9348,8 +9364,9 @@ function adminBegegnungenGenerierenForm(): void
$Begegnung[$Zeile]['spieltag'] = $spieltag_nr;
$Begegnung[$Zeile]['zeitpunkt'] = $zeitpunkt;
- $Begegnung[$Zeile]['heim_team_id'] = $heim_team_id;
- $Begegnung[$Zeile]['gast_team_id'] = $gast_team_id;
+ $Begegnung[$Zeile]['heim_team_id'] = $gast_team_id;
+ $Begegnung[$Zeile]['gast_team_id'] = $heim_team_id;
+ $Begegnung[$Zeile]['spiel_nr'] = $spielnr;
$Zeile++;
}
@@ -9358,12 +9375,12 @@ function adminBegegnungenGenerierenForm(): void
if ($datumsangaben and $teams_ok and $spieltage_ok) {
$Zeile = 1;
- $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, zeitpunkt, heim_team_id, gast_team_id) VALUES ";
+ $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, spiel_nr, zeitpunkt, heim_team_id, gast_team_id) VALUES ";
foreach ($Begegnung as $value) {
if ($Zeile > 1) {
$query .= ", ";
}
- $query .= "(" . $value['spieltag'] . "," . ($value['zeitpunkt'] != NULL ? "'" . $value['zeitpunkt'] . "'" : "NULL") . "," . $value['heim_team_id'] . "," . $value['gast_team_id'] . ") ";
+ $query .= "(" . $value['spieltag'] . "," . $value['spiel_nr'] . "," . ($value['zeitpunkt'] != NULL ? "'" . $value['zeitpunkt'] . "'" : "NULL") . "," . $value['heim_team_id'] . "," . $value['gast_team_id'] . ") ";
$Zeile++;
}
$query .= ";";
@@ -9411,9 +9428,34 @@ function adminBegegnungenImportierenForm(): void
HTML_sportsmanager_admin::adminBegegnungenImportieren($veranstaltung);
}
+function vergleich($text1, $text2): bool
+{
+ $suchen = ["_","-"," "];
+ $ersetzen = ["","",""];
+ $begriffe = explode(",", $text2);
+ foreach($begriffe as $begriff)
+ {
+ $text1 = strtolower(str_replace($suchen,$ersetzen,$text1));
+ $begriff = strtolower(str_replace($suchen,$ersetzen,$begriff));
+ if ($text1 == $begriff) return true;
+ }
+ return false;
+}
+
+function erstelleZeitpunkt($datum_jahr, $datum_kw, $heimspiel_wochentag, $heimspiel_uhrzeit): bool|string
+{
+ if (!empty($datum_jahr) && !empty($datum_kw) && !empty($heimspiel_wochentag) && !empty($heimspiel_uhrzeit))
+ {
+ $ts = getdate(mondaykw($datum_kw, $datum_jahr, $heimspiel_wochentag - 1));
+ return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"],
+ floor($heimspiel_uhrzeit / 100), $heimspiel_uhrzeit % 100, 0);
+ }
+ else
+ return false;
+}
+
function adminBegegnungenImportieren(): void
{
- //Jürgen Meyer 07.03.2025
$db = getDatabase();
global $_FILES;
$jInput = Factory::getContainer()->get(SiteApplication::class)->input;
@@ -9431,13 +9473,18 @@ function adminBegegnungenImportieren(): void
echo Text::_('COM_SPORTSMANAGER_IMPORT_GROUP_GAME2') . "
";
- $query = "SELECT team_id, teamname FROM #__sportsmanager_team WHERE veranstaltung_id = " . $veranstaltungId . ";";
+ $query = "SELECT team_id, teamname, heimspiel_wochentag, heimspiel_uhrzeit"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = " . $veranstaltungId . ";";
+
$rows = loadObjectList($db, $query);
if (count($rows) < 1) die("Wrong id!");
$Mannschaften = null;
foreach ($rows as $value) {
- $Mannschaften[$value->teamname] = $value->team_id;
+ $Mannschaften[$value->teamname]['team_id'] = $value->team_id;
+ $Mannschaften[$value->teamname]['heimspiel_wochentag'] = $value->heimspiel_wochentag;
+ $Mannschaften[$value->teamname]['heimspiel_uhrzeit'] = $value->heimspiel_uhrzeit;
}
if (empty($_FILES["daten"]["tmp_name"]) || !is_uploaded_file($_FILES["daten"]["tmp_name"])) {
@@ -9466,26 +9513,53 @@ function adminBegegnungenImportieren(): void
$import_zeile = false;
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
if ($Zeile == 1) {
- $Titelzeile = array_flip($data);
+ foreach($data as $spalte_nr => $spalte)
+ {
+ if (vergleich($spalte,"spieltagnr,spieltagnummer")) $Titelzeile['Spieltag_Nr'] = $spalte_nr;
+ if (vergleich($spalte,"spielstart,zeitpunkt")) $Titelzeile['Spielstart'] = $spalte_nr;
+ if (vergleich($spalte,"heim,heimteam,heimmannschaft")) $Titelzeile['Heim'] = $spalte_nr;
+ if (vergleich($spalte,"gast,gastteam,gastmannschaft")) $Titelzeile['Gast'] = $spalte_nr;
+ if (vergleich($spalte,"spielnr,spielnummer")) $Titelzeile['Spiel_Nr'] = $spalte_nr;
+ if (vergleich($spalte,"spieltagtitel")) $Titelzeile['Spieltag_Titel'] = $spalte_nr;
+ if (vergleich($spalte,"jahr,spieljahr")) $Titelzeile['Spieljahr'] = $spalte_nr;
+ if (vergleich($spalte,"kalenderwoche,woche,kw")) $Titelzeile['Kalenderwoche'] = $spalte_nr;
+ }
} else {
$import_zeile = true;
$bgcolor = "green";
$Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']];
$Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]);
- $Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Heim']])];
- $Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Gast']])];
+ $Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id'];
+ $Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id'];
+ if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']];
+ if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']];
echo "
";
if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) {
$bgcolor = "red";
$import = false;
}
echo "| " . $data[$Titelzeile['Spieltag_Nr']] . " | ";
+
+ if (empty($data[$Titelzeile['Spielstart']])
+ AND !empty($data[$Titelzeile['Spieljahr']])
+ AND !empty($data[$Titelzeile['Kalenderwoche']])
+ AND !empty($Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_wochentag'])
+ AND !empty($Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']))
+ {
+ $data[$Titelzeile['Spielstart']] =
+ erstelleZeitpunkt($data[$Titelzeile['Spieljahr']], $data[$Titelzeile['Kalenderwoche']],
+ $Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_wochentag'],
+ $Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']);
+ }
+
+ $Begegnung[$Zeile]['zeitpunkt'] = $data[$Titelzeile['Spielstart']];
if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) {
$bgcolor = "red";
$import = false;
} else {
$bgcolor = "green";
}
+
echo "" . $data[$Titelzeile['Spielstart']] . " | ";
if ($Begegnung[$Zeile]['heim_team_id'] == "") {
if ($data[$Titelzeile['Heim']] == "spielfrei") {
@@ -9498,7 +9572,7 @@ function adminBegegnungenImportieren(): void
} else {
$bgcolor = "green";
}
- echo "" . utf8_encode($data[$Titelzeile['Heim']]) . " | ";
+ echo "" . $data[$Titelzeile['Heim']] . " | ";
if ($Begegnung[$Zeile]['gast_team_id'] == "") {
if ($data[$Titelzeile['Gast']] == "spielfrei") {
$bgcolor = "orange";
@@ -9510,7 +9584,7 @@ function adminBegegnungenImportieren(): void
} else {
$bgcolor = "green";
}
- echo "" . utf8_encode($data[$Titelzeile['Gast']]) . " | ";
+ echo "" . $data[$Titelzeile['Gast']] . " | ";
echo "
";
}
if (!$import_zeile) {
@@ -9523,18 +9597,18 @@ function adminBegegnungenImportieren(): void
if ($import) {
$Zeile = 1;
- $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, zeitpunkt, heim_team_id, gast_team_id) VALUES ";
+ $query = "INSERT INTO #__sportsmanager_begegnung (spieltag, zeitpunkt, spieltag_titel, spiel_nr, heim_team_id, gast_team_id) VALUES ";
foreach ($Begegnung as $value) {
if ($Zeile > 1) {
$query .= ", ";
}
- $query .= "(" . $value['spieltag'] . ",'" . $value['zeitpunkt'] . "'," . $value['heim_team_id'] . "," . $value['gast_team_id'] . ") ";
+ $query .= "(" . $value['spieltag'] . ",'" . $value['zeitpunkt'] . "','" .
+ ($value['spieltag_titel'] ?? "") . "', " . ($value['spiel_nr'] ?? "NULL") . " ," .
+ $value['heim_team_id'] . "," . $value['gast_team_id'] . ") ";
$Zeile++;
}
$query .= ";";
-
$db->setQuery($query);
-
if (!$db->execute()) {
die($db->stderr(true));
} else {
@@ -9685,6 +9759,448 @@ function adminBegegnungenRundeErzeugenForm(): void
redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
}
+function getAuswahlSpieltagtitel()
+{
+ $db = getDatabase();
+ $query = "SELECT spieltag_titel FROM #__sportsmanager_begegnung"
+ . "\n WHERE spieltag_titel <> ''"
+ . "\n GROUP BY spieltag_titel ORDER BY spieltag_titel;";
+ return loadObjectList($db, $query);
+}
+
+function adminBegegnungenPokalrundeAuslosenForm(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+ $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT');
+
+ if ($veranstaltungId == 0) die("Missing id!");
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId))
+ keinZugriff(true);
+
+ $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId";
+ $rows = loadObjectList($db, $query);
+ if (count($rows) < 1) die("Wrong id!");
+ $veranstaltung = $rows[0];
+
+ $query = "SELECT COUNT(teamname)"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY teamname";
+ $anzahlteams = loadResult($db, $query);
+ $veranstaltung->letzteRunde = getAnzahlRunden($anzahlteams);
+
+ $query = "SELECT t1.spieltag AS Runden_Nr
+ 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
+ LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id
+ WHERE t4.veranstaltung_id = ".$veranstaltungId."
+ GROUP BY t1.spieltag
+ ORDER BY t1.spieltag DESC LIMIT 1;";
+ $Runde = loadObjectList($db, $query);
+ if (!isset($Runde[0]))
+ $veranstaltung->naechsteRunde = 1;
+ else
+ $veranstaltung->naechsteRunde = $Runde[0]->Runden_Nr + 1;
+
+ $veranstaltung->titelVorschlag = getRundenTitel(pow(2, $veranstaltung->letzteRunde - $veranstaltung->naechsteRunde) * 2);
+
+ // Spieltage ermitteln, die noch nicht abgeschlossen sind
+ $query = "SELECT COUNT(DISTINCT spieltag) AS Anzahl"
+ . "\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"
+ . "\n AND (heim_spielpunkte IS NULL OR gast_spielpunkte IS NULL"
+ . "\n OR #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id IS NOT NULL)"
+ . "\n ORDER BY spieltag DESC";
+ $veranstaltung->nicht_abgeschlossene_spiele = loadResult($db, $query);
+
+ HTML_sportsmanager_admin::adminBegegnungenPokalrundeAuslosenForm($veranstaltung,getAuswahlSpieltagtitel());
+}
+
+#[NoReturn] function adminBegegnungenPokalrundeAuslosen(): void
+{
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ $sperren = false;
+ $veranstaltungId = $jInput->get('veranstaltungid', 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!");
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId))
+ keinZugriff();
+
+ if ($jInput->get('cancel', false, 'BOOL')) {
+ redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
+ }
+
+ $query = "SELECT COUNT(teamname)"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY teamname";
+ $anzahlteams = loadResult($db, $query);
+ $anzahlrunden = getAnzahlRunden($anzahlteams);
+ $Verlierer = "";
+
+ //Alle Teams einlesen
+ $query = "SELECT *"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId ";
+ $teams_komplett = json_decode(json_encode(loadObjectList($db, $query)), true);
+ foreach($teams_komplett AS $team)
+ {
+ $teams[$team['team_id']] = $team;
+ }
+
+ if ($rundenNr == 1){
+ $anzahlmatches = $anzahlteams - pow(2, $anzahlrunden - 1 );
+ }
+ 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;";
+ $loosers = loadObjectList($db, $query);
+
+ $Zeile = 0;
+ foreach($loosers AS $looser)
+ {
+ if ($Zeile > 0) $Verlierer .= ",";
+ $Verlierer .= $looser->Verlierer;
+ $Zeile++;
+ }
+ }
+
+ $query = "SELECT team_id"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId ";
+ if ($Verlierer != "")
+ $query .= "\n AND team_id NOT IN (".$Verlierer.");";
+
+ $teams_auslosung = json_decode(json_encode(loadObjectList($db, $query)), true);
+
+ // Teams durchmischen
+ shuffle($teams_auslosung);
+
+ if ($anzahlteams < 2)
+ {
+ $Fehlertext = "Zu wenige Teams vorhanden!!!";
+ $sperren = true;
+ }
+
+ if ($anzahlteams > 128)
+ {
+ $Fehlertext = "Zu viele Teams vorhanden!!!";
+ $sperren = true;
+ }
+
+ $datum_jahr = null;
+ $zeitpunkt = "";
+
+ if ($jInput->get('datum_tag', 0, 'STRING') > 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 0 && $jInput->get('datum_monat', 0, 'STRING') >= 0
+ && $jInput->get('uhrzeit_stunden', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_minuten', 0, 'STRING') >= 0) {
+ $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT')));
+ $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT')));
+ $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit);
+ $datum_kw = 0;
+ } else {
+ $datum_jahr = $jInput->get('datum_jahr', 0, 'INT');
+ $datum_kw = abs($jInput->get('datum_tag', 0, 'INT'));
+ }
+
+ if (!((($jInput->get('datum_tag', 0, 'STRING') <= 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 2000)) || $zeitpunkt != ""))
+ {
+ $Fehlertext = "Bitte ein gültiges Datum eingeben!!!";
+ $sperren = true;
+ }
+
+ 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'];
+ }
+
+ if ($spielumplatz3)
+ {
+ //Verlierer Halbfinale ermitteln
+ $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"
+ . "\n AND t1.spieltag = " . ($rundenNr - 1) . " ORDER BY RAND();";
+ $loosers = loadObjectList($db, $query);
+ $matches[2]['heim'] = $loosers[0]->Verlierer;
+ $matches[2]['gast'] = $loosers[1]->Verlierer;
+ $matches[2]['rundentitel'] = "Spiel um Platz 3";
+ }
+
+ $Fehlertext = "";
+ foreach($matches AS $spiel_nr => $match)
+ {
+ $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel;
+ $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt;
+ $matches[$spiel_nr]['heimspielort_id'] = $teams[$teams_setzliste[$setzung[0]]]['heimspielort_id'];
+ $team_heim = $match['heim'];
+ 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"],
+ floor($teams[$team_heim]['heimspiel_uhrzeit'] / 100), $teams[$team_heim]['heimspiel_uhrzeit'] % 100, 0);
+ }
+ if (!validateDate($matches[$spiel_nr]['zeitpunkt'])){
+ $sperren = true;
+ $Fehlertext .= "Bitte die Heimspiel Uhrzeit des " . $teams[$matches[$spiel_nr]['heim']]['teamname'] . " überprüfen!!!
";
+ }
+ }
+
+ if (!$sperren){
+ $Zeile = 0;
+ $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, spieltag_titel, spiel_nr, heim_team_id, gast_team_id, spielort_id) values ";
+ foreach ($matches AS $key => $match) {
+ if (++$Zeile > 1) $query .= ", ";
+ $query .= "('" . $match['zeitpunkt'] . "', " . $rundenNr .
+ ", '" . $match['rundentitel'] . "', " . $key .
+ ", '" . $match['heim'] . "', '" . $match['gast'] . "'" .
+ ", " . ($match['heimspielort_id'] != 0 ? "'" . $match['heimspielort_id'] . "'" : "NULL") . ")";
+ }
+ $query .= "; ";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
+ }
+ else{
+ echo "
+ $Fehlertext\n";
+ }
+}
+
+#[NoReturn] function adminBegegnungenPokalrundeSetzliste(): void
+{
+
+ $db = getDatabase();
+ $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
+
+ $teams = [];
+ $setzliste = [];
+ $setzung = [];
+ $matches = [];
+
+ $sperren = false;
+ $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT');
+ $rundenNr = $jInput->get('runde', 0, 'INT');
+ $rundenTitel = $jInput->get('rundentitel', 0, 'STRING');
+ $spielumplatz3 = $jInput->get('spielumplatz3', 0, 'INT');
+
+ if ($veranstaltungId == 0) die("Missing id!");
+
+ if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId))
+ keinZugriff();
+
+ if ($jInput->get('cancel', false, 'BOOL')) {
+ redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
+ }
+
+ $query = "SELECT COUNT(teamname)"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY teamname";
+ $anzahlteams = loadResult($db, $query);
+ $anzahlrunden = getAnzahlRunden($anzahlteams);
+
+ //Vergabe der Setzliste
+ if ($rundenNr == 1){
+ $query = "UPDATE #__sportsmanager_team AS t
+ JOIN (
+ SELECT team_id, (@r := @r + 1) AS rnd_num
+ FROM (
+ SELECT team_id
+ FROM #__sportsmanager_team
+ WHERE veranstaltung_id = $veranstaltungId
+ ORDER BY RAND()
+ ) AS shuffled
+ JOIN (SELECT @r := 0) AS init
+ ) AS x ON t.team_id = x.team_id
+ SET t.setzliste_nr = x.rnd_num;";
+
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+ }
+
+ $query = "SELECT *"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY setzliste_nr;";
+
+ $teams_array = json_decode(json_encode(loadObjectList($db, $query)), true);
+
+ foreach($teams_array AS $team)
+ {
+ $teams_setzliste[$team['setzliste_nr']] = $team['team_id'];
+ $teams[$team['team_id']] = $team;
+ }
+
+ if ($anzahlteams < 2)
+ {
+ $Fehlertext = "Zu wenige Teams vorhanden!!!";
+ $sperren = true;
+ }
+
+ $datum_jahr = null;
+ $zeitpunkt = "";
+
+ if ($jInput->get('datum_tag', 0, 'STRING') > 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 0 && $jInput->get('datum_monat', 0, 'STRING') >= 0
+ && $jInput->get('uhrzeit_stunden', 0, 'STRING') >= 0 && $jInput->get('uhrzeit_minuten', 0, 'STRING') >= 0) {
+ $datum = normalisiertesDatum($jInput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jInput->get('datum_jahr', 0, 'INT'), $jInput->get('datum_monat', 0, 'INT'), $jInput->get('datum_tag', 0, 'INT')));
+ $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jInput->get('uhrzeit_stunden', 0, 'INT'), $jInput->get('uhrzeit_minuten', 0, 'INT')));
+ $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit);
+ $datum_kw = 0;
+ } else {
+ $datum_jahr = $jInput->get('datum_jahr', 0, 'INT');
+ $datum_kw = abs($jInput->get('datum_tag', 0, 'INT'));
+ }
+
+ if (!((($jInput->get('datum_tag', 0, 'STRING') <= 0 && $jInput->get('datum_jahr', 0, 'STRING') >= 2000)) || $zeitpunkt != ""))
+ {
+ $Fehlertext = "Bitte ein gültiges Datum eingeben!!!";
+ $sperren = true;
+ }
+
+ $matches = [];
+
+ if ($rundenNr == 1){
+ $setzliste = getSetzliste($anzahlrunden);
+ $spiel_nr = 0;
+ foreach($setzliste AS $setzung){
+ $spiel_nr++;
+ if ($setzung[0] <= $anzahlteams && $setzung[1] <= $anzahlteams){
+ $matches[$spiel_nr]['heim'] = $teams_setzliste[$setzung[0]];
+ $matches[$spiel_nr]['gast'] = $teams_setzliste[$setzung[1]];
+ }
+ }
+ }
+
+ //Freilose Runde 1 ermitteln
+ if ($rundenNr == 2){
+ $setzliste = getSetzliste($anzahlrunden);
+ $spiel_nr = 0;
+ foreach($setzliste AS $setzung){
+ $spiel_nr++;
+ if ($setzung[0] > $anzahlteams || $setzung[1] > $anzahlteams){
+ if ($spiel_nr % 2)
+ $matches[round($spiel_nr/2)]['heim'] = $teams_setzliste[min($setzung[0],$setzung[1])];
+ else
+ $matches[round($spiel_nr/2)]['gast'] = $teams_setzliste[min($setzung[0],$setzung[1])];
+ }
+ }
+ }
+
+ //Sieger der vorherigen Runde ermitteln
+ 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
+ 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
+ LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id
+ 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
+ $sieger = $begegnung['gast_team_id'];
+
+ if ($begegnung['Spiel_Nr'] % 2)
+ $matches[round($begegnung['Spiel_Nr']/2)]['heim'] = $sieger;
+ else
+ $matches[round($begegnung['Spiel_Nr']/2)]['gast'] = $sieger;
+ }
+ }
+
+ if ($spielumplatz3)
+ {
+ //Verlierer Halbfinale ermitteln
+ $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"
+ . "\n AND t1.spieltag = " . ($rundenNr - 1) . ";";
+ $loosers = loadObjectList($db, $query);
+ $matches[2]['heim'] = $loosers[0]->Verlierer;
+ $matches[2]['gast'] = $loosers[1]->Verlierer;
+ $matches[2]['rundentitel'] = "Spiel um Platz 3";
+ }
+
+ $Fehlertext = "";
+ foreach($matches AS $spiel_nr => $match)
+ {
+ $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel;
+ $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt;
+ $matches[$spiel_nr]['heimspielort_id'] = $teams[$teams_setzliste[$setzung[0]]]['heimspielort_id'];
+ $team_heim = $match['heim'];
+ 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"],
+ floor($teams[$team_heim]['heimspiel_uhrzeit'] / 100), $teams[$team_heim]['heimspiel_uhrzeit'] % 100, 0);
+ }
+ if (!validateDate($matches[$spiel_nr]['zeitpunkt'])){
+ $sperren = true;
+ $Fehlertext .= "Bitte die Heimspiel Uhrzeit des " . $teams[$matches[$spiel_nr]['heim']]['teamname'] . " überprüfen!!!
";
+ }
+ }
+
+ if (!$sperren){
+ $Zeile = 0;
+ $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, spieltag_titel, spiel_nr, heim_team_id, gast_team_id, spielort_id) values ";
+ foreach ($matches AS $key => $match) {
+ if (++$Zeile > 1) $query .= ", ";
+ $query .= "('" . $match['zeitpunkt'] . "', " . $rundenNr .
+ ", '" . $match['rundentitel'] . "', " . $key .
+ ", '" . $match['heim'] . "', '" . $match['gast'] . "'" .
+ ", " . ($match['heimspielort_id'] != 0 ? "'" . $match['heimspielort_id'] . "'" : "NULL") . ")";
+ }
+ $query .= "; ";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId);
+ }
+ else{
+ echo "
+ $Fehlertext\n";
+ }
+}
+
#[NoReturn] function adminBegegnungenAlleEntfernen(): void
{
$db = getDatabase();
@@ -9739,6 +10255,12 @@ function adminBegegnungenRundeErzeugenForm(): void
if (!$db->execute()) {
die($db->stderr(true));
}
+
+ $query = "UPDATE #__sportsmanager_team SET setzliste_nr = NULL WHERE veranstaltung_id = $veranstaltungId;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
}
if ($veranstaltung->status != 0 && $veranstaltung->elo_wertung != 0) {
@@ -9828,8 +10350,9 @@ function adminBegegnungenExportForm(): void
$query = "
SELECT t1.begegnung_id AS ID, t5.saisonbezeichnung AS Saison,
t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast,
- t1.spieltag AS Spieltag_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 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
diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php
index 0df4bee..66dfd2c 100644
--- a/src/structure/components/com_sportsmanager/database/update.php
+++ b/src/structure/components/com_sportsmanager/database/update.php
@@ -5217,7 +5217,7 @@ function updateDatabase(): void
}
if ($datenbank_version < 104) {
-
+
$query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;";
$db->setQuery($query);
if (!$db->execute()) {
@@ -5245,8 +5245,37 @@ function updateDatabase(): void
}
}
+ if ($datenbank_version < 105) {
+
+ $query = "ALTER TABLE `#__sportsmanager_begegnung` ADD `spieltag_titel` VARCHAR(32) NOT NULL DEFAULT '' AFTER `spieltag`;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ $query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD `spieltag_titel_zeigen` INT(4) NOT NULL DEFAULT '0' AFTER `unterteilung`;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ $query = "ALTER TABLE `#__sportsmanager_team` ADD `teamname_kurz` VARCHAR(24) NOT NULL DEFAULT '' AFTER `teamname`;";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+
+ $query = "UPDATE #__sportsmanager_einstellungen"
+ . "\n SET wert = '105'"
+ . "\n WHERE name = 'datenbank_version'";
+ $db->setQuery($query);
+ if (!$db->execute()) {
+ die($db->stderr(true));
+ }
+ }
+
if ($datenbank_version < 106) {
-
+
$query = "ALTER TABLE `#__sportsmanager_verein` ADD `verstecken` INT(4) NOT NULL DEFAULT '0' AFTER `ausgetreten`;";
$db->setQuery($query);
if (!$db->execute()) {
diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php
index eb29450..9c576d5 100644
--- a/src/structure/components/com_sportsmanager/sportsmanager.php
+++ b/src/structure/components/com_sportsmanager/sportsmanager.php
@@ -388,10 +388,10 @@ if ($task == "spielerbild") {
break;
case 'admin_team_save':
adminSaveMannschaft();
- break;
+ break;
case 'admin_team_remove':
adminRemoveMannschaft();
- break;
+ break;
case 'admin_team_kopieren_form':
adminKopierenMannschaftForm();
break;
@@ -458,9 +458,18 @@ if ($task == "spielerbild") {
case 'admin_begegnungen_runde_erzeugen_form':
adminBegegnungenRundeErzeugenForm();
break;
+ case 'admin_begegnungen_pokalrunde_auslosen_form':
+ adminBegegnungenPokalrundeAuslosenForm();
+ break;
case 'admin_begegnungen_runde_erzeugen':
adminBegegnungenRundeErzeugen();
- break;
+ break;
+ case 'admin_begegnungen_pokalrunde_auslosen':
+ adminBegegnungenPokalrundeAuslosen();
+ break;
+ case 'admin_begegnungen_pokalrunde_setzliste':
+ adminBegegnungenPokalrundeSetzliste();
+ break;
case 'admin_begegnungen_alle_entfernen':
adminBegegnungenAlleEntfernen();
break;
@@ -1461,7 +1470,7 @@ function veranstaltungen(): void
'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0),
'tabelle' => NULL
];
- if ($veranstaltung->tabellenwertung != 0) {
+ if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]) || !$veranstaltung->platzierung_offen) {
$spieltag = null; // TODO: spieltag was not defined before, not sure what it should be
$competition['tabelle'] = tabelle($veranstaltung, $spieltag, true);
}
@@ -1475,7 +1484,7 @@ function veranstaltungen(): void
foreach ($veranstaltungen as $veranstaltung) {
if ($praesentation == 1 || $praesentation == 2)
echo "\r\n";
- if ($veranstaltung->tabellenwertung != 0 && ($veranstaltung->tabellenwertung != -1 || !$veranstaltung->platzierung_offen)) {
+ if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]) || !$veranstaltung->platzierung_offen) {
HTML_sportsmanager::tabelleHeader($veranstaltung);
tabelle($veranstaltung, 0, false, $praesentation);
} else {
@@ -1520,7 +1529,8 @@ function veranstaltung(): void
$query = "SELECT saison_id, saisonbezeichnung"
. "\n FROM #__sportsmanager_veranstaltung"
. "\n INNER JOIN #__sportsmanager_saison USING (saison_id)"
- . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN")
+ . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id"
+ . "\n WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN")
. "\n GROUP BY saison_id"
. "\n ORDER BY saisonbezeichnung DESC";
$saisons = loadObjectList($db, $query);
@@ -1544,7 +1554,10 @@ function veranstaltung(): void
$spieltag = $jInput->get('spieltag', 0, 'INT');
// Veranstaltung ermitteln
- $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id AND status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)";
+ $query = "SELECT * FROM #__sportsmanager_veranstaltung"
+ . "\n WHERE veranstaltung_id = $id AND status > 0"
+ . "\n AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id"
+ . "\n WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)";
$rows = loadObjectList($db, $query);
if (count($rows) < 1)
die("Wrong id!");
@@ -1555,7 +1568,7 @@ function veranstaltung(): void
'veranstaltung' => $veranstaltung,
'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0)
];
- if ($veranstaltung->tabellenwertung != 0) {
+ if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4])) {
$table = tabelle($veranstaltung, $spieltag, true);
$json['tabelle'] = $table['tabelle'];
$json['modus'] = $table['modus'];
@@ -1590,10 +1603,14 @@ function veranstaltung(): void
// Anzeigen
HTML_sportsmanager::veranstaltungHeaderAlone($veranstaltung, $vorherige_veranstaltung_id, $naechste_veranstaltung_id, $showSeasons, $saisons, $filter_saison_id);
- if ($veranstaltung->tabellenwertung != 0)
+
+ if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4]))
tabelle($veranstaltung, $spieltag, true);
- begegnungenAnzeigen($veranstaltung, NULL, NULL, 0);
+ if (einstellungswert("turnierbaum_zeigen") && $veranstaltung->tabellenwertung == -4)
+ turnierbaumAnzeigen($veranstaltung);
+
+ begegnungenAnzeigen($veranstaltung, NULL, NULL, 0);
HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=veranstaltung_begegnungen_ical&id=' . $veranstaltung->veranstaltung_id));
}
}
@@ -1635,7 +1652,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$teams = getTabelleAktuellerSpieltag($veranstaltung);
} else {
$teams = getTabelleSpieltag($veranstaltung,$spieltag);
- if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){
+ if ($veranstaltung->direktervergleich && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag);
}
}
@@ -2083,6 +2100,300 @@ function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_
jexit();
}
+
+
+
+function erstelleSetzliste($teams): array
+{
+ $seedingPairs[4] = [[1, 4], [2, 3]];
+
+ $seedingPairs[8] = [[1, 8], [4, 5], [3, 6], [2, 7]];
+
+ $seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13],
+ [3, 14], [6, 11], [7, 10], [2, 15]];
+
+
+ $seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25],
+ [5, 28], [12, 21], [13, 20], [4, 29],
+ [3, 30], [14, 19], [11, 22], [6, 27],
+ [7, 26], [10, 23], [15, 18], [2, 31]];
+
+ $seedingPairs[64] = [[1, 64], [32, 33], [17, 48], [16, 49],
+ [9, 56], [24, 41], [25, 40], [8, 57],
+ [5, 60], [28, 37], [21, 44], [12, 53],
+ [13, 52], [20, 45], [29, 36], [4, 61],
+ [3, 62], [30, 35], [19, 46], [14, 51],
+ [11, 54], [22, 43], [27, 38], [6, 59],
+ [7, 58], [26, 39], [23, 42], [10, 55],
+ [15, 50], [18, 47], [31, 34], [2, 63]];
+
+ $seedingPairs[128]= [[1,128], [64,65], [33,96], [32,97], [17,112], [48,81], [49,80], [16,113],
+ [9,120], [56,73], [41,88], [24,105], [25,104], [40,89], [57,72], [8,121],
+ [5,124], [60,69], [37,92], [28,101], [21,108], [44,85], [53,76], [12,117],
+ [13,116], [52,77], [45,84], [20,109], [29,100], [36,93], [61,68], [4,125],
+ [3,126], [62,67], [35,94], [30,99], [19,110], [46,83], [51,78], [14,115],
+ [11,118], [54,75], [43,86], [22,107], [27,102], [38,91], [59,70], [6,123],
+ [7,122], [58,71], [39,90], [26,103], [23,106], [42,87], [55,74], [10,119],
+ [15,114], [50,79], [47,82], [18,111], [31,98], [34,95], [63,66], [2,127]];
+
+
+
+ $matches = [];
+
+ // Teams durchschütteln
+ $keys = array_keys($teams);
+ shuffle($keys);
+
+ $mannschaften = [];
+ $nr = 0;
+ foreach ($keys as $key) {
+ $mannschaften[++$nr] = $teams[$key];
+ }
+
+ $anzahlTeams = count($mannschaften);
+
+ if ($anzahlTeams >= 1 && $anzahlTeams <= 4) {
+ $setzliste = $seedingPairs[4];
+ $runden = 2;
+ } else if ($anzahlTeams >= 5 && $anzahlTeams <= 8){
+ $setzliste = $seedingPairs[8];
+ $runden = 3;
+ } else if ($anzahlTeams >= 9 && $anzahlTeams <= 16){
+ $setzliste = $seedingPairs[16];
+ $runden = 4;
+ } else if ($anzahlTeams >= 17 && $anzahlTeams <= 32){
+ $setzliste = $seedingPairs[32];
+ $runden = 5;
+ } else if ($anzahlTeams >= 33 && $anzahlTeams <= 64){
+ $setzliste = $seedingPairs[64];
+ $runden = 6;
+ } else if ($anzahlTeams >= 65 && $anzahlTeams <= 128){
+ $setzliste = $seedingPairs[128];
+ $runden = 7;
+ } else {
+ $setzliste = [];
+ $runden = 0;
+ }
+
+ $turnier = [];
+ if ($runden > 1)
+ {
+ $nr = 0;
+ foreach($setzliste as $paarung){
+ $matches[1][++$nr]['heim'] = $mannschaften[$paarung[0]] ?? 'freilos';
+ $matches[1][$nr]['gast'] = $mannschaften[$paarung[1]] ?? 'freilos';
+ }
+ $turnier['runden'] = $runden;
+ $turnier['matches'] = $matches;
+ }
+ return $turnier;
+}
+
+function getSetzliste($anzahlRunden)
+{
+
+ $maxTeams = pow(2, $anzahlRunden);
+
+ $seedingPairs[4] = [[1, 4], [2, 3]];
+
+ $seedingPairs[8] = [[1, 8], [4, 5], [3, 6], [2, 7]];
+
+ $seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13],
+ [3, 14], [6, 11], [7, 10], [2, 15]];
+
+
+ $seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25],
+ [5, 28], [12, 21], [13, 20], [4, 29],
+ [3, 30], [14, 19], [11, 22], [6, 27],
+ [7, 26], [10, 23], [15, 18], [2, 31]];
+
+ $seedingPairs[64] = [[1, 64], [32, 33], [17, 48], [16, 49],
+ [9, 56], [24, 41], [25, 40], [8, 57],
+ [5, 60], [28, 37], [21, 44], [12, 53],
+ [13, 52], [20, 45], [29, 36], [4, 61],
+ [3, 62], [30, 35], [19, 46], [14, 51],
+ [11, 54], [22, 43], [27, 38], [6, 59],
+ [7, 58], [26, 39], [23, 42], [10, 55],
+ [15, 50], [18, 47], [31, 34], [2, 63]];
+
+ $seedingPairs[128]= [[1,128], [64,65], [33,96], [32,97], [17,112], [48,81], [49,80], [16,113],
+ [9,120], [56,73], [41,88], [24,105], [25,104], [40,89], [57,72], [8,121],
+ [5,124], [60,69], [37,92], [28,101], [21,108], [44,85], [53,76], [12,117],
+ [13,116], [52,77], [45,84], [20,109], [29,100], [36,93], [61,68], [4,125],
+ [3,126], [62,67], [35,94], [30,99], [19,110], [46,83], [51,78], [14,115],
+ [11,118], [54,75], [43,86], [22,107], [27,102], [38,91], [59,70], [6,123],
+ [7,122], [58,71], [39,90], [26,103], [23,106], [42,87], [55,74], [10,119],
+ [15,114], [50,79], [47,82], [18,111], [31,98], [34,95], [63,66], [2,127]];
+
+ return $seedingPairs[$maxTeams];
+
+}
+
+function getAnzahlRunden($anzahlTeams)
+{
+ if ($anzahlTeams >= 1 && $anzahlTeams <= 4) {
+ return 2;
+ } else if ($anzahlTeams >= 5 && $anzahlTeams <= 8){
+ return 3;
+ } else if ($anzahlTeams >= 9 && $anzahlTeams <= 16){
+ return 4;
+ } else if ($anzahlTeams >= 17 && $anzahlTeams <= 32){
+ return 5;
+ } else if ($anzahlTeams >= 33 && $anzahlTeams <= 64){
+ return 6;
+ } else if ($anzahlTeams >= 65 && $anzahlTeams <= 128){
+ return 7;
+ }
+}
+
+function getRundenTitel($anzahlTeams): string
+{
+ if ($anzahlTeams >= 1 && $anzahlTeams <= 2)
+ return Text::_('COM_SPORTSMANAGER_FINAL');
+ if ($anzahlTeams >= 3 && $anzahlTeams <= 4)
+ return Text::_('COM_SPORTSMANAGER_HALF_FINAL');
+ if ($anzahlTeams >= 5 && $anzahlTeams <= 8)
+ return Text::_('COM_SPORTSMANAGER_QUARTER_FINAL');
+ if ($anzahlTeams >= 9 && $anzahlTeams <= 16)
+ return Text::_('COM_SPORTSMANAGER_ROUND_OF_16');
+ if ($anzahlTeams >= 17 && $anzahlTeams <= 32)
+ return Text::_('COM_SPORTSMANAGER_ROUND_OF_32_ALT');
+ if ($anzahlTeams >= 33 && $anzahlTeams <= 64)
+ return Text::_('COM_SPORTSMANAGER_ROUND_OF_64_ALT');;
+ if ($anzahlTeams >= 65 && $anzahlTeams <= 128)
+ return Text::_('COM_SPORTSMANAGER_ROUND_OF_128_ALT');
+
+ return "";
+}
+
+function turnierbaumAnzeigen($veranstaltung): void
+{
+ $db = getDatabase();
+ $veranstaltungId = $veranstaltung->veranstaltung_id;
+
+ if ($veranstaltungId == 0) die("Missing id!");
+
+ //Infos Veranstaltung
+ $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId";
+ $rows = loadObjectList($db, $query);
+ if (count($rows) < 1) die("Wrong id!");
+ $veranstaltung = $rows[0];
+
+ //Alle Teams
+ $query = "SELECT *"
+ . "\n FROM #__sportsmanager_team"
+ . "\n WHERE veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY setzliste_nr;";
+ $teams_unformatiert = json_decode(json_encode(loadObjectList($db, $query)), true);
+
+ foreach($teams_unformatiert AS $team){
+ $teams[$team['setzliste_nr']] = $team;
+ }
+
+ $anzahlTeams = count($teams);
+ $anzahlRunden = getAnzahlRunden($anzahlTeams);
+
+ //Alle Begegnungen vorbelegen
+ $anzahlSpiele = pow(2, $anzahlRunden - 1);
+ for($runde_nr = 1; $runde_nr <= $anzahlRunden; $runde_nr++)
+ {
+ for($spiel_nr = 1; $spiel_nr <= $anzahlSpiele; $spiel_nr++)
+ {
+ $begegnungen[$runde_nr][$spiel_nr]['heim'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['gast'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['sieger'] = 0;
+ $begegnungen[$runde_nr][$spiel_nr]['link'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['id'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['erg_heim'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['erg_gast'] = "";
+ $begegnungen[$runde_nr][$spiel_nr]['tooltiptext'] = "";
+ }
+ $anzahlSpiele = $anzahlSpiele / 2;
+ }
+
+ //Alle Begegnungen aus der Setzliste
+ $setzliste = getSetzliste($anzahlRunden);
+ $spiel_nr = 0;
+ foreach($setzliste AS $setzung){
+ $spiel_nr++;
+ $begegnungen[1][$spiel_nr]['sieger'] = 0;
+ if ($setzung[0] <= $anzahlTeams) {
+ $begegnungen[1][$spiel_nr]['heim'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
+ } else {
+ $begegnungen[1][$spiel_nr]['heim'] = "freilos";
+ $begegnungen[1][$spiel_nr]['sieger'] = 2;
+ if ($spiel_nr %2)
+ $begegnungen[2][round($spiel_nr/2)]['heim'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
+ else
+ $begegnungen[2][round($spiel_nr/2)]['gast'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
+ }
+ if ($setzung[1] <= $anzahlTeams) {
+ $begegnungen[1][$spiel_nr]['gast'] = htmlentities($teams[$setzung[1]]['teamname_kurz']) ?: htmlentities($teams[$setzung[1]]['teamname']);
+ } else {
+ $begegnungen[1][$spiel_nr]['gast'] = "freilos";
+ $begegnungen[1][$spiel_nr]['sieger'] = 1;
+ if ($spiel_nr %2)
+ $begegnungen[2][round($spiel_nr/2)]['heim'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
+ else
+ $begegnungen[2][round($spiel_nr/2)]['gast'] = htmlentities($teams[$setzung[0]]['teamname_kurz']) ?: htmlentities($teams[$setzung[0]]['teamname']);
+ }
+ }
+
+
+ //Alle Begegnungen aus Datenbank
+ $query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart,"
+ . "\n if(t2.teamname_kurz <> '',t2.teamname_kurz, t2.teamname) AS Heim,"
+ . "\n if(t3.teamname_kurz <> '',t3.teamname_kurz, t3.teamname) AS Gast,"
+ . "\n t1.heim_team_id, t1.gast_team_id, t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr,"
+ . "\n t1.spiel_nr AS Spiel_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore,"
+ . "\n t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte, t1.begegnung_id"
+ . "\n FROM #__sportsmanager_begegnung AS t1"
+ . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id"
+ . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id"
+ . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t4 ON t2.veranstaltung_id = t4.veranstaltung_id"
+ . "\n WHERE t4.veranstaltung_id = $veranstaltungId"
+ . "\n ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr;";
+ $begegnungen_unformatiert = json_decode(json_encode(loadObjectList($db, $query)), true);
+ foreach($begegnungen_unformatiert as $begegnung)
+ {
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['Id'] = $begegnung['begegnung_id'];
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['heim'] = htmlentities($begegnung['Heim']);
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['gast'] = htmlentities($begegnung['Gast']);
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['erg_heim'] = $begegnung['Heim_Satzpunkte'];
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['erg_gast'] = $begegnung['Gast_Satzpunkte'];
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['link'] = SportsManagerURL('&task=begegnung_spielplan&veranstaltungid=' . $veranstaltungId . '&id=' . $begegnung['begegnung_id']);
+ $tooltiptext = $begegnung['Runde'] . ": " . htmlentities($begegnung['Heim']) . " vs. " . htmlentities($begegnung['Gast']);
+ if ($begegnung['Heim_Satzpunkte'] > 0 || $begegnung['Gast_Satzpunkte'] > 0)
+ $tooltiptext .= " - " . $begegnung['Heim_Satzpunkte'] . " : " . $begegnung['Gast_Satzpunkte'];
+ $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['tooltiptext'] = $tooltiptext;
+
+ if ($begegnung['Heim_Satzpunkte'] > $begegnung['Gast_Satzpunkte']) {
+ $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']) {
+ $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;
+ }
+ }
+
+ $veranstaltung->anzahlRunden = $anzahlRunden;
+
+ HTML_sportsmanager::turnierbaumAnzeigen($veranstaltung,$begegnungen);
+}
+
function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfenster, $ausgetragene_filtern = false, $auszutragende_filtern = false, $zwischenergebnisse_filtern = false, $titel = "", $umgekehrte_reihenfolge = false, $aus_uebersicht = false, $praesentation = 0, $year = NULL, $month = NULL)
{
$db = getDatabase();
@@ -2172,8 +2483,9 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id"
. "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . " AND t2.veranstaltung_id = $veranstaltung->veranstaltung_id" . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") . ($ausgetragene_filtern ? " AND ISNULL(heim_punkte) AND ISNULL(gast_punkte)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0)" : "")
- . "\n ORDER BY " . ((($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) && $zeitfenster == 0) ? ("t1.spieltag" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", s1.name, ") : "") . "t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name";
- $begegnungen = loadObjectList($db, $query);
+ . "\n ORDER BY " . ((($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) && $zeitfenster == 0) ? ("t1.spieltag" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", t1.spiel_nr, s1.name, ") : "") . "t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name";
+
+ $begegnungen = loadObjectList($db, $query);
$modus_id = $veranstaltung->modus_id;
$query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id";
@@ -4366,7 +4678,7 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
$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){
+ if ($veranstaltung->direktervergleich && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag);
}
diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
index 6aa2c90..3fc8916 100644
--- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
+++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php
@@ -1096,7 +1096,9 @@ static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster,
|
unterteilung == 0));
- if (!empty($spielort_name))
+ if (!empty($row->spieltag_titel) && !empty($veranstaltung->spieltag_titel_zeigen))
+ echo " - " . $row->spieltag_titel;
+ if (!empty($spielort_name))
echo " " . htmlentities_utf8($spielort_name);
?>
|
@@ -1228,6 +1230,143 @@ static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster,
}
}
+static function turnierbaumAnzeigen($veranstaltung,$begegnungen): void
+{
+ $hoehe = 50;
+ $breite = 200;
+ $abstand = 20;
+ $anzahlRunden = $veranstaltung->anzahlRunden;
+ $matches = count($begegnungen[1]);
+ $mannschaften = pow(2, $anzahlRunden - 1) * 2;
+ $fontsize = 11;
+?>
+
+
+
+ ";
+ echo "";
+ echo $begegnungen[$runde + 1][$spiel + 1]['heim'] ?? '';
+ echo "";
+ echo "
";
+ echo "";
+ echo $begegnungen[$runde + 1][$spiel + 1]['gast'] ?? '';
+ echo "";
+ echo "
\n";
+ }
+ $anzahlSpiele = $anzahlSpiele/2;
+ }
+ ?>
+
+ ";
+ for ($runde = 0; $runde < $anzahlRunden; $runde++)
+ {
+ $offset_oben = pow(2, $runde) * 25 - 1;
+ $offset_links = 12;
+
+ for ($spiel = 0; $spiel < $anzahlSpiele; $spiel++)
+ {
+
+ $oben = $hoehe * pow(2, $runde) * $spiel + $offset_oben;
+ $links = $breite * ($runde + 1) + $runde * $abstand - $offset_links;
+ $rechts = $links - $breite - $abstand/2 + $offset_links;
+ $mitte = $links + $abstand/2 + $offset_links/2;
+
+ if ($spiel % 2)
+ $startvertikal = $oben;
+ else
+ $endevertikal = $oben;
+
+ //Linie rechts von Box
+ if ($runde < $anzahlRunden - 1){
+ echo "\n
";
+ }
+
+ //Linie links von Box
+ if ($runde > 0){
+ echo "\n
";
+ }
+
+ //Vertkal Linie
+ if ($spiel % 2)
+ echo "\n
";
+ }
+
+ $anzahlSpiele = $anzahlSpiele/2;
+ }
+ ?>
+
+
+
+
+
0) {
- return sprintf("%dd", $daydiff);
- } else {
- return "-";
- }
- }
-}
-
-function formatTeamName( $team_name, $team_id, $highlight_team_id ): string
-{
- if ($team_id == $highlight_team_id) {
- return "
" . htmlentities_utf8($team_name) . "";
- } else {
- return htmlentities_utf8($team_name);
- }
-}
-
class HTML_sportsmanager_admin
{
private static $versionData = null;
@@ -54,17 +29,43 @@ class HTML_sportsmanager_admin
return self::$versionData['version'] ?? 'DEV';
}
+ static function formatTimediff( $timestamp1, $timestamp2, $verbose ): string
+ {
+ if (empty($timestamp1) || empty($timestamp2)) {
+ return "";
+ } else {
+ $daydiff = round(($timestamp2 - $timestamp1) / (3600.0 * 24.0));
+ if ($verbose) {
+ return sprintf("%+d d", $daydiff);
+ } else if (abs($daydiff) > 0) {
+ return sprintf("%dd", $daydiff);
+ } else {
+ return "-";
+ }
+ }
+ }
+
+ static function formatTeamName( $team_name, $team_id, $highlight_team_id ): string
+ {
+ if ($team_id == $highlight_team_id) {
+ return "
" . htmlentities_utf8($team_name) . "";
+ } else {
+ return htmlentities_utf8($team_name);
+ }
+ }
+
+ static function checkZeilenumbruch($Spalte_Nr, $max_Spalten): int
+ {
+ $Spalte_Nr++;
+ if ($Spalte_Nr >= $max_Spalten){
+ echo "\n
\n";
+ $Spalte_Nr = 0;
+ }
+ return $Spalte_Nr;
+ }
+
static function adminUebersicht($veranstaltungen, $spielerstatistiken, $turniere, $ranglisten, $individualwettbewerbe, $statistik, $saisons, $filter_saison_id, $externe_datenbank): void
{
- function checkZeilenumbruch($Spalte_Nr, $max_Spalten): int
- {
- $Spalte_Nr++;
- if ($Spalte_Nr >= $max_Spalten){
- echo "
\n
\n";
- $Spalte_Nr = 0;
- }
- return $Spalte_Nr;
- }
global $params;
?>
@@ -83,7 +84,7 @@ class HTML_sportsmanager_admin
@@ -91,7 +92,7 @@ class HTML_sportsmanager_admin
@@ -99,7 +100,7 @@ class HTML_sportsmanager_admin
@@ -107,7 +108,7 @@ class HTML_sportsmanager_admin
@@ -115,7 +116,7 @@ class HTML_sportsmanager_admin
@@ -123,7 +124,7 @@ class HTML_sportsmanager_admin
@@ -131,13 +132,13 @@ class HTML_sportsmanager_admin
|
|
@@ -145,7 +146,7 @@ class HTML_sportsmanager_admin
@@ -153,7 +154,7 @@ class HTML_sportsmanager_admin
0) {
?>
@@ -161,7 +162,7 @@ class HTML_sportsmanager_admin
@@ -169,7 +170,7 @@ class HTML_sportsmanager_admin
@@ -177,7 +178,7 @@ class HTML_sportsmanager_admin
@@ -185,7 +186,7 @@ class HTML_sportsmanager_admin
@@ -193,7 +194,7 @@ class HTML_sportsmanager_admin
@@ -201,7 +202,7 @@ class HTML_sportsmanager_admin
@@ -622,6 +623,7 @@ class HTML_sportsmanager_admin
static function adminEinstellungen($einstellungen): void
{
+
global $params;
?>
|
- "/>
|
@@ -753,6 +755,24 @@ class HTML_sportsmanager_admin
+
+ |
+
+ |
+
+
+ |
+
|
|