diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml index f1ee34e..2d0b2be 100644 --- a/.github/workflows/build_release.yml +++ b/.github/workflows/build_release.yml @@ -36,6 +36,8 @@ jobs: echo " 'version' => '${{ env.VERSION }}'," >> src/structure/components/com_sportsmanager/util/version.php echo " 'date' => '$(date +%F)'," >> src/structure/components/com_sportsmanager/util/version.php echo "];" >> src/structure/components/com_sportsmanager/util/version.php + echo "Updating version to $VERSION in sportsmanager.xml" + sed -i "s#.*#$VERSION#" src/structure/sportsmanager.xml - name: Generate release notes id: release_notes_extension diff --git a/README.md b/README.md index 02a675d..4d59dcb 100644 --- a/README.md +++ b/README.md @@ -83,3 +83,25 @@ JConfig: `./data/joomla_data/configuration.php` 7. Click on "Start Listening for PHP Debug Connections" in the top row of intellij 8. (Not sure if optional) Install a browser extension by Jetbrains https://chromewebstore.google.com/detail/xdebug-helper-by-jetbrain/aoelhdemabeimdhedkidlnbkfhnhgnhm + + +### How to release +Hint: for technical details regarding the release process have a look into .github/... +To create a release these steps need to be followed +1. make sure all needed code changes are merged from dev -> stage -> prod, since releases may only be build on prod branch +2. give pull requests meaningful names and label them enhancement/bug/chore since labels and names are used for release note generation + Hint: if a specific pull request should be ignored, add the label changelog-ignore +3. tag a commit (recommended is the latest merge on prod). The pipeline is listening for any tag fitting `v[0-9]+.[0-9]+.[0-9]+` + ```shell + git tag -a v1.2.3 1a2b3c4 -m "Release version 1.2.3" + ``` +4. push the tag + ```shell + git push origin --tags + ``` +5. the tag push will trigger the pipeline, and it will create the release and store in GitHub + +A release can be created again anytime by deleting the release from GitHub, deleting the tag (from GitHub and additionally from git) +and repeating step 3 and 4 + +Further: merges from dev to stage and from stage to prod can only be done by creating pull requests. These pull requests will be automatically labeled as changelog-ignore diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index a23d69e..a31841f 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -656,6 +656,9 @@ function adminEinstellungen(): void $ansprechpartner_exportieren = $jInput->get('ansprechpartner_exportieren', 0, 'INT'); $spielerliste_elo = $jInput->get('spielerliste_elo', 0, 'INT'); $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'); @@ -698,6 +701,30 @@ function adminEinstellungen(): void die($db->stderr(true)); } + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'anzahl_mitglieder_zeigen'" + . ", wert = '$anzahl_mitglieder_zeigen'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'verband_anzeigen'" + . ", wert = '$verband_anzeigen'"; + $db->setQuery($query); + if (!$db->execute()) { + 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'"; @@ -3305,6 +3332,7 @@ function adminEditVerein(): void $url = $db->escape(trim($jInput->get('url', '', 'RAW'))); $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); $ausgetreten = $jInput->get('ausgetreten', 0, 'INT'); + $verstecken = $jInput->get('verstecken', 0, 'INT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); $berechtigt_fuer_verein_user_ids = array($jInput->get('berechtigt_fuer_verein_user_1_id', 0, 'INT'), @@ -3319,8 +3347,8 @@ function adminEditVerein(): void } if ($id == 0) { - $query = "INSERT INTO #__sportsmanager_verein (vereinsname, vereinssitz, vereinssitz_ortsteil, veranstalter_id, url, beschreibung, ausgetreten)" - . "\n VALUES ('$vereinsname', '$vereinssitz', '$vereinssitz_ortsteil', " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ", '$url', '$beschreibung', " . ($ausgetreten ? "TRUE" : "FALSE") . ");"; + $query = "INSERT INTO #__sportsmanager_verein (vereinsname, vereinssitz, vereinssitz_ortsteil, veranstalter_id, url, beschreibung, ausgetreten, verstecken)" + . "\n VALUES ('$vereinsname', '$vereinssitz', '$vereinssitz_ortsteil', " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ", '$url', '$beschreibung', " . ($ausgetreten ? "TRUE" : "FALSE") . ", $verstecken);"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -3334,7 +3362,8 @@ function adminEditVerein(): void . "\n veranstalter_id = " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . "," . "\n url = '$url'," . "\n beschreibung = '$beschreibung'," - . "\n ausgetreten = " . ($ausgetreten ? "TRUE" : "FALSE") + . "\n ausgetreten = " . ($ausgetreten ? "TRUE" : "FALSE") . "," + . "\n verstecken = '$verstecken'" . "\n WHERE verein_id = $id"; $db->setQuery($query); if (!$db->execute()) { @@ -6075,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'))); @@ -6093,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)); @@ -6119,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'," @@ -6381,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'))); @@ -6414,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)); } @@ -6437,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'," @@ -6662,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) . "'," @@ -7681,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); } @@ -9261,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) { @@ -9303,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++; @@ -9328,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++; } @@ -9338,16 +9375,16 @@ 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 .= ";"; - echo $query; + $db->setQuery($query); if (!$db->execute()) { @@ -9391,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; @@ -9411,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"])) { @@ -9446,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") { @@ -9478,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"; @@ -9490,7 +9584,7 @@ function adminBegegnungenImportieren(): void } else { $bgcolor = "green"; } - echo "" . utf8_encode($data[$Titelzeile['Gast']]) . ""; + echo "" . $data[$Titelzeile['Gast']] . ""; echo ""; } if (!$import_zeile) { @@ -9503,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 { @@ -9665,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(); @@ -9719,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) { @@ -9808,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 @@ -13541,6 +14084,7 @@ function adminTermine($admin_uebersicht): void $filter_veranstaltung = $jInput->get('filter_veranstaltung', '', 'RAW'); $filter_zusatz = $jInput->get('filter_zusatz', '', 'RAW'); $filter_land = $jInput->get('filter_land', '', 'RAW'); + $filter_ort = $jInput->get('filter_ort', '', 'RAW'); $query = "SELECT DISTINCT YEAR(erster_tag) AS jahr" . "\n FROM #__sportsmanager_termin" @@ -13567,6 +14111,8 @@ function adminTermine($admin_uebersicht): void $query .= " AND EXISTS(SELECT * FROM #__sportsmanager_termin_zusatz WHERE termin_id = #__sportsmanager_termin.termin_id AND zusatz = '" . $db->escape($filter_zusatz) . "')"; if (!empty($filter_land)) $query .= " AND land = '" . $db->escape($filter_land) . "'"; + if (!empty($filter_ort)) + $query .= " AND ort = '" . $db->escape($filter_ort) . "'"; $query .= "\n GROUP BY termin_id" . "\n ORDER BY erster_tag, bezeichnung"; $termine = loadObjectList($db, $query); @@ -13616,6 +14162,13 @@ function adminTermine($admin_uebersicht): void . "\n GROUP BY land" . "\n ORDER BY land"; $laender = loadObjectList($db, $query); + $query = "SELECT ort" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1) AND ort <> ''" + . "\n GROUP BY ort" + . "\n ORDER BY ort"; + $orte = loadObjectList($db, $query); if (isJson()) { $jsonexport = array_map( function ($termin) { @@ -13634,7 +14187,7 @@ function adminTermine($admin_uebersicht): void }, $termine); JSON_sportsmanager::JSON($jsonexport); } else { - HTML_sportsmanager_admin::adminTermine($termine, $termineSymbole, $jahre, $filter_jahr, $filter_veranstaltung, $filter_zusatz, $filter_land, $veranstaltungen, $zusaetze, $laender, $anzahl_beantragte_termine, $zugriffsebene, $admin_uebersicht, isExternalDatabase()); + HTML_sportsmanager_admin::adminTermine($termine, $termineSymbole, $jahre, $filter_jahr, $filter_veranstaltung, $filter_zusatz, $filter_land, $filter_ort, $veranstaltungen, $zusaetze, $laender, $orte, $anzahl_beantragte_termine, $zugriffsebene, $admin_uebersicht, isExternalDatabase()); if (!$admin_uebersicht) { administrationFooter(); @@ -13742,7 +14295,9 @@ function adminEditTermin($admin_uebersicht): void $bundeslaender = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_termin_land ORDER BY land"; $laender = loadObjectList($db, $query); - HTML_sportsmanager_admin::adminEditTermin($termin, $terminsymbolanzeige, $terminsymbole, $benachrichtigung_email, $bezeichnungen, $zusaetze, $bezeichnungszusaetze, $bundeslaender, $laender, $zugriffsebene, $admin_uebersicht, $bezeichnung_vorauswahl, $uebersicht, $ueberarbeiten, $nur_beantragte); + $query = "SELECT ort FROM #__sportsmanager_termin WHERE ort <> '' GROUP BY ort ORDER BY ort"; + $orte = loadObjectList($db, $query); + HTML_sportsmanager_admin::adminEditTermin($termin, $terminsymbolanzeige, $terminsymbole, $benachrichtigung_email, $bezeichnungen, $zusaetze, $bezeichnungszusaetze, $bundeslaender, $laender, $orte, $zugriffsebene, $admin_uebersicht, $bezeichnung_vorauswahl, $uebersicht, $ueberarbeiten, $nur_beantragte); } function adminSaveTermin($admin_uebersicht): void diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index bb50591..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,6 +5245,52 @@ 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()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '106'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + if ($termin_aktionen_email_setzen) { $query = "SELECT aktion_user_id, termin_aktion_id" . "\n FROM #__sportsmanager_termin_aktion"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index df5eb71..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; @@ -724,8 +733,12 @@ if ($task == "spielerbild") { break; case 'verein_begegnungen_ical': vereinBegegnungeniCal(); + break; + case 'sort_by_vereinsname': + vereine("vereinsname"); + break; default: - vereine(); + vereine("mitglieder"); break; } } else if ($content == "turniervoranmeldungen") { @@ -1457,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); } @@ -1471,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 { @@ -1516,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); @@ -1540,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!"); @@ -1551,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']; @@ -1586,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)); } } @@ -1631,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); } } @@ -2079,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(); @@ -2168,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"; @@ -3466,23 +3782,29 @@ function mannschaftDetails($ansicht_vereinigt, $unabhaengige_ansicht = false): v die(); } -function vereine(): void +function vereine($sort): void { $db = getDatabase(); global $params; + $organisationAnzeigen = einstellungswert('verband_anzeigen'); - $query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten"; - $organisationAnzeigen = loadResult($db, $query) > 1; + $query = "SELECT t1.verein_id, t1.vereinsname, t1.vereinssitz," + . "\n t2.veranstalterbezeichnung, COUNT(*) As mitglieder" + . "\n FROM #__sportsmanager_verein AS t1" + . "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS t3 USING (verein_id)" + . "\n WHERE t1.ausgetreten = 0 AND verstecken = 0" + . "\n GROUP BY t1.verein_id"; + if ($sort == "mitglieder"){ + $query .= "\n HAVING mitglieder >= " . einstellungswert('anzahl_mitglieder_zeigen'); + $query .= "\n ORDER BY mitglieder DESC;"; + } + if ($sort == "vereinsname"){ + $query .= "\n ORDER BY t1.vereinsname;"; + } - $query = "SELECT *, veranstalterbezeichnung" - . "\n FROM #__sportsmanager_verein" - . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" - . "\n WHERE NOT ausgetreten" . kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN") - . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, vereinsname"; $vereine = loadObjectList($db, $query); - HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen); - administrationFooter(); } @@ -3510,7 +3832,12 @@ function vereinDetails(): void $verein = $rows[0]; // Mitglieder ermitteln - $query = "SELECT * FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten ORDER BY nachname, vorname"; + $query = "SELECT * FROM #__sportsmanager_mitglied_von_verein" + . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein->verein_id" + . "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten" + . "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)" + . "\n ORDER BY nachname, vorname;"; $mitglieder = loadObjectList($db, $query); $query = "SELECT vorname, nachname, email" @@ -3520,6 +3847,7 @@ function vereinDetails(): void . "\n ORDER BY vorname, nachname, email"; $rows = loadObjectList($db, $query); + // Mailverteiler ermitteln $mailverteiler = array(); $mailverteiler["u"] = ""; $mailverteiler["p"] = ""; @@ -4350,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/util/image.php b/src/structure/components/com_sportsmanager/util/image.php index ad60776..7c22b0a 100644 --- a/src/structure/components/com_sportsmanager/util/image.php +++ b/src/structure/components/com_sportsmanager/util/image.php @@ -356,7 +356,7 @@ function bildURL($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, #crop=250,250,left #crop=250,250,right */ -function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?string +function yoothemeBild($typ, $id, $alternativ, $zusatz = ""): ?string { $typ_exploded = explode("/", $typ); $typ = $typ_exploded[0]; @@ -382,7 +382,7 @@ function yoothemeBild($typ, $id, $alternativ, $resize = '', $zusatz = ""): ?stri $bildpfad = SPORTSMANAGER_JOOMLA_URL . "images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "." . $ext; - return ''; + return ''; } function bildHTML($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = ""): ?string 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 6937589..3fc8916 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -983,7 +983,7 @@ static function turnierdisziplin($turnier, $disziplin, $meldungen, $meldungenSpi ?> + + 0) { $zeitpunkt_anzeigen = false; foreach ($rows as $begegnung) { @@ -1094,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); ?> @@ -1226,7 +1230,144 @@ static function begegnungenAnzeigen($veranstaltung, $modus, $rows, $zeitfenster, } } -static function begegnungSpielplan($veranstaltung, $modus, $begegnung, $heim_team, $gast_team, $spiele, $vorherige_begegnung_id, $naechste_begegnung_id, $teamansicht_team, $details_anzeigen):void +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; + } + ?> + + +
+ + @@ -1250,8 +1391,8 @@ global $params; > bezeichnung); ?> > - teamname)." "; + teamname)." "; echo Text::_('COM_SPORTSMANAGER_VERSUS_SHORTCUT'); echo " ".htmlentities_utf8($gast_team->teamname); } @@ -1320,7 +1461,7 @@ global $params;

heim_spielpunkte . ":" . $begegnung->gast_spielpunkte; ?>

- spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2) + spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2) echo "

(" . $begegnung->heim_punkte . ":" . $begegnung->gast_punkte . ")

"; ?> @@ -1388,9 +1529,9 @@ if (count($spiele) > 0) { teamspiel_nummer ?> - + heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_mitglied_id, 45, 60, 0, 0, 'border="1"'); @@ -1408,7 +1549,7 @@ if (count($spiele) > 0) { } ?> - + @@ -1458,7 +1599,7 @@ if (count($spiele) > 0) { if ($bild != null) echo $bild; if (!(empty($spiel->heim_spieler_2_id) && empty($spiel->gast_spieler_2_id))) { - + if (($details_anzeigen || !$spiel->gast_spieler_2_bild_ausblenden) && ($spiel->gast_spieler_2_mitglied_id != null || ($spiel->gast_spieler_2_id != null && $spiel->gast_spieler_2_id != 0))) { $bild = bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_mitglied_id, 45, 60, 0, 0, 'border="1"'); if ($bild == null) @@ -1483,15 +1624,15 @@ if (count($spiele) > 0) { - + spieler_id]) || ($mitglieder_modus == 1 && $mitglieder_ist_dauerhaft[$row->spieler_id])) @@ -2945,7 +3085,6 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie static function vereine($titel, $beschreibung, $rows, $organisationAnzeigen): void { global $params; - if (!empty($titel)) { ?>
0) { - $bilder_anzeigen = false; - foreach ($rows as $verein) { - if (bildHTML("vereine", $verein->verein_id, 28, 28) != null) { - $bilder_anzeigen = true; - break; - } - } + if (count($rows) > 0) { + $bilder_anzeigen = false; + foreach ($rows as $verein) { + if (bildHTML("vereine", $verein->verein_id, 40, 40) != null) { + $bilder_anzeigen = true; + break; + } + } + ?> + +
+
+ + + + + + + + + + + + + veranstalterbezeichnung; - ?> -
-
Vereinslogo + + + + + + Organisation
- - - -
- -
-
- -
- - - - - - + + + + + + + + " . $row->veranstalterbezeichnung . ""; + } ?> - $k = 0; - foreach ($rows as $row) { - if ($organisationAnzeigen) { - if ($row->veranstalterbezeichnung != $organisation) { - $organisation = $row->veranstalterbezeichnung; - ?> -
+ verein_id, 40, 40, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + ?> + + + + vereinsname)); ?> + + mitglieder; ?> + vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?>
-   - -
- - - - -
- -
-
- -
- - - - - - - - - - -
- -
- - - - - - - - -
- vereinsname)); ?> - - verein_id, 28, 28, 0, 0, 'border="0"'); - if ($bild != null) - echo $bild; - ?> -
- -
vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?>
- -   - + + +
+ + +   +
- +
@@ -3137,7 +3245,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie if ($bild != null) { ?>
- +
@@ -3149,7 +3257,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie ?>
-
+
@@ -4322,7 +4411,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie : @@ -4336,7 +4425,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie : @@ -5688,26 +5777,26 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie ?> @@ -6717,6 +6806,9 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie static function rangliste($rangliste, $rangliste_punkte, $allein_angezeigt, $details_anzeigen): void { + ?> + + @@ -6795,15 +6887,15 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie ?>
-
- +
@@ -3259,7 +3367,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
-
+
@@ -3312,7 +3420,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie if (count($mitglieder) > 0) { ?>
-
+
@@ -3321,67 +3429,48 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
-
+
"; - - echo ""; - echo ""; + + echo ""; + echo "
get('pageclass_sfx') . "\">"; - echo ""; - echo ""; + echo ""; if ($vereins_moderator) { if (!empty($row->geburtsjahr)) { - echo ""; + echo "
" . htmlentities_utf8($row->geburtsjahr) . ""; } - if (!empty($row->strasse) || - !empty($row->plz) || !empty($row->ort)) { - echo ""; - } - if (!empty($row->telefon) || - !empty($row->mobil) || - !empty($row->email)) { - echo ""; + if (!empty($row->strasse)) + echo "
" . htmlentities_utf8($row->strasse) . "
"; + if (!empty($row->plz) || !empty($row->ort)) + echo "
" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . ""; + if (!empty($row->telefon)) + echo "
" . htmlentities_utf8($row->telefon) . "
"; + if (!empty($row->mobil)) + echo "
" . htmlentities_utf8($row->mobil) . "
"; + if (!empty($row->email)) { + $replacement = HTMLHelper::_('email.cloak', $row->email, 1, $row->email, 0); + echo "
" . $replacement . ""; } } - echo "
"; - ?>nachname . ", " . $row->vorname); ?>
get('pageclass_sfx') . "\">"; + ?> + + nachname . ", " . $row->vorname); ?>spielernr)) echo "
" . htmlentities_utf8($row->spielernr) . ""; - echo "
"; - echo "" . htmlentities_utf8($row->geburtsjahr) . ""; - echo "
"; - if (!empty($row->strasse)) - echo "" . htmlentities_utf8($row->strasse) . "
"; - if (!empty($row->plz) || !empty($row->ort)) - echo "" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . ""; - echo "
"; - if (!empty($row->telefon)) - echo "" . htmlentities_utf8($row->telefon) . "
"; - if (!empty($row->mobil)) - echo "" . htmlentities_utf8($row->mobil) . "
"; - if (!empty($row->email)) { - $replacement = HTMLHelper::_('email.cloak', $row->email, 1, $row->email, 0); - echo "" . $replacement . ""; - } - echo "
get('pageclass_sfx') . "\">"; - $bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 90, 120, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w'); + echo "get('pageclass_sfx') . "\">"; + $bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->mitglied_von_team_id, 90, 120, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 90, 120, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w'); if ($bild != null) { - ?> - - - - -
- "; $n++; + echo "
"; } ?>
elo_einzel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_einzel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_einzel)); + echo($spieler->elo_einzel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_einzel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_einzel, $spieler->elo_einzel_spiele)); ?>
elo_doppel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_doppel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_doppel)); + echo($spieler->elo_doppel_spiele == 1 ? Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_doppel) : Text::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_doppel, $spieler->elo_doppel_spiele)); ?>
"> + "> - "> "> + "> -
- - + - \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; ?>
-
+
+ bild_ausblenden ? '' : $row->spieler_id, $row->geschlecht == 'M' ? 'm' : 'w', '#resize=75', 'border="1" style="text-align: left" hspace="8" vspace="2"')) != null) - echo $bild; ?> + if (($bild = yoothemeBild("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, $row->geschlecht == 'M' ? 'm' : 'w', 'border="1" style="text-align: left; width: 60px;" hspace="8" vspace="2"')) != null) + echo "\n".$bild; ?> 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 "
+
- +
@@ -718,6 +720,59 @@ class HTML_sportsmanager_admin + + + + + + + + + + + + @@ -2321,7 +2376,7 @@ class HTML_sportsmanager_admin
- "/>
+ + + +
+ + + +
+ + + +
- verein_id) : "")); ?>" method="post" name="adminForm" id="adminForm" enctype="multipart/form-data">
- +
- - - - - -
- +
+ + + + + + + + + +
+ + + +
+ + + +
- - - -