diff --git a/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini b/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini index 15d6c3e..f83385e 100644 --- a/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini +++ b/src/structure/administrator/language/de-DE/de-DE.com_sportsmanager.sys.ini @@ -21,12 +21,13 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TEAMS_JOINT="Mannschaften in gem COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Vereine" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Spielorte" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Termine" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Spielverlegungen" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Titel" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Titel, der im Fenster oben angezeigt wird" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Beschreibung" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Beschreibung, die unterhalb des Titels angezeigt wird (WICHTIG: Werden HTML-Tags verwendet, müssen auch Umlaute in HTML-Code angeben werden)" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Kategorien" -COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="Eine optionale Auswahl an durch Kommata getrennte Kategorienummern" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="Eine optionale Auswahl von Kategorienummern durch Kommata oder Spiegelstrich getrennt" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: Elo-Rangliste" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Auflistung der Spieler sortiert nach Elo-Wertung" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo-Rangliste" diff --git a/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini b/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini index 7b85a69..7d4373d 100644 --- a/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini +++ b/src/structure/administrator/language/en-GB/en-GB.com_sportsmanager.sys.ini @@ -21,12 +21,13 @@ COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TEAMS_JOINT="Teams in joint list COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CLUBS="Clubs" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_VENUES="Venues" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_APPOINTMENTS="Appointments" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_MATCH_RESCHEDULING="Match reschedulings" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE="Title" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_TITLE_DESC="Title which will be shows on top" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION="Description" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_DESCRIPTION_DESC="Description that will be shows below the titel (IMPORTANT: if html tags are used, special characters must be maskeraded)" COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES="Categories" -COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="An optional selection of category numbers seperated by commas" +COM_SPORTSMANAGER_LAYOUT_GENERAL_CONTENT_OPTION_CATEGORIES_DESC="An optional selection of category numbers seperated by commas or bullet point" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_TITLE="Layout: elo ranking" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_DESC="Listing of players sorted by elo rating" COM_SPORTSMANAGER_LAYOUT_ELO_RANKING_OPTION_ELO_RANKING="Elo ranking" diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 1bd5953..59e6d65 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -23,7 +23,9 @@ function UhrzeitWandlerDE(string $input): string { $formats = [ 'Y-m-d H:i', 'd.m.Y H:i', + 'j.n.Y H:i', 'd.m.Y H:i:s', + 'j.n.Y H:i:s', ]; foreach ($formats as $format) { @@ -61,6 +63,78 @@ function detectFileEncoding(string $filename): string { return $encoding ?: 'UTF-8'; // Fallback auf UTF-8 } +// Verarbeitung von Vorlagen +function renderTemplate($template, $vars = []): string +{ + + // 1. IF_NOT mit optionalem ELSE + $template = preg_replace_callback( + '/\{IF_NOT ([A-Z0-9_]+)\}(.*?)((\{ELSE\}(.*?))?)\{END_IF\}/si', + function($m) use ($vars) { + $var = $m[1]; + $ifText = $m[2]; + $elseText = $m[5] ?? ''; + + if (empty($vars[$var])) { + return $ifText; + } else { + return $elseText; + } + }, + $template + ); + + // 2. IF mit optionalem ELSE + $template = preg_replace_callback( + '/\{IF ([A-Z0-9_]+)\}(.*?)((\{ELSE\}(.*?))?)\{END_IF\}/si', + function($m) use ($vars) { + $var = $m[1]; + $ifText = $m[2]; + $elseText = $m[5] ?? ''; + + if (!empty($vars[$var])) { + return $ifText; + } else { + return $elseText; + } + }, + $template + ); + + // 3. Einzelne Variablen ersetzen (muss immer am Ende bleiben!!!) + return preg_replace_callback( + '/\{([A-Z0-9_]+)\}/i', + function($m) use ($vars) { + $var = $m[1]; + return $vars[$var] ?? ""; + }, + $template + ); +} + +function CSVfromArray($rows,$dateiname) +{ + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + + $data = ""; + $trennzeichen = ";"; + $header = ""; + + $header .= implode(';', array_keys($rows[0])); + foreach ($rows as $row) { + $data .= implode(';', $row)."\n"; + } + + echo $header . "\n" . utf8_decode(trim($data)); + + die(); +} + function adminUebersicht(): void { $db = getDatabase(); @@ -684,6 +758,7 @@ function adminEinstellungen(): void $verband_anzeigen = $jInput->get('verband_anzeigen', 0, 'INT'); $spalte_mitglieder_zeigen = $jInput->get('spalte_mitglieder_zeigen', 0, 'INT'); $turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT'); + $ordnungsstrafen_verwenden = $jInput->get('ordnungsstrafen_verwenden', 0, 'INT'); $termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT'); $enableEmailReminders = $jInput->get('enable_email_reminders', 0, 'INT'); @@ -763,6 +838,14 @@ function adminEinstellungen(): void die($db->stderr(true)); } + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ordnungsstrafen_verwenden'" + . ", wert = '$ordnungsstrafen_verwenden'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $query = "REPLACE #__sportsmanager_einstellungen" . "\n SET name = 'ansprechpartner_ausblenden'" . ", wert = '$ansprechpartner_ausblenden'"; @@ -3832,6 +3915,9 @@ function adminEditSpielort(): void $ortsname = $db->escape(trim($jInput->get('ortsname', '', 'RAW'))); $ortsteil = $db->escape(trim($jInput->get('ortsteil', '', 'RAW'))); $url = $db->escape(trim($jInput->get('url', '', 'RAW'))); + $telefon = $db->escape(trim($jInput->get('telefon', '', 'RAW'))); + $email = $db->escape(trim($jInput->get('email', '', 'RAW'))); + $ruhetage = $db->escape(trim($jInput->get('ruhetage', '', 'RAW'))); $beschreibung = $db->escape(trim($jInput->get('beschreibung', '', 'RAW'))); $status = $jInput->get('status', 0, 'INT'); @@ -3840,8 +3926,8 @@ function adminEditSpielort(): void } if ($id == 0) { - $query = "INSERT INTO #__sportsmanager_spielort (name, strasse, plz, ortsname, ortsteil, url, beschreibung, status)" - . "\n VALUES ('$name', '$strasse', '$plz', '$ortsname', '$ortsteil', '$url', '$beschreibung', '$status');"; + $query = "INSERT INTO #__sportsmanager_spielort (name, strasse, plz, ortsname, ortsteil, url, telefon, email, ruhetage, beschreibung, status)" + . "\n VALUES ('$name', '$strasse', '$plz', '$ortsname', '$ortsteil', '$url', '$telefon', '$email', '$ruhetage', '$beschreibung', '$status');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -3855,6 +3941,9 @@ function adminEditSpielort(): void . "\n ortsname = '$ortsname'," . "\n ortsteil = '$ortsteil'," . "\n url = '$url'," + . "\n telefon = '$telefon'," + . "\n email = '$email'," + . "\n ruhetage = '$ruhetage'," . "\n beschreibung = '$beschreibung'," . "\n status = '$status'" . "\n WHERE spielort_id = $id"; @@ -4486,6 +4575,637 @@ function adminEditTeamspielmodus(): void redirectSportsManagerURL('&task=admin_teamspiel_modi'); } +function adminSpielverlegungen(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $filter_status = $jInput->get('filter_status', '', 'RAW'); + $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $saisons = loadObjectList($db, $query); + + if (empty($filter_saison_id)) + $filter_saison_id = $saisons[0]->saison_id; + + if (empty($filter_status)) + $filter_status = "offen,genehmigt,abgelehnt"; + + $query = "SELECT t1.begegnung_historie_id AS beantragt_id, t1.begegnung_id AS begegnung_id," + . "\n t1.eingetragen AS beantragt, t1.kommentar AS Begruendung_beantragt, t1.zeitpunkt AS Termin_alt," + . "\n t1.team_id as beantragt_verein, t5.bezeichnung AS Liga," + . "\n t3.teamname AS Heim, t4.teamname AS Gast, t6.teamname AS beantragt_von, 'offen' AS status" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id" + . "\n WHERE t1.aktion = 2" + . "\n AND t5.saison_id = '$filter_saison_id'" + . "\n ORDER BY t1.begegnung_id, t1.zeitpunkt ASC;"; + $spielverlegungen = loadObjectList($db, $query); + + $last_id = ""; + foreach ($spielverlegungen as $key => $spielverlegung) { + if ($spielverlegung->begegnung_id == $last_id) { + unset($spielverlegungen[$key]); + } else { + $last_id = $spielverlegung->begegnung_id; + + $query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt," + . "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 1 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $genehmigt = loadObjectList($db, $query); + + if (!empty($genehmigt)) { + $spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id; + $spielverlegung->genehmigt = $genehmigt[0]->genehmigt; + $spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu; + $spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von; + $spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein; + $spielverlegung->status = "genehmigt"; + } else { + $spielverlegung->genehmigt_id = ""; + $spielverlegung->genehmigt = ""; + $spielverlegung->Termin_neu = ""; + $spielverlegung->genehmigt_von = ""; + $spielverlegung->genehmigt_verein = ""; + } + + $query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt," + . "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein," + . "\n t1.kommentar AS Begruendung_abgelehnt" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 10 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $abgelehnt = loadObjectList($db, $query); + + if (!empty($abgelehnt)) { + $spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id; + $spielverlegung->abgelehnt = $abgelehnt[0]->abgelehnt; + $spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von; + $spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein; + $spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt; + $spielverlegung->status = "abgelehnt"; + } else { + $spielverlegung->abgelehnt_id = ""; + $spielverlegung->abgelehnt = ""; + $spielverlegung->abgelehnt_von = ""; + $spielverlegung->abgelehnt_verein = ""; + $spielverlegung->Begruendung_abgelehnt = ""; + } + } + } + + HTML_sportsmanager_admin::adminSpielverlegungen($spielverlegungen,$saisons,$filter_saison_id); +} + +function adminEditSpielverlegung(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $begegnung_id = $jInput->get('begegnung_id', 0, 'INT'); + $beantragt_id = 0; + $genehmigt_id = 0; + $abgelehnt_id = 0; + + if (empty($begegnung_id)) + redirectSportsManagerURL('&task=admin_spielverlegungen', 'Missing id'); + + // Checken, ob für diese ID schon eine Verlegung existiert + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n WHERE begegnung_id = '$begegnung_id' AND aktion = '2'" + . "\n ORDER BY eingetragen ASC LIMIT 1;"; + $ergebnis = loadObjectList($db, $query); + if (!empty($ergebnis)) + $beantragt_id = $ergebnis[0]->begegnung_historie_id; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n WHERE begegnung_id = '$begegnung_id' AND aktion = '1'" + . "\n ORDER BY eingetragen DESC LIMIT 1;"; + $ergebnis = loadObjectList($db, $query); + if (!empty($ergebnis)) + $genehmigt_id = $ergebnis[0]->begegnung_historie_id; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n WHERE begegnung_id = '$begegnung_id' AND aktion = '10'" + . "\n ORDER BY eingetragen DESC LIMIT 1;"; + $ergebnis = loadObjectList($db, $query); + if (!empty($ergebnis)) + $abgelehnt_id = $ergebnis[0]->begegnung_historie_id; + + $beantragt = []; + if (!empty($beantragt_id)){ + $query = "SELECT" + . "\n CONCAT(t3.teamname, ' - ', t4.teamname, ' (', t5.bezeichnung, ')') AS Begegnung," + . "\n t2.heim_team_id, t2.gast_team_id," + . "\n IF (ISNULL(t1.verantwortlich_team_id), 0, verantwortlich_team_id) AS beantragt_von_id," + . "\n t2.begegnung_id AS begegnung_id, t5.bezeichnung AS Liga, t3.teamname AS Heim, t4.teamname AS Gast," + . "\n t1.zeitpunkt AS Termin_alt, t1.begegnung_historie_id AS beantragt_id, t6.teamname AS beantragt_von," + . "\n t1.eingetragen AS beantragt_am, t1.kommentar AS Begruendung_beantragt," + . "\n t1.team_id AS beantragt_verein, 'offen' AS status" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id" + . "\n WHERE t1.aktion = 2" + . "\n AND t1.begegnung_historie_id = '$beantragt_id'"; + $beantragt = loadObjectList($db, $query); + $spielverlegung = $beantragt[0]; + } else + if ($begegnung_id != 0){ + $query = "SELECT" + . "\n CONCAT(t3.teamname, ' - ', t4.teamname, ' (', t5.bezeichnung, ')') AS Begegnung," + . "\n t2.begegnung_id AS begegnung_id, t5.bezeichnung AS Liga, t3.teamname AS Heim," + . "\n t4.teamname AS Gast, t2.zeitpunkt AS Termin_alt," + . "\n t2.heim_team_id, t2.gast_team_id" + . "\n FROM #__sportsmanager_begegnung AS t2" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n WHERE t2.begegnung_id = '$begegnung_id'"; + $beantragt = loadObjectList($db, $query); + $spielverlegung = $beantragt[0]; + $spielverlegung->beantragt_id = ""; + $spielverlegung->beantragt_von = ""; + $spielverlegung->beantragt_von_id = 0; + $spielverlegung->beantragt_am = ""; + $spielverlegung->Begruendung_beantragt = ""; + $spielverlegung->beantragt_verein = ""; + $spielverlegung->status = "offen"; + } + + if (empty($spielverlegung)) + redirectSportsManagerURL('&task=admin_spielverlegungen', 'Wrong id'); + + $genehmigt = []; + if (!empty($genehmigt_id)){ + $query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt_am," + . "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.begegnung_historie_id = '$genehmigt_id'"; + $genehmigt = loadObjectList($db, $query); + } + if (!empty($genehmigt)) { + $spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id; + $spielverlegung->genehmigt_am = $genehmigt[0]->genehmigt_am; + $spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu; + $spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von; + $spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein; + $spielverlegung->status = "genehmigt"; + } else { + $spielverlegung->genehmigt_id = ""; + $spielverlegung->genehmigt_am = ""; + $spielverlegung->Termin_neu = ""; + $spielverlegung->genehmigt_verein = ""; + $spielverlegung->genehmigt_von = ""; + } + + $abgelehnt = []; + if ($abgelehnt != 0){ + $query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt_am," + . "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein," + . "\n t1.kommentar AS Begruendung_abgelehnt" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.begegnung_historie_id = '$abgelehnt_id'"; + $abgelehnt = loadObjectList($db, $query); + } + if (!empty($abgelehnt)) { + $spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id; + $spielverlegung->abgelehnt_am = $abgelehnt[0]->abgelehnt_am; + $spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von; + $spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein; + $spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt; + $spielverlegung->status = "abgelehnt"; + } else { + $spielverlegung->abgelehnt_id = ""; + $spielverlegung->abgelehnt_am = ""; + $spielverlegung->abgelehnt_von = ""; + $spielverlegung->abgelehnt_verein = ""; + $spielverlegung->Begruendung_abgelehnt = ""; + + } + + $teams[0] = "Verband"; + $teams[$spielverlegung->heim_team_id] = $spielverlegung->Heim; + $teams[$spielverlegung->gast_team_id] = $spielverlegung->Gast; + + HTML_sportsmanager_admin::adminEditSpielverlegung($spielverlegung,$teams); +} + +#[NoReturn] function adminSaveSpielverlegung(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spielverlegungen'); + } + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); + + $begegnung_id = $jInput->get('begegnung_id', 0, 'INT'); + $beantragt_id = $jInput->get('beantragt_id', 0, 'INT'); + $genehmigt_id = $jInput->get('genehmigt_id', 0, 'INT'); + $abgelehnt_id = $jInput->get('abgelehnt_id', 0, 'INT'); + $beantragt_verein = $jInput->get('beantragt_verein', 0, 'INT'); + $Termin_alt = $db->escape(trim($jInput->get('Termin_alt', '', 'RAW'))); + $Termin_neu = $db->escape(trim($jInput->get('Termin_neu', '', 'RAW'))); + $Begruendung_beantragt = $db->escape(trim($jInput->get('Begruendung_beantragt', '', 'RAW'))); + + $Termin_neu = UhrzeitWandlerDE($Termin_neu); + + if (!empty($Termin_neu) && !validateDate($Termin_neu, $format = 'Y-m-d H:i:s')) + redirectSportsManagerURL('&task=admin_spielverlegungen', Text::_('COM_SPORTSMANAGER_NOT_VALID_TIME')); + + if ($beantragt_id == 0){ + $query = "INSERT INTO #__sportsmanager_begegnung_historie" + . "\n (begegnung_historie_id, begegnung_id, aktion, zeitpunkt, user_id, team_id, kommentar, eingetragen)" + . "\n VALUES (NULL, $begegnung_id, 2, '$Termin_alt', $user_id, " . ($beantragt_verein ? $beantragt_verein : 'NULL') . ", '$Begruendung_beantragt', NOW());"; + } else { + $query = "UPDATE #__sportsmanager_begegnung_historie" + . "\n SET user_id = '$user_id'," + . "\n kommentar = '$Begruendung_beantragt'," + . "\n team_id = " . ($beantragt_verein ? $beantragt_verein : 'NULL') + . "\n WHERE begegnung_historie_id = $beantragt_id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + if ($genehmigt_id == 0 AND !empty($Termin_neu)){ + $query = "INSERT INTO #__sportsmanager_begegnung_historie" + . "\n (begegnung_historie_id, begegnung_id, aktion, zeitpunkt, user_id, team_id, eingetragen)" + . "\n VALUES (NULL, $begegnung_id, 1, '$Termin_neu', $user_id, NULL, NOW());"; + } + else if ($genehmigt_id != 0 AND !empty($Termin_neu)){ + $query = "UPDATE #__sportsmanager_begegnung_historie" + . "\n SET user_id = '$user_id'," + . "\n zeitpunkt = '$Termin_neu'," + . "\n eingetragen = NOW()" + . "\n WHERE begegnung_historie_id = $genehmigt_id;"; + } + else { + $query = "DELETE FROM #__sportsmanager_begegnung_historie" + . "\n WHERE begegnung_id = $begegnung_id AND aktion = 1;"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = '" . ($Termin_neu ? $Termin_neu : $Termin_alt) . "'" + . "\n WHERE begegnung_id = $begegnung_id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spielverlegungen'); +} + +#[NoReturn] function adminRemoveSpielverlegung(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(); + + $begegnung_id = $jInput->get('id', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_begegnung_historie" + . "\n WHERE begegnung_id = $begegnung_id AND aktion = 2;"; + $ergebnis = loadObjectList($db, $query); + $zeitpunkt = $ergebnis[0]->zeitpunkt; + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = '$zeitpunkt'" + . "\n WHERE begegnung_id = $begegnung_id;"; + $db->setQuery($query); + if (!$db->execute()) {die($db->stderr(true));} + + $query = "DELETE FROM #__sportsmanager_begegnung_historie" + . "\n WHERE begegnung_id = $begegnung_id AND aktion IN (0,1,2,3,10);"; + $db->setQuery($query); + if (!$db->execute()) {die($db->stderr(true));} + + redirectSportsManagerURL('&task=admin_spielverlegungen'); +} + +#[NoReturn] function adminExportSpielverlegungen(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $filter_status = $jInput->get('filter_status', '', 'RAW'); + $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $saisons = loadObjectList($db, $query); + + if (empty($filter_saison_id)) + $filter_saison_id = $saisons[0]->saison_id; + + if (empty($filter_status)) + $filter_status = "offen,genehmigt,abgelehnt"; + + $query = "SELECT t1.begegnung_historie_id AS beantragt_id, t1.begegnung_id AS begegnung_id," + . "\n t1.eingetragen AS beantragt, t1.kommentar AS Begruendung_beantragt, t1.zeitpunkt AS Termin_alt," + . "\n t1.team_id as beantragt_verein, t5.bezeichnung AS Liga, t2.spieltag AS Spieltag_Nr," + . "\n t3.teamname AS Heim, t4.teamname AS Gast, t6.teamname AS beantragt_von, 'offen' AS status" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id" + . "\n WHERE t1.aktion = 2" + . "\n AND t5.saison_id = '$filter_saison_id'" + . "\n ORDER BY t1.begegnung_id, t1.zeitpunkt ASC;"; + $spielverlegungen = loadObjectList($db, $query); + + $last_id = ""; + foreach ($spielverlegungen as $key => $spielverlegung) { + if ($spielverlegung->begegnung_id == $last_id) { + unset($spielverlegungen[$key]); + } else { + $last_id = $spielverlegung->begegnung_id; + + $query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt," + . "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 1 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $genehmigt = loadObjectList($db, $query); + + if (!empty($genehmigt)) { + $spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id; + $spielverlegung->genehmigt = $genehmigt[0]->genehmigt; + $spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu; + $spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von; + $spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein; + $spielverlegung->status = "genehmigt"; + } else { + $spielverlegung->genehmigt_id = ""; + $spielverlegung->genehmigt = ""; + $spielverlegung->Termin_neu = ""; + $spielverlegung->genehmigt_von = ""; + $spielverlegung->genehmigt_verein = ""; + } + + $query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt," + . "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein," + . "\n t1.kommentar AS Begruendung_abgelehnt" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 10 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $abgelehnt = loadObjectList($db, $query); + + if (!empty($abgelehnt)) { + $spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id; + $spielverlegung->abgelehnt = $abgelehnt[0]->abgelehnt; + $spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von; + $spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein; + $spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt; + $spielverlegung->status = "abgelehnt"; + } else { + $spielverlegung->abgelehnt_id = ""; + $spielverlegung->abgelehnt = ""; + $spielverlegung->abgelehnt_von = ""; + $spielverlegung->abgelehnt_verein = ""; + $spielverlegung->Begruendung_abgelehnt = ""; + } + } + } + + $rows = []; + $zeile = 0; + foreach ($spielverlegungen AS $spielverlegung) + { + $rows[$zeile]['begegnung_id'] = $spielverlegung->begegnung_id; + $rows[$zeile]['Liga'] = $spielverlegung->Liga; + $rows[$zeile]['Spieltag_Nr'] = $spielverlegung->Spieltag_Nr; + $rows[$zeile]['Termin_alt'] = $spielverlegung->Termin_alt; + $rows[$zeile]['Termin_neu'] = $spielverlegung->Termin_neu; + $rows[$zeile]['Heim'] = $spielverlegung->Heim; + $rows[$zeile]['Gast'] = $spielverlegung->Gast; + $rows[$zeile]['Begruendung'] = $spielverlegung->Begruendung_beantragt; + $rows[$zeile]['beantragt_von'] = $spielverlegung->beantragt_von; + $zeile++; + } + + CSVfromArray($rows,"Spielverlegungen.csv"); +} + +function adminSpielverlegungMailen(): void +{ + $db = getDatabase(); + $app = Factory::getContainer()->get(SiteApplication::class); + $jInput = $app->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : $app->getIdentity()->id); + $query = "SELECT name, email FROM #__users WHERE id = '$user_id';"; + $Benutzer = loadObjectList($db, $query); + + $begegnung_id = $jInput->get('id', 0, 'INT'); + $beantragt_id = 0; + $genehmigt_id = 0; + + if (empty($begegnung_id)) + redirectSportsManagerURL('&task=admin_spielverlegungen', 'Missing id'); + + if ($jInput->get('cancel', false, 'BOOL')) + redirectSportsManagerURL('&task=admin_spielverlegungen'); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n WHERE begegnung_id = '$begegnung_id' AND aktion = '2'" + . "\n ORDER BY eingetragen ASC LIMIT 1;"; + $ergebnis = loadObjectList($db, $query); + if (!empty($ergebnis)) + $beantragt_id = $ergebnis[0]->begegnung_historie_id; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n WHERE begegnung_id = '$begegnung_id' AND aktion = '1'" + . "\n ORDER BY eingetragen DESC LIMIT 1;"; + $ergebnis = loadObjectList($db, $query); + if (!empty($ergebnis)) + $genehmigt_id = $ergebnis[0]->begegnung_historie_id; + + $beantragt = []; + if (!empty($beantragt_id)){ + $query = "SELECT" + . "\n CONCAT(t3.teamname, ' - ', t4.teamname, ' (', t5.bezeichnung, ')') AS Begegnung," + . "\n t2.heim_team_id, t2.gast_team_id, t7.verein_id AS heim_verein_id, t8.verein_id AS gast_verein_id," + . "\n IF (ISNULL(t1.verantwortlich_team_id), 0, verantwortlich_team_id) AS beantragt_von_id," + . "\n t2.begegnung_id AS begegnung_id, t5.bezeichnung AS Liga, t3.teamname AS Heim, t4.teamname AS Gast," + . "\n t1.zeitpunkt AS Termin_alt, t1.begegnung_historie_id AS beantragt_id, t6.teamname AS beantragt_von," + . "\n t1.eingetragen AS beantragt_am, t1.kommentar AS Begruendung_beantragt," + . "\n t1.team_id AS beantragt_verein, 'offen' AS status," + . "\n if (t2.spieltag_titel = '', CONCAT(t2.spieltag, '. Spieltag'), t2.spieltag_titel) AS Spieltag " + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t7 ON t7.verein_id = t3.verein_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t8 ON t8.verein_id = t4.verein_id" + . "\n WHERE t1.aktion = 2" + . "\n AND t1.begegnung_historie_id = '$beantragt_id'"; + $beantragt = loadObjectList($db, $query); + $spielverlegung = $beantragt[0]; + } else + if ($begegnung_id != 0){ + $query = "SELECT" + . "\n CONCAT(t3.teamname, ' - ', t4.teamname, ' (', t5.bezeichnung, ')') AS Begegnung," + . "\n t2.begegnung_id AS begegnung_id, t5.bezeichnung AS Liga, t3.teamname AS Heim," + . "\n t4.teamname AS Gast, t2.zeitpunkt AS Termin_alt," + . "\n t2.heim_team_id, t2.gast_team_id" + . "\n FROM #__sportsmanager_begegnung AS t2" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n WHERE t2.begegnung_id = '$begegnung_id'"; + $beantragt = loadObjectList($db, $query); + $spielverlegung = $beantragt[0]; + $spielverlegung->beantragt_id = ""; + $spielverlegung->beantragt_von = ""; + $spielverlegung->beantragt_von_id = 0; + $spielverlegung->beantragt_am = ""; + $spielverlegung->Begruendung_beantragt = ""; + $spielverlegung->beantragt_verein = ""; + $spielverlegung->status = "offen"; + } + + if (empty($spielverlegung)) + redirectSportsManagerURL('&task=admin_spielverlegungen', 'Wrong id'); + + $genehmigt = []; + if (!empty($genehmigt_id)){ + $query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt_am," + . "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.begegnung_historie_id = '$genehmigt_id'"; + $genehmigt = loadObjectList($db, $query); + } + if (!empty($genehmigt)) { + $spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id; + $spielverlegung->genehmigt_am = $genehmigt[0]->genehmigt_am; + $spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu; + $spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von; + $spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein; + $spielverlegung->status = "genehmigt"; + } else { + $spielverlegung->genehmigt_id = ""; + $spielverlegung->genehmigt_am = ""; + $spielverlegung->Termin_neu = ""; + $spielverlegung->genehmigt_verein = ""; + $spielverlegung->genehmigt_von = ""; + } + + + $query = "SELECT nachname, vorname, email" + . "\n FROM #__sportsmanager_vereinsansprechpartner" + . "\n WHERE verein_id IN ('$spielverlegung->heim_verein_id', '$spielverlegung->gast_verein_id')" + . "\n GROUP BY email" + . "\n ORDER BY nachname, vorname;"; + $vereinsansprechpartner = loadObjectList($db, $query); + + $var["Ansprechpartner"] = ""; + $to = ""; + + foreach ($vereinsansprechpartner AS $ansprechpartner){ + if ($var["Ansprechpartner"] == "") + $var["Ansprechpartner"] = $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + else + $var["Ansprechpartner"] .= ", " . $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + if ($to == "") + $to = $ansprechpartner->email; + else + $to .= ";" . $ansprechpartner->email; + } + + $var['Heim'] = $spielverlegung->Heim; + $var['Gast'] = $spielverlegung->Gast; + $var['Liga'] = $spielverlegung->Liga; + $var['Spieltag'] = $spielverlegung->Spieltag; + $var['Antragsteller'] = $spielverlegung->beantragt_von; + $var['Alter_Termin'] = (new DateTime($spielverlegung->Termin_alt))->format("d.m.Y H:i"); + $var['Neuer_Termin'] = $spielverlegung->Termin_neu ? (new DateTime($spielverlegung->Termin_neu))->format("d.m.Y H:i") : 'offen'; + $var['Begruendung'] = $spielverlegung->Begruendung_beantragt; + $var['Absender'] = $Benutzer[0]->name; + + $query = "SELECT * FROM #__sportsmanager_email_vorlagen WHERE vorlage = 'Spielverlegung';"; + $vorlagen = loadObjectList($db, $query); + $template = $vorlagen[0]->email_text; + + $cc = $vorlagen[0]->cc; + $bcc = $vorlagen[0]->bcc; + $subject = "Spielverlegung " . $spielverlegung->Heim . " gegen " . $spielverlegung->Gast; + $message = renderTemplate($template, $var); + $backtomail = "admin_spielverlegungen_mailen&id=" . $spielverlegung->begegnung_id; + $backtosender = "admin_spielverlegungen"; + + $vorlage = new stdClass(); + $vorlage->id = $spielverlegung->spielverlegung_id; + $vorlage->name = 'Spielverlegung'; + + HTML_sportsmanager_admin::adminMailto($to,$cc,$bcc,$subject,$message,$backtomail,$backtosender,$vorlage); +} + function adminVerschiebenModi(): void { $db = getDatabase(); @@ -4543,6 +5263,9 @@ function adminEditVerschiebenModus(): void $termine_minimal = $jInput->get('termine_minimal', 1, 'INT'); $termine_maximal = $jInput->get('termine_maximal', 3, 'INT'); $ablehnen = $jInput->get('ablehnen', 0, 'INT'); + $begruendung_erforderlich = $jInput->get('begruendung_erforderlich', 0, 'INT'); + $vereine_berechtigt = $jInput->get('vereine_berechtigt', 0, 'INT'); + $verband_berechtigt = $jInput->get('verband_berechtigt', 0, 'INT'); if ($termine_minimal > 0 && $termine_maximal > 0 && $termine_minimal > $termine_maximal) { $t = $termine_minimal; @@ -4551,7 +5274,11 @@ function adminEditVerschiebenModus(): void } if ($id == 0) - $query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen) VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal', '$termine_maximal', '$ablehnen');"; + $query = "INSERT INTO #__sportsmanager_verschieberegel" + . "\n (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal," + . "\n termine_maximal, ablehnen, begruendung_erforderlich, vereine_berechtigt, verband_berechtigt)" + . "\n VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal'," + . "\n '$termine_maximal', '$ablehnen', '$begruendung_erforderlich', '$vereine_berechtigt', '$verband_berechtigt');"; else { $query = "UPDATE #__sportsmanager_verschieberegel" . "\n SET bezeichnung = '$bezeichnung'," @@ -4560,7 +5287,10 @@ function adminEditVerschiebenModus(): void . "\n vorlaufzeit_tage = '$vorlaufzeit_tage'," . "\n termine_minimal = '$termine_minimal'," . "\n termine_maximal = '$termine_maximal'," - . "\n ablehnen = '$ablehnen'" + . "\n ablehnen = '$ablehnen'," + . "\n begruendung_erforderlich = '$begruendung_erforderlich'," + . "\n vereine_berechtigt = '$vereine_berechtigt'," + . "\n verband_berechtigt = '$verband_berechtigt'" . "\n WHERE verschieberegel_id = $id"; } $db->setQuery($query); @@ -6083,6 +6813,752 @@ function adminEditSaison(): void redirectSportsManagerURL('&task=admin_saisons'); } +function adminOrdnungsstrafeMailen(): void +{ + + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $id = $jInput->get('id', 0, 'INT'); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + keinZugriff(true); + + $query = "SELECT *, t2.verstoss, t2.paragraph_spo, t2.paragraph_go, t2.zusatztext, t10.regelwerk," + . "\n t4.teamname, t9.verein_id, t9.vereinsname, t8.name AS aussteller, t1.ausstelldatum, t1.ordnungsstrafen_id," + . "\n t7.bezeichnung as veranstaltung, CONCAT(t3.spieltag, '. Spieltag') as spieltag, t7.saison_id," + . "\n t3.spieltag_titel, DATE_FORMAT(t3.zeitpunkt, '%d.%m.%Y') AS spieldatum," + . "\n CONCAT(t5.teamname, ' - ', t6.teamname) AS begegnung," + . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS gebuehr" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_verstoesse AS t2 ON t1.verstoesse_id = t2.verstoesse_id" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t3 ON t1.begegnung_id = t3.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_regelwerke AS t10 ON t2.regelwerke_id = t10.regelwerke_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t3.heim_team_id = t5.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t3.gast_team_id = t6.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t1.ordnungsstrafen_id = '$id'"; + + $rows = loadObjectList($db, $query); + $ordnungsstrafe = $rows[0]; + + $query = "SELECT nachname, vorname, email" + . "\n FROM #__sportsmanager_vereinsansprechpartner" + . "\n WHERE verein_id = '" . $rows[0]->verein_id . "'" + . "\n GROUP BY email" + . "\n ORDER BY nachname, vorname;"; + $vereinsansprechpartner = loadObjectList($db, $query); + + $var["Ansprechpartner"] = ""; + $to = ""; + + foreach ($vereinsansprechpartner AS $ansprechpartner){ + if ($var["Ansprechpartner"] == "") + $var["Ansprechpartner"] = $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + else + $var["Ansprechpartner"] .= ", " . $ansprechpartner->vorname . " " . $ansprechpartner->nachname; + if ($to == "") + $to = $ansprechpartner->email; + else + $to .= ";" . $ansprechpartner->email; + } + + $query = "SELECT * FROM #__sportsmanager_email_vorlagen WHERE vorlage = 'Ordnungsstrafe';"; + $vorlagen = loadObjectList($db, $query); + $template = $vorlagen[0]->email_text; + + $var["SPO"] = $ordnungsstrafe->paragraph_spo; + $var["GO"] = $ordnungsstrafe->paragraph_go; + $var["Regelwerk"] = $ordnungsstrafe->regelwerk; + $var["Verstoss"] = $ordnungsstrafe->verstoss; + $var["Begegnung"] = $ordnungsstrafe->begegnung; + $var["Liga"] = $ordnungsstrafe->veranstaltung; + $var["Spieltag"] = $ordnungsstrafe->spieltag; + $var["Spieldatum"] = $ordnungsstrafe->spieldatum; + $var["Verein"] = $ordnungsstrafe->vereinsname; + $var["Gebuehr"] = $ordnungsstrafe->gebuehr; + $var["Zusatztext"] = $ordnungsstrafe->zusatztext; + $var["Erweitert"] = $ordnungsstrafe->weitere_angaben; + $var["Aussteller"] = $ordnungsstrafe->aussteller; + + $cc = $vorlagen[0]->cc; + $bcc = $vorlagen[0]->bcc; + $subject = $vorlagen[0]->betreff; + $message = renderTemplate($template, $var); + $backtomail = "admin_ordnungsstrafe_mailen&id=" . $id; + $backtosender = "admin_ordnungsstrafen"; + + $vorlage = new stdClass(); + $vorlage->id = $ordnungsstrafe->ordnungsstrafen_id; + $vorlage->name = 'Ordnungsstrafe'; + + HTML_sportsmanager_admin::adminMailto($to,$cc,$bcc,$subject,$message,$backtomail,$backtosender,$vorlage); +} + +function sendJoomlaMail(): void +{ + $db = getDatabase(); + $app = Factory::getContainer()->get(SiteApplication::class); + $jInput = $app->input; + + $back = $db->escape(trim($jInput->get('back', '', 'RAW'))); + $to = $db->escape(trim($jInput->get('an', '', 'RAW'))); + $cc = $db->escape(trim($jInput->get('cc', '', 'RAW'))); + $bcc = $db->escape(trim($jInput->get('bcc', '', 'RAW'))); + $subject = $db->escape(trim($jInput->get('betreff', '', 'RAW'))); + $body = nl2br(trim($jInput->get('nachricht', '', 'RAW'))); + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : $app->getIdentity()->id); + $query = "SELECT name, email FROM #__users WHERE id = '$user_id';"; + $absender = loadObjectList($db, $query); + + // Joomla From-Adresse aus Konfiguration + $fromName = $absender[0]->name; + $fromEmail = $app->getCfg('mailfrom'); + + // Mailer erstellen über FactoryInterface + $mailer = Factory::getContainer() + ->get(MailerFactoryInterface::class) + ->createMailer(); + + // From setzen + $mailer->setSender([$fromEmail, $fromName]); + + // Hauptempfänger + $toAddresses = array_map('trim', explode(';', $to)); + foreach ($toAddresses as $recipient) { + if (!empty($recipient)) { + $mailer->addRecipient($recipient); + } + } + + // CC-Empfänger + $ccAddresses = array_map('trim', explode(';', $cc)); + foreach ($ccAddresses as $recipient) { + if (!empty($recipient)) { + $mailer->addCc($recipient); + } + } + + // BCC-Empfänger + $bccAddresses = array_map('trim', explode(';', $bcc)); + foreach ($bccAddresses as $recipient) { + if (!empty($recipient)) { + $mailer->addBcc($recipient); + } + } + + //Checkmail für Absender + $mailer->addBcc($absender[0]->email); + + // Betreff und Body + $mailer->setSubject($subject); + $mailer->setBody($body); + $mailer->isHtml(true); + + // Senden + $result = $mailer->send(); + + //return ($result === true) ? true : 'Fehler beim Versand: ' . $result->__toString(); + + if ($result === true) + redirectSportsManagerURL('&task=' . $back, Text::_('COM_SPORTSMANAGER_EMAIL_WAS_SEND')); + else + redirectSportsManagerURL('&task=' . $back, Text::_('COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND')); +} + +function adminOrdnungsstrafen(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(); + + $filter['saison'] = $jInput->get('filter_saison_id', 0, 'INT'); + $filter['verein'] = $jInput->get('filter_verein_id', 0, 'INT'); + $filter['veranstaltung'] = $jInput->get('filter_veranstaltung_id', 0, 'INT'); + $filter['aussteller'] = $jInput->get('filter_aussteller_id', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC;"; + $saisons = loadObjectList($db, $query); + + $query = "SELECT t7.veranstaltung_id, t7.bezeichnung" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n WHERE t7.veranstaltung_id <> '' " + . "\n GROUP BY t7.veranstaltung_id" + . "\n ORDER BY t7.bezeichnung"; + $veranstaltungen = loadObjectList($db, $query); + + $query = "SELECT t9.verein_id, t9.vereinsname" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n WHERE t9.verein_id <> '' " + . "\n GROUP BY t9.verein_id" + . "\n ORDER BY t9.vereinsname"; + $vereine = loadObjectList($db, $query); + + $query = "SELECT t8.id, t8.name" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t8.id <> '' " + . "\n GROUP BY t8.id" + . "\n ORDER BY t8.name"; + $aussteller = loadObjectList($db, $query); + + if (empty($filter['saison'])) + $filter['saison'] = $saisons[0]->saison_id; + if (!isset($filter['verein'])) + $filter['verein'] = 0; + if (!isset($filter['veranstaltung'])) + $filter['veranstaltung'] = 0; + if (!isset($filter['aussteller'])) + $filter['aussteller'] = 0; + + $query = "SELECT *, t2.verstoss, t4.teamname, t9.vereinsname, t8.name, t1.ausstelldatum," + . "\n CONCAT(t5.teamname, ' - ', t6.teamname, ' (', t7.bezeichnung, ')') AS begegnung," + . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS gebuehr," + . "\n if (t1.rechnungsdatum IS NOT NULL, 'Rechnung erstellt', if (t1.versendedatum IS NOT NULL, 'Versendet', 'ausgestellt')) AS status" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_verstoesse AS t2 ON t1.verstoesse_id = t2.verstoesse_id" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t3 ON t1.begegnung_id = t3.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t3.heim_team_id = t5.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t3.gast_team_id = t6.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n WHERE t7.saison_id = '" . $filter['saison'] . "'"; + if (!empty($filter['verein'])) + $query .= "\n AND t9.verein_id = '" . $filter['verein'] . "'"; + if (!empty($filter['veranstaltung'])) + $query .= "\n AND t7.veranstaltung_id = '" . $filter['veranstaltung'] . "'"; + if (!empty($filter['aussteller'])) + $query .= "\n AND t8.id = '" . $filter['aussteller'] . "'"; + $query .= "\n ORDER BY ordnungsstrafen_id"; + $rows = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminOrdnungsstrafen($rows,$saisons,$veranstaltungen,$vereine,$aussteller,$filter); +} + +function adminEditOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + $id = $jInput->get('id', 0, 'INT'); + $begegnungid = $jInput->get('begegnungid', 0, 'INT'); + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); + + if ($id == 0){ + $row = null; + } else { + $query = "SELECT t1.*, t2.name as aussteller, t3.name as versender, t4.name as rechnungssteller" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__users AS t2 ON t1.aussteller_id = t2.id" + . "\n LEFT JOIN #__users AS t3 ON t1.versender_id = t3.id" + . "\n LEFT JOIN #__users AS t4 ON t1.rechnungssteller_id = t4.id" + . "\n WHERE ordnungsstrafen_id = $id;"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + $begegnungid = $row->begegnung_id; + $user_id = $row->aussteller_id; + } + + if ($begegnungid == 0) + redirectSportsManagerURL('&task=admin_ordnungsstrafen', 'Missing id'); + + $query = "SELECT id, name FROM #__users WHERE id = '$user_id';"; + $aussteller = loadObjectList($db, $query); + + $query = "SELECT t1.begegnung_id, t1.heim_team_id, t1.gast_team_id, t1.gast_team_id," + . "\n t2.teamname AS heim_name, t3.teamname AS gast_name," + . "\n t1.zeitpunkt, t1.spieltag, t1.spieltag_titel, t1.spiel_nr, t4.saison_id," + . "\n t4.veranstaltung_id as veranstaltung_id, t4.bezeichnung AS veranstaltung, t4.regelwerke_id," + . "\n CONCAT(t2.teamname, ' - ', t3.teamname, ' (', t4.bezeichnung, ')') AS begegnung" + . "\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 t1.begegnung_id = $begegnungid;"; + $begegnungen = loadObjectList($db, $query); + + $query = "SELECT t1.verstoesse_id," + . "\n IF (t1.regelwerke_id = '0', t1.verstoss, CONCAT (t1.verstoss, ' (', t2.regelwerk, ')')) AS verstoss" + . "\n FROM #__sportsmanager_verstoesse AS t1" + . "\n LEFT JOIN #__sportsmanager_regelwerke AS t2 ON t1.regelwerke_id = t2.regelwerke_id "; + $query .= "WHERE zur_auswahl = 1 "; + if ($begegnungen[0]->regelwerke_id != 0) + $query .= "AND t1.regelwerke_id = '" . $begegnungen[0]->regelwerke_id . "' "; + $query .= "ORDER BY t1.regelwerke_id, t1.verstoesse_id;"; + $verstoesse = loadObjectList($db, $query); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($begegnungen[0]->veranstaltung_id)) + keinZugriff(); + + HTML_sportsmanager_admin::adminEditOrdnungsstrafe($row,$begegnungen[0],$verstoesse,$aussteller[0]); +} + +#[NoReturn] function adminSaveOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + } + + $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : Factory::getContainer()->get(SiteApplication::class)->getIdentity()->id); + $id = $jInput->get('id', 0, 'INT'); + $verstoesse_id = $jInput->get('verstoesse_id', 0, 'INT'); + $begegnung_id = $jInput->get('begegnung_id', 0, 'INT'); + $team_id = $jInput->get('team_id', 0, 'INT'); + $aussteller_id = $jInput->get('aussteller_id', 0, 'INT'); + $ausstelldatum = $db->escape(trim($jInput->get('ausstelldatum', '', 'RAW'))); + $multiplikator = $jInput->get('multiplikator', 0, 'INT'); + $weitere_angaben = $db->escape(trim($jInput->get('weitere_angaben', '', 'RAW'))); + + if ($jInput->get('save', false, 'BOOL')) { + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_ordnungsstrafen" + . "\n (ordnungsstrafen_id,verstoesse_id,begegnung_id,team_id,aussteller_id,ausstelldatum,multiplikator,weitere_angaben)" + . "\n VALUES (NULL,'$verstoesse_id','$begegnung_id','$team_id','$aussteller_id','$ausstelldatum','$multiplikator','$weitere_angaben');"; + } else { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET verstoesse_id = '$verstoesse_id'," + . "\n begegnung_id = '$begegnung_id'," + . "\n team_id = '$team_id'," + . "\n aussteller_id = '$aussteller_id'," + . "\n ausstelldatum = '$ausstelldatum'," + . "\n multiplikator = '$multiplikator'," + . "\n weitere_angaben = '$weitere_angaben'" + . "\n WHERE ordnungsstrafen_id = $id;"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_ordnungsstrafen&filter_saison_id='.$filter_saison_id); + } + + $query = ""; + if ($jInput->get('set_versender', '', 'RAW') == 'set') { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET versender_id = '$user_id'," + . "\n versendedatum = CURTIME()" + . "\n WHERE ordnungsstrafen_id = $id;"; + } + if ($jInput->get('set_versender', '', 'RAW') == 'reset') { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET versender_id = NULL," + . "\n versendedatum = NULL," + . "\n rechnungssteller_id = NULL," + . "\n rechnungsdatum = NULL" + . "\n WHERE ordnungsstrafen_id = $id;"; + } + if ($jInput->get('set_rechnung', '', 'RAW') == 'set') { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET rechnungssteller_id = '$user_id'," + . "\n rechnungsdatum = CURTIME()" + . "\n WHERE ordnungsstrafen_id = $id;"; + } + if ($jInput->get('set_rechnung', '', 'RAW') == 'reset') { + $query = "UPDATE #__sportsmanager_ordnungsstrafen" + . "\n SET rechnungssteller_id = NULL," + . "\n rechnungsdatum = NULL" + . "\n WHERE ordnungsstrafen_id = $id;"; + } + + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_ordnungsstrafe_edit&id='.$id); +} + +#[NoReturn] function adminRemoveOrdnungsstrafe(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(); + + $id = $jInput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_ordnungsstrafen WHERE ordnungsstrafen_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_ordnungsstrafen'); +} + +#[NoReturn] function adminExportOrdnungsstrafen(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + $filter['saison'] = $jInput->get('filter_saison_id', 0, 'INT'); + $filter['verein'] = $jInput->get('filter_verein_id', 0, 'INT'); + $filter['veranstaltung'] = $jInput->get('filter_veranstaltung_id', 0, 'INT'); + $filter['aussteller'] = $jInput->get('filter_aussteller_id', 0, 'INT'); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT t1.ordnungsstrafen_id AS ID, t3.begegnung_id AS Spiel_ID, t7.bezeichnung AS Liga," + . "\n t3.spieltag AS Spieltag, t9.vereinsname AS Verein, t2.verstoss AS Verstoss," + . "\n (t1.multiplikator * t2.gebuehr + t2.zusatzgebuehr) AS Gebuehr," + . "\n t8.name AS Aussteller, t1.ausstelldatum AS Ausstelldatum," + . "\n t10.name AS Versender, t1.versendedatum AS Versendedatum," + . "\n t11.name AS Rechnung, t1.rechnungsdatum AS Rechnungsdatum" + . "\n FROM #__sportsmanager_ordnungsstrafen AS t1" + . "\n LEFT JOIN #__sportsmanager_verstoesse AS t2 ON t1.verstoesse_id = t2.verstoesse_id" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t3 ON t1.begegnung_id = t3.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t1.team_id = t4.team_id" + . "\n LEFT JOIN #__sportsmanager_verein AS t9 ON t4.verein_id = t9.verein_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t3.heim_team_id = t5.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t3.gast_team_id = t6.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t4.veranstaltung_id = t7.veranstaltung_id" + . "\n LEFT JOIN #__users AS t8 ON t1.aussteller_id = t8.id" + . "\n LEFT JOIN #__users AS t10 ON t1.versender_id = t10.id" + . "\n LEFT JOIN #__users AS t11 ON t1.rechnungssteller_id = t11.id" + . "\n WHERE t7.saison_id = '" . $filter['saison'] . "'"; + if (!empty($filter['verein'])) + $query .= "\n AND t9.verein_id = '" . $filter['verein'] . "'"; + if (!empty($filter['veranstaltung'])) + $query .= "\n AND t7.veranstaltung_id = '" . $filter['veranstaltung'] . "'"; + if (!empty($filter['aussteller'])) + $query .= "\n AND t8.id = '" . $filter['aussteller'] . "'"; + $query .= "\n ORDER BY ordnungsstrafen_id"; + $rows = loadObjectList($db, $query); + + $dateiname = "Ordnungsstrafen.csv"; + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + + $data = ""; + $trennzeichen = ";"; + $spalte = 0; + $header = ""; + + foreach ($rows[0] as $field => $value) { + if ($spalte != 0) { + $header .= $trennzeichen; + } + $header .= $field; + $spalte++; + } + foreach ($rows as $row) { + $line = ''; + $spalte = 0; + foreach ($row as $value) { + if ($spalte != 0) { + $line .= $trennzeichen; + } + $line .= $value; + $spalte++; + } + $data .= trim($line) . "\n"; + } + + echo $header . "\n" . utf8_decode($data); + + die(); +} + +function adminRegelwerke(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_regelwerke.regelwerke_id = regelwerke_id), 1, 0) AS veranstaltungen," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_verstoesse WHERE #__sportsmanager_regelwerke.regelwerke_id = regelwerke_id), 1, 0) AS verstoesse" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $rows = loadObjectList($db, $query); + HTML_sportsmanager_admin::adminRegelwerke($rows); +} + +function adminEditRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_regelwerke WHERE regelwerke_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditRegelwerk($row); +} + +#[NoReturn] function adminSaveRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_regelwerke'); + } + + $id = $jInput->get('id', 0, 'INT'); + $regelwerk = $db->escape(trim($jInput->get('regelwerk', '', 'RAW'))); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_regelwerke (regelwerk) VALUES ('$regelwerk');"; + else { + $query = "UPDATE #__sportsmanager_regelwerke" + . "\n SET regelwerk = '$regelwerk'" + . "\n WHERE regelwerke_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_regelwerke'); +} + +#[NoReturn] function adminRemoveRegelwerk(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query ="SELECT IF(" + . "\n EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE regelwerke_id = $id)" + . "\n OR EXISTS(SELECT * FROM #__sportsmanager_verstoesse WHERE regelwerke_id = $id)," + . "\n 1, 0);"; + + if (loadResult($db, $query)) + redirectSportsManagerURL('&task=admin_regelwerke',Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_regelwerke WHERE regelwerke_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_regelwerke'); +} + +function adminVerstoesse(): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_verstoesse" + . "\n ORDER BY verstoesse_id"; + $rows = loadObjectList($db, $query); + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE #__sportsmanager_ordnungsstrafen.verstoesse_id = verstoesse_id), 1, 0) AS ordnungsstrafen" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $liste = loadObjectList($db, $query); + $regelwerke = []; + foreach($liste as $value){ + $regelwerke[$value->regelwerke_id] = $value->regelwerk; + } + HTML_sportsmanager_admin::adminVerstoesse($rows,$regelwerke); +} + +function adminEditVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_verstoesse WHERE verstoesse_id = $id"; + $rows = loadObjectList($db, $query); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE #__sportsmanager_ordnungsstrafen.verstoesse_id = verstoesse_id), 1, 0) AS ordnungsstrafen" + . "\n FROM #__sportsmanager_regelwerke" + . "\n ORDER BY regelwerke_id"; + $regelwerke = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminEditVerstoss($row,$regelwerke); +} + +#[NoReturn] function adminSaveVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verstoesse'); + } + + $id = $jInput->get('id', 0, 'INT'); + $regelwerke_id = $jInput->get('regelwerke_id', 0, 'INT'); + $paragraph_spo = $db->escape(trim($jInput->get('paragraph_spo', '', 'RAW'))); + $paragraph_go = $db->escape(trim($jInput->get('paragraph_go', '', 'RAW'))); + $verstoss = $db->escape(trim($jInput->get('verstoss', '', 'RAW'))); + $haupttext = $db->escape(trim($jInput->get('haupttext', '', 'RAW'))); + $zusatztext = $db->escape(trim($jInput->get('zusatztext', '', 'RAW'))); + $gebuehr = $jInput->get('gebuehr', 0, 'INT'); + $zusatzgebuehr = $jInput->get('zusatzgebuehr', 0, 'INT'); + $zur_auswahl = $jInput->get('zur_auswahl', 0, 'INT'); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_verstoesse" + . "\n (regelwerke_id,paragraph_spo,paragraph_go,verstoss,haupttext,zusatztext,gebuehr,zusatzgebuehr,zur_auswahl)" + . "\n VALUES ('$regelwerke_id','$paragraph_spo','$paragraph_go','$verstoss','$haupttext'," + . "\n '$zusatztext','$gebuehr','$zusatzgebuehr','$zur_auswahl');"; + else { + $query = "UPDATE #__sportsmanager_verstoesse" + . "\n SET regelwerke_id = '$regelwerke_id'," + . "\n paragraph_spo = '$paragraph_spo'," + . "\n paragraph_go = '$paragraph_go'," + . "\n verstoss = '$verstoss'," + . "\n haupttext = '$haupttext'," + . "\n zusatztext = '$zusatztext'," + . "\n gebuehr = '$gebuehr'," + . "\n zusatzgebuehr = '$zusatzgebuehr'," + . "\n zur_auswahl = '$zur_auswahl'" + . "\n WHERE verstoesse_id = $id"; + } + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verstoesse'); +} + +#[NoReturn] function adminRemoveVerstoss(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $id = $jInput->get('id', 0, 'INT'); + + $query ="SELECT IF(" + . "\n EXISTS(SELECT * FROM #__sportsmanager_ordnungsstrafen WHERE verstoesse_id = $id)," + . "\n 1, 0);"; + + if (loadResult($db, $query)) + redirectSportsManagerURL('&task=admin_verstoesse',Text::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_verstoesse WHERE verstoesse_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_verstoesse'); +} + +function adminEditEmailVorlage($vorlage): void +{ + $db = getDatabase(); + + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_email_vorlagen" + . "\n WHERE vorlage = '" . $vorlage . "'"; + $rows = loadObjectList($db, $query); + $row = $rows[0]; + + if ($vorlage == 'Ordnungsstrafe'){ + $vars = "Ansprechpartner, SPO, GO, Regelwerk, Verstoss, Begegnung, Liga, Spieltag, +
Spieldatum, Verein, Gebuehr, Zusatztext, Erweitert, Aussteller"; + $back = 'admin_ordnungsstrafen'; + } + if ($vorlage == 'Spielverlegung'){ + $vars = "Ansprechpartner, Heim, Gast, Liga, Spieltag, Antragsteller, +
Alter_Termin, Neuer_Termin, Begruendung, Absender"; + $back = 'admin_spielverlegungen'; + } + HTML_sportsmanager_admin::adminEditEmailVorlage($vorlage,$row,$vars,$back); +} + +function adminSaveEmailVorlage(): void +{ + $db = getDatabase(); + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + if (!benutzerZugriff("benutzerVeranstalterModerator")) + keinZugriff(); + + $back = $db->escape(trim($jInput->get('back', '', 'RAW'))); + + if ($jInput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . $back); + } + + $vorlage = $db->escape(trim($jInput->get('vorlage', '', 'RAW'))); + $betreff = $db->escape(trim($jInput->get('betreff', '', 'RAW'))); + $cc = $db->escape(trim($jInput->get('cc', '', 'RAW'))); + $bcc = $db->escape(trim($jInput->get('bcc', '', 'RAW'))); + $email_text = $db->escape(trim($jInput->get('email_text', '', 'RAW'))); + + $query = "UPDATE #__sportsmanager_email_vorlagen" + . "\n SET betreff = '$betreff'," + . "\n cc = '$cc'," + . "\n bcc = '$bcc'," + . "\n email_text = '$email_text'" + . "\n WHERE vorlage = '" . $vorlage . "'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . $back); +} + function adminEditVeranstaltung(): void { $db = getDatabase(); @@ -6104,6 +7580,8 @@ function adminEditVeranstaltung(): void $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; $veranstalter = loadObjectList($db, $query); + $query = "SELECT * FROM #__sportsmanager_regelwerke ORDER BY regelwerk"; + $regelwerke = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; $spielmodi = loadObjectList($db, $query); $query = "SELECT * FROM #__sportsmanager_verschieberegel ORDER BY bezeichnung"; // WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; @@ -6125,7 +7603,7 @@ function adminEditVeranstaltung(): void $query = "SELECT * FROM #__users ORDER BY name, username"; $users = loadObjectList($db, $query); - HTML_sportsmanager_admin::adminEditVeranstaltung($row, $veranstalter, $spielmodi, $verschieberegeln, $kategorien, $saisons, $users, $berechtigt_fuer_veranstaltung, $vorlage); + HTML_sportsmanager_admin::adminEditVeranstaltung($row, $veranstalter, $regelwerke, $spielmodi, $verschieberegeln, $kategorien, $saisons, $users, $berechtigt_fuer_veranstaltung, $vorlage); } #[NoReturn] function adminSaveVeranstaltung(): void @@ -6149,7 +7627,8 @@ function adminEditVeranstaltung(): void $saison_id = $jInput->get('saison_id', 0, 'INT'); $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('erster_tag_jahr', 2000, 'INT'), $jInput->get('erster_tag_monat', 1, 'INT'), $jInput->get('erster_tag_tag', 1, 'INT'))); $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jInput->get('letzter_tag_jahr', 2000, 'INT'), $jInput->get('letzter_tag_monat', 1, 'INT'), $jInput->get('letzter_tag_tag', 1, 'INT'))); - $modus_id = $jInput->get('modus_id', 0, 'INT'); + $regelwerke_id = $jInput->get('regelwerke_id', 0, 'INT'); + $modus_id = $jInput->get('modus_id', 0, 'INT'); $verschieberegel_id = $jInput->get('verschieberegel_id', 0, 'INT'); $tabellenwertung = $jInput->get('tabellenwertung', 0, 'INT'); $direktervergleich = $jInput->get('direktervergleich', 0, 'INT'); @@ -6173,8 +7652,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, 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');"; + $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag " . ($letzter_tag != null ? ", letzter_tag" : "") . ", regelwerke_id, 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', " : "") . "'$regelwerke_id', '$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)); @@ -6194,7 +7673,8 @@ function adminEditVeranstaltung(): void . "\n saison_id = '$saison_id'," . "\n erster_tag = '$erster_tag'," . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") - . "\n modus_id = '$modus_id'," + . "\n regelwerke_id = '$regelwerke_id'," + . "\n modus_id = '$modus_id'," . "\n verschieberegel_id = '$verschieberegel_id'," . "\n tabellenwertung = '$tabellenwertung'," . "\n direktervergleich = '$direktervergleich'," @@ -6470,6 +7950,7 @@ function adminEditMannschaft(): void $heimspiel_wochentag = $jInput->get('heimspiel_wochentag', 0, 'INT'); $heimspiel_uhrzeit = sprintf("%02d%02d", $jInput->get('heimspiel_uhrzeit_stunden', 0, 'INT'), $jInput->get('heimspiel_uhrzeit_minuten', 0, 'INT')); $heimspielort_id = $jInput->get('heimspielort_id', 0, 'INT'); + $trainingstage = $db->escape(trim($jInput->get('trainingstage', '', 'RAW'))); $nichtraucherschutz = $jInput->get('nichtraucherschutz', 0, 'INT'); $zusatzpunkte = $jInput->get('zusatzpunkte', 0, 'FLOAT'); $bildbeibehalten = $jInput->get('bildbeibehalten', 0, 'INT'); @@ -6496,8 +7977,8 @@ function adminEditMannschaft(): void $veranstaltung = $rows[0]; if ($id == 0) { - $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');"; + $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, teamname_kurz, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, trainingstage, 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") . ", '$trainingstage', '$nichtraucherschutz', '$zusatzpunkte'" . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? ", '$platz'" : ", NULL") : "") . ", '$pin');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); @@ -6525,6 +8006,7 @@ function adminEditMannschaft(): void . "\n heimspiel_wochentag = '$heimspiel_wochentag'," . "\n heimspiel_uhrzeit = '$heimspiel_uhrzeit'," . "\n heimspielort_id = " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . "," + . "\n trainingstage = '$trainingstage'," . "\n nichtraucherschutz = '$nichtraucherschutz'," . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? "\n platz = '$platz'," : "\n platz = NULL,") : "") . "\n zusatzpunkte = '$zusatzpunkte'," @@ -7701,6 +9183,14 @@ function adminBegegnungen(): void if (count($rows) < 1) die("Wrong id!"); $veranstaltung = $rows[0]; + $query = "SELECT * FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = '$veranstaltung->verschieberegel_id'"; + $verschieberegeln = loadObjectList($db, $query); + + $verschieben_admin = 0; + if (!empty($verschieberegeln) && benutzerZugriff("verschieberegeln_aendern")){ + $verschieben_admin = $verschieberegeln[0]->verband_berechtigt; + } + $modus_id = $veranstaltung->modus_id; $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; $rows = loadObjectList($db, $query); @@ -7767,7 +9257,7 @@ function adminBegegnungen(): void . "\n WHERE t2.veranstaltung_id = $veranstaltungId" . "\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); + HTML_sportsmanager_admin::adminBegegnungen($veranstaltung, $modus, $rows, $verschieben_admin); } function adminEditBegegnung(): void @@ -7939,9 +9429,9 @@ function adminEditBegegnung(): void } } - if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id || - $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spiel_nr != $spiel_nr || - $begegnung->spieltag_titel != $spieltag_titel || $begegnung->spielort_id != $spielort_id || (empty($begegnung->tisch) != empty($tisch) || + if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id || + $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spiel_nr != $spiel_nr || + $begegnung->spieltag_titel != $spieltag_titel || $begegnung->spielort_id != $spielort_id || (empty($begegnung->tisch) != empty($tisch) || $begegnung->tisch != $tisch) || $begegnung->nichtraucherschutz != $nichtraucherschutz) { $query = "UPDATE #__sportsmanager_begegnung" . "\n SET zeitpunkt = " . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . "," @@ -9923,12 +11413,13 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $sperren = false; + $Fehlertext = ""; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); $rundenTitel = $jInput->get('rundentitel', 0, 'STRING'); $spielumplatz3 = $jInput->get('spielumplatz3', 0, 'INT'); - + $teams = []; if ($veranstaltungId == 0) die("Missing id!"); @@ -9964,18 +11455,30 @@ function adminBegegnungenPokalrundeAuslosenForm(): void else{ $anzahlmatches = pow(2, $anzahlrunden - $rundenNr); //Verlierer rausfiltern - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" - . "\n FROM #__sportsmanager_begegnung AS t1" - . "\n LEFT JOIN #__sportsmanager_team AS t2" - . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" - . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" - . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" - . "\n WHERE t4.veranstaltung_id = $veranstaltungId;"; + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2" + . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" + . "\n ON t1.gast_team_id = t3.team_id LEFT JOIN #__sportsmanager_veranstaltung AS t4" + . "\n ON t2.veranstaltung_id = t4.veranstaltung_id" + . "\n WHERE t4.veranstaltung_id = $veranstaltungId;"; $loosers = loadObjectList($db, $query); $Zeile = 0; foreach($loosers AS $looser) { + if ($looser->Verlierer == 0) + { + $Fehlertext = "Mindestens ein Sieger konnte nicht ermittelt werden!!!"; + $sperren = true; + } if ($Zeile > 0) $Verlierer .= ","; $Verlierer .= $looser->Verlierer; $Zeile++; @@ -10028,14 +11531,21 @@ function adminBegegnungenPokalrundeAuslosenForm(): void for ($matchNr = 0; $matchNr < $anzahlmatches; $matchNr++) { $team_heim = $matchNr * 2 ; $team_gast = $team_heim + 1; - $matches[$matchNr]['heim'] = $teams_auslosung[$team_heim]['team_id']; - $matches[$matchNr]['gast'] = $teams_auslosung[$team_gast]['team_id']; + $matches[$matchNr + 1]['heim'] = $teams_auslosung[$team_heim]['team_id']; + $matches[$matchNr + 1]['gast'] = $teams_auslosung[$team_gast]['team_id']; } if ($spielumplatz3) { - //Verlierer Halbfinale ermitteln - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" + //Verlierer Halbfinale ermitteln + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" @@ -10049,13 +11559,12 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $matches[2]['rundentitel'] = "Spiel um Platz 3"; } - $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { - $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; + $matches[$spiel_nr]['rundentitel'] = $match['rundentitel'] ?? $rundenTitel; $matches[$spiel_nr]['zeitpunkt'] = $zeitpunkt; - $matches[$spiel_nr]['heimspielort_id'] = $teams[$teams_setzliste[$setzung[0]]]['heimspielort_id']; $team_heim = $match['heim']; + $matches[$spiel_nr]['heimspielort_id'] = $teams[$team_heim]['heimspielort_id']; if ($datum_kw != null && $teams[$team_heim]['heimspiel_wochentag'] !== 0) { $ts = getdate(mondaykw($datum_kw, $datum_jahr, $teams[$team_heim]['heimspiel_wochentag'] - 1)); $matches[$spiel_nr]['zeitpunkt'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], @@ -10082,12 +11591,11 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if (!$db->execute()) { die($db->stderr(true)); } - + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ - echo " - $Fehlertext\n"; + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, $Fehlertext); } } @@ -10099,10 +11607,10 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $teams = []; $setzliste = []; - $setzung = []; $matches = []; $sperren = false; + $Fehlertext = ""; $veranstaltungId = $jInput->get('veranstaltungid', 0, 'INT'); $spielort_id = $jInput->get('spielort_id', 0, 'INT'); $rundenNr = $jInput->get('runde', 0, 'INT'); @@ -10186,8 +11694,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void $sperren = true; } - $matches = []; - if ($rundenNr == 1){ $setzliste = getSetzliste($anzahlrunden); $spiel_nr = 0; @@ -10219,7 +11725,9 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if ($rundenNr >= 2){ $query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart, t2.teamname AS Heim, t3.teamname AS Gast, t1.heim_team_id, t1.gast_team_id, - t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte + t1.spieltag_titel AS Runde, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, + t1.heim_punkte AS Heim_Tore, t1.gast_punkte AS Gast_Tore, + t1.heim_spielpunkte AS Heim_Satzpunkte, t1.gast_spielpunkte AS Gast_Satzpunkte FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id @@ -10227,13 +11735,25 @@ function adminBegegnungenPokalrundeAuslosenForm(): void WHERE t4.veranstaltung_id = " . $veranstaltungId . " AND t1.spieltag = " . ($rundenNr - 1) . " ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr;"; $begegnungen = json_decode(json_encode(loadObjectList($db, $query)), true); + foreach($begegnungen AS $begegnung) { if ($begegnung['Heim_Satzpunkte'] > $begegnung['Gast_Satzpunkte']) $sieger = $begegnung['heim_team_id']; - else + if ($begegnung['Gast_Satzpunkte'] > $begegnung['Heim_Satzpunkte']) $sieger = $begegnung['gast_team_id']; - + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte']) + { + if ($begegnung['Heim_Tore'] > $begegnung['Gast_Tore']) + $sieger = $begegnung['heim_team_id']; + else if ($begegnung['Gast_Tore'] > $begegnung['Heim_Tore']) + $sieger = $begegnung['gast_team_id']; + else { + $sieger = 0; + $Fehlertext = "Mindestens ein Sieger konnte nicht ermittelt werden!!!"; + $sperren = true; + } + } if ($begegnung['Spiel_Nr'] % 2) $matches[round($begegnung['Spiel_Nr']/2)]['heim'] = $sieger; else @@ -10244,7 +11764,14 @@ function adminBegegnungenPokalrundeAuslosenForm(): void if ($spielumplatz3) { //Verlierer Halbfinale ermitteln - $query = "SELECT IF(t1.heim_punkte > t1.gast_punkte, t3.team_id, t2.team_id) AS Verlierer" + $query = "SELECT" + . "\n CASE" + . "\n WHEN t1.heim_spielpunkte > t1.gast_spielpunkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte < t1.gast_spielpunkte THEN t2.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte > t1.gast_punkte THEN t3.team_id" + . "\n WHEN t1.heim_spielpunkte = t1.gast_spielpunkte AND t1.heim_punkte < t1.gast_punkte THEN t2.team_id" + . "\n ELSE 0" + . "\n END AS Verlierer" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_team AS t2" . "\n ON t1.heim_team_id = t2.team_id LEFT JOIN #__sportsmanager_team AS t3" @@ -10269,7 +11796,6 @@ function adminBegegnungenPokalrundeAuslosenForm(): void } } - $Fehlertext = ""; foreach($matches AS $spiel_nr => $match) { $matches[$spiel_nr]['rundentitel'] = $matches[$spiel_nr]['rundentitel'] ?? $rundenTitel; @@ -10305,8 +11831,7 @@ function adminBegegnungenPokalrundeAuslosenForm(): void redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId); } else{ - echo " - $Fehlertext\n"; + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId, $Fehlertext); } } @@ -10439,8 +11964,8 @@ function adminBegegnungenExportForm(): void $dateiname = ""; if ($export == "spieler") { $query = " - SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, - t4.spielernr AS Passnummer, t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, + SELECT t5.bezeichnung AS Veranstaltung, t2.vereinsname AS Verein, t1.teamname AS Team, t4.spielernr AS Passnummer, + t4.nachname AS Nachname, t4.vorname AS Vorname, t4.geburtsjahr AS Geburtsjahr, LOWER(LEFT(geschlecht, 1)) AS Geschlecht, t6.saisonbezeichnung AS Saison, t3.erster_spieltag AS Spielberechtigt_von, t3.letzter_spieltag AS Spielberechtigt_bis FROM #__sportsmanager_team AS t1 LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t1.veranstaltung_id = t5.veranstaltung_id @@ -10452,6 +11977,9 @@ function adminBegegnungenExportForm(): void "; $rows = loadObjectList($db, $query); + if (!isset($rows) or count($rows) == 0) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + } $dateiname = "Spieler " . $veranstaltung->bezeichnung; } @@ -10461,13 +11989,13 @@ function adminBegegnungenExportForm(): void if (einstellungswert("verbands_kuerzel") == "STFV"){ $query .= " CONCAT(t5.saisonbezeichnung,LPAD(t4.kategorie,2,'0'),LPAD(t1.spieltag,2,'0'),LPAD(IFNULL(t1.spiel_nr, '0'),2,'0')) AS stfv_id, "; - } - $query .= " + } + $query .= " 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.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 + t4.bezeichnung AS Liga, t1.spieltag AS Spieltag_Nr, t1.spiel_nr AS Spiel_Nr, + t1.zeitpunkt AS Spielstart, '' AS verlegt_auf, t2.teamname AS Heim, t3.teamname AS Gast, + 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 @@ -10476,13 +12004,43 @@ function adminBegegnungenExportForm(): void WHERE t4.veranstaltung_id = " . $veranstaltungId . " ORDER BY t4.veranstaltung_id, t1.spieltag, t1.spiel_nr, t1.zeitpunkt; "; + $rows = loadObjectList($db, $query); + + // Spielverlegungen + foreach ($rows as $value) { - $rows = loadObjectList($db, $query); - $dateiname = "Spielplan " . $veranstaltung->bezeichnung; - } + $beantragt = []; + $genehmigt = []; + + // Spielverlegung vorgeschlagen + $query = " + SELECT t1.zeitpunkt AS Termin_alt + FROM #__sportsmanager_begegnung_historie AS t1 + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (2) + ORDER BY eingetragen ASC LIMIT 1; + "; + $beantragt = loadObjectList($db, $query); + if (!empty($beantragt)) + $value->Spielstart = $beantragt[0]->Termin_alt; - if (!isset($rows) or count($rows) == 0) { - redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + // Spielverlegung vorgeschlagen + $query = " + SELECT t1.zeitpunkt AS Termin_neu + FROM #__sportsmanager_begegnung_historie AS t1 + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (1) + ORDER BY eingetragen DESC LIMIT 1; + "; + $genehmigt = loadObjectList($db, $query); + if (!empty($genehmigt)) + $value->verlegt_auf = $genehmigt[0]->Termin_neu; + } + $dateiname = "Spielplan " . $veranstaltung->bezeichnung; + + if (!isset($rows) or count($rows) == 0) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + } } if ($export == "spielberichte") { @@ -10499,20 +12057,63 @@ function adminBegegnungenExportForm(): void foreach ($rows as $value) { - // letze Änderung + $Bestaetigt = []; + $Bestaetigt = []; + $Moderator = []; + + // Endergebnis vorgeschlagen $query = " SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von FROM #__sportsmanager_begegnung_historie AS t1 LEFT JOIN #__users AS t2 ON t1.user_id = t2.id WHERE begegnung_id = " . $value->ID . " - AND aktion IN (5,6,7,8,9) - ORDER BY eingetragen DESC - LIMIT 1; + AND aktion IN (6) + ORDER BY eingetragen DESC LIMIT 1; "; + $Bestaetigt = loadObjectList($db, $query); + if (!empty($Bestaetigt)) { + $value->vorgeschlagen_um = $Bestaetigt[0]->gespeichert_um; + $value->vorgeschlagen_von = $Bestaetigt[0]->gespeichert_von; + } else { + $value->vorgeschlagen_um = $Bestaetigt[0]->gespeichert_um; + $value->vorgeschlagen_von = $Bestaetigt[0]->gespeichert_von; + } - $letzterEintrag = loadObjectList($db, $query); - $value->gespeichert_um = $letzterEintrag[0]->gespeichert_um; - $value->gespeichert_von = $letzterEintrag[0]->gespeichert_von; + // Endergebnis bestätigen Gegner + $query = " + SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von + FROM #__sportsmanager_begegnung_historie AS t1 + LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (7) + ORDER BY eingetragen DESC LIMIT 1; + "; + $Bestaetigt = loadObjectList($db, $query); + if (!empty($Bestaetigt)) { + $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von; + } else { + $value->bestaetigt_um = $Bestaetigt[0]->gespeichert_um; + $value->bestaetigt_von = $Bestaetigt[0]->gespeichert_von; + } + + // Endergebnis bestätigen Moderator + $query = " + SELECT t1.eingetragen AS gespeichert_um, t2.name AS gespeichert_von + FROM #__sportsmanager_begegnung_historie AS t1 + LEFT JOIN #__users AS t2 ON t1.user_id = t2.id + WHERE begegnung_id = " . $value->ID . " + AND aktion IN (8) + ORDER BY eingetragen DESC LIMIT 1; + "; + $Moderator = loadObjectList($db, $query); + if (!empty($Moderator)) { + $value->moderator_um = $Moderator[0]->gespeichert_um; + $value->moderator_von = $Moderator[0]->gespeichert_von; + } else { + $value->moderator_um = $Moderator[0]->gespeichert_um; + $value->moderator_von = $Moderator[0]->gespeichert_von; + } // Spielbericht $query = " @@ -10554,7 +12155,90 @@ function adminBegegnungenExportForm(): void } $dateiname = "Spielberichte " . $veranstaltung->bezeichnung; } - + + if ($export == "teams") { + $query = "SELECT t2.verein_id, t2.vereinsname AS Verein, t2.vereinssitz AS Vereinssitz," + . "\n t2.vereinssitz_ortsteil AS Vereinssitz_Ortsteil, t2.url AS Vereinswebseite," + . "\n t1.team_id, t1.teamname AS Team, t3.bezeichnung AS Liga, t1.tischtyp AS Tisch," + . "\n t4.name AS Spielort, t4.strasse AS Spielort_Strasse, t4.plz AS Spielort_PLZ," + . "\n t4.ortsname AS Spielort_Ort, t4.ortsteil AS Spielort_Ortsteil, t4.telefon AS Spielort_Telefon," + . "\n t4.url AS Spielort_Url, t1.trainingstage AS Trainingstage, t4.ruhetage AS Spielort_Ruhetage" + . "\n FROM #__sportsmanager_team AS t1" + . "\n LEFT JOIN #__sportsmanager_verein AS t2 ON t1.verein_id = t2.verein_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t3 ON t1.veranstaltung_id = t3.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS t4 ON t1.heimspielort_id = t4.spielort_id" + . "\n WHERE t1.veranstaltung_id = " . $veranstaltungId . ";"; + + $rows = loadObjectList($db, $query); + if (!isset($rows) or count($rows) == 0) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=1', "Zu dieser Auswahl sind keine Daten vorhanden!"); + } + + foreach ($rows AS $value) + { + $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner" + . "\n WHERE verein_id = ".$value->verein_id." ORDER BY vereinsansprechpartner_id;"; + $ansprechpartner = loadObjectList($db, $query); + for ($i = 0; $i <= 2; $i++){ + $index = $i + 1; + if (isset($ansprechpartner[$i])){ + $property = "VAP{$index}_Nachname"; + $value->$property = $ansprechpartner[$i]->nachname; + $property = "VAP{$index}_Vorname"; + $value->$property = $ansprechpartner[$i]->vorname; + $property = "VAP{$index}_Telefon"; + $value->$property = $ansprechpartner[$i]->telefon; + $property = "VAP{$index}_Mobil"; + $value->$property = $ansprechpartner[$i]->mobil; + $property = "VAP{$index}_EMail"; + $value->$property = $ansprechpartner[$i]->email; + } else { + $property = "VAP{$index}_Nachname"; + $value->$property = ""; + $property = "VAP{$index}_Vorname"; + $value->$property = ""; + $property = "VAP{$index}_Telefon"; + $value->$property = ""; + $property = "VAP{$index}_Mobil"; + $value->$property = ""; + $property = "VAP{$index}_EMail"; + $value->$property = ""; + } + } + + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner" + . "\n WHERE team_id = ".$value->team_id." ORDER BY kontaktperson_id;"; + $ansprechpartner = loadObjectList($db, $query); + for ($i = 0; $i <= 1; $i++){ + $index = $i + 1; + if (isset($ansprechpartner[$i])){ + $property = "TAP{$index}_Nachname"; + $value->$property = $ansprechpartner[$i]->nachname; + $property = "TAP{$index}_Vorname"; + $value->$property = $ansprechpartner[$i]->vorname; + $property = "TAP{$index}_Telefon"; + $value->$property = $ansprechpartner[$i]->telefon; + $property = "TAP{$index}_Mobil"; + $value->$property = $ansprechpartner[$i]->mobil; + $property = "TAP{$index}_EMail"; + $value->$property = $ansprechpartner[$i]->email; + } else { + $property = "TAP{$index}_Nachname"; + $value->$property = ""; + $property = "TAP{$index}_Vorname"; + $value->$property = ""; + $property = "TAP{$index}_Telefon"; + $value->$property = ""; + $property = "TAP{$index}_Mobil"; + $value->$property = ""; + $property = "TAP{$index}_EMail"; + $value->$property = ""; + } + } + } + $dateiname = "Teams " . $veranstaltung->bezeichnung; + } + $dateiname .= ".csv"; $dateiname = bereinigterDateiname($dateiname); ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind @@ -10562,12 +12246,12 @@ function adminBegegnungenExportForm(): void Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); Header("Pragma: no-cache"); - + $data = ""; $trennzeichen = ";"; $spalte = 0; $header = ""; - + foreach ($rows[0] as $field => $value) { if ($spalte != 0) { $header .= $trennzeichen; @@ -10587,9 +12271,9 @@ function adminBegegnungenExportForm(): void } $data .= trim($line) . "\n"; } - + echo $header . "\n" . utf8_decode($data); - + die(); } @@ -10673,7 +12357,7 @@ function adminSaveTurnier(): void echo "$Fehlertext\n"; return; } - + if ($vorlage) { $vorlage_id = $id; $id = 0; @@ -10718,7 +12402,7 @@ function adminSaveTurnier(): void if (!$db->execute()) { die($db->stderr(true)); } - + if ($letzter_tag == $erster_tag){ $query = "UPDATE #__sportsmanager_turnierdisziplin" . "\n SET beginn = CONCAT('$erster_tag', ' ', TIME(beginn))" @@ -11567,6 +13251,54 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void HTML_sportsmanager_admin::adminImportTurnierdisziplinMeldungenSpieleForm($row, $veranstalter); } +#[NoReturn] function adminLoeschenTurnierdisziplinMeldungenSpiele($id): void +{ + $db = getDatabase(); + global $_FILES; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name" + . "\n FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung" + . "\n WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id" + . "\n AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id" + . "\n AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler" + . "\n FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung" + . "\n WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id" + . "\n AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } +} + + #[NoReturn] function adminImportTurnierdisziplinMeldungenSpiele(): void { $db = getDatabase(); @@ -11584,7 +13316,9 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void } // Sicherstellen, dass Turnierdisziplin zum Turnier gehört - $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id" + . "\n FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die ("Wrong id"); $turnierdisziplin = $rows[0]; @@ -11597,1028 +13331,1187 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void keinZugriff(); if ($zugriffsebene == 2 && $veranstalter_id != 0) - $wertungsbedingung = "(SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_verein USING (verein_id) WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND veranstalter_id = $veranstalter_id) > 0 AND "; + $wertungsbedingung = "(SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id" + . "\n AND veranstalter_id = $veranstalter_id) > 0 AND "; else $wertungsbedingung = "NOT ISNULL(aktueller_verein_id) AND "; - $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort," + . "\n beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n WHERE turnierdisziplin_id = $id"; $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); $turnierdisziplin = $rows[0]; $elo_aktualisieren = $turnierdisziplin->elo_wertung; $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; - - if (!empty($_FILES["daten"]["tmp_name"])) { - if (is_uploaded_file($_FILES["daten"]["tmp_name"])) { - $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - $handle = fopen($_FILES["daten"]["tmp_name"], "r"); - if (!$handle) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei kann nicht geöffnet werden."); - } - if (feof($handle)) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei ist leer."); - } - $titelzeile = chop(utf8_encode(fgets($handle, 4096))); - if (str_starts_with($titelzeile, "sep=")) { - $titelzeile = chop(utf8_encode(fgets($handle, 4096))); - } - if (str_contains($titelzeile, "\t")) - $trennzeichen = "\t"; - else if (str_contains($titelzeile, ";")) - $trennzeichen = ";"; - else - $trennzeichen = ","; - - $spalte = array(); - $titel = explode($trennzeichen, strtolower($titelzeile)); - - foreach ($titel as $index => $bezeichnung) { - if ($bezeichnung == "platz" || $bezeichnung == "platzierung") - $spalte["platz"] = $index; - else if ($bezeichnung == "itsf") - $spalte["itsf"] = $index; - else if ($bezeichnung == "name" || $bezeichnung == "nachname" || $bezeichnung == "name1" || $bezeichnung == "nachname1" || $bezeichnung == "nachname 1") - $spalte["nachname1"] = $index; - else if ($bezeichnung == "vorname" || $bezeichnung == "vorname1" || $bezeichnung == "vorname 1") - $spalte["vorname1"] = $index; - else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr1" || $bezeichnung == "spielernr. 1") - $spalte["spielernr1"] = $index; - else if ($bezeichnung == "verein" || $bezeichnung == "verein1" || $bezeichnung == "vereinsname" || $bezeichnung == "vereinsname1" || $bezeichnung == "vereinsname 1") - $spalte["verein1"] = $index; - else if ($bezeichnung == "name2" || $bezeichnung == "nachname2" || $bezeichnung == "nachname 2") - $spalte["nachname2"] = $index; - else if ($bezeichnung == "vorname2" || $bezeichnung == "vorname 2") - $spalte["vorname2"] = $index; - else if ($bezeichnung == "spielernr2" || $bezeichnung == "spielernr. 2") - $spalte["spielernr2"] = $index; - else if ($bezeichnung == "verein2" || $bezeichnung == "vereinsname2" || $bezeichnung == "vereinsname 2") - $spalte["verein1"] = $index; - } - - // CSV-Import - if ((isset($spalte["platz"]) && isset($spalte["vorname1"]) && isset($spalte["nachname1"])) || isset($spalte["itsf"])) { - $spielerMeldungen = array(); - - $ist_doppel = false; - if (isset($spalte["vorname2"]) && isset($spalte["nachname2"])) - $ist_doppel = true; - - while (!feof($handle)) { - $buffer = chop(utf8_encode(fgets($handle, 4096))); - $daten = explode($trennzeichen, $buffer); - - foreach ($daten as $index => $wert) { - $wert = trim($wert); - $len = strlen($wert); - if ($len < 2 || $wert[0] != '"' || $wert[$len - 1] != '"') - $daten[$index] = $wert; - else - $daten[$index] = str_replace('""', '"', substr($wert, 1, $len - 2)); - } - $vorname2 = null; - $nachname2 = null; - $verein2 = null; - if (isset($spalte["itsf"])) { - if (!isset($daten[$spalte["itsf"]])) - continue; - $itsf_daten = $daten[$spalte["itsf"]]; - if (empty($itsf_daten)) - continue; - - if (!$ist_doppel && str_contains($itsf_daten, " - ")) { - if (count($spielerMeldungen) != 0) - continue; - $ist_doppel = true; - } - - $nachname1 = ""; - $vorname1 = ""; - $spielernr1 = ""; - $verein1 = ""; - if ($ist_doppel) { - $nachname2 = ""; - $vorname2 = ""; - $spielernr2 = ""; - $verein2 = ""; - } - - $itsf_felder = explode(" ", $itsf_daten); - $position = 0; // 0: Platz, 1: Vorname1, 2: Nachname1, 3: Land1, 4: Vorname2, 5: Nachname2, 6: Land2 - foreach ($itsf_felder as $feld) { - if ($position == 0) { - if (!is_numeric($feld)) - break; - $platz = $feld; - $position++; - continue; - } - if ($position == 1) { - if (strtoupper($feld) != $feld) { - if (!empty($vorname1)) - $vorname1 .= " "; - $vorname1 .= $feld; - continue; - } - $position = 2; - } - if ($position == 2) { - if ($feld != "-" && !str_starts_with($feld, "(")) { - if (!empty($nachname1)) - $nachname1 .= " "; - $nachname1 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); - continue; - } - $position = 3; - } - if ($position == 3) { - if ($feld == "-") - continue; - if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { - $verein1 = substr($feld, 1, 3); - continue; - } - if (!$ist_doppel) - break; - $position = 4; - } - if ($position == 4) { - if (strtoupper($feld) != $feld) { - if (!empty($vorname2)) - $vorname2 .= " "; - $vorname2 .= $feld; - continue; - } - $position = 5; - } - if ($position == 5) { - if ($feld != "-" && !str_starts_with($feld, "(")) { - if (ctype_digit($feld)) - continue; - if (!empty($nachname2)) - $nachname2 .= " "; - $nachname2 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); - continue; - } - $position = 6; - } - if ($position == 6) { - if ($feld == "-") - continue; - if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { - $verein2 = substr($feld, 1, 3); - continue; - } - break; - } - } - - if (empty($platz) || empty($vorname1) || empty($nachname1)) - continue; - if ($ist_doppel && (empty($vorname2) || empty($nachname2))) - continue; - } else { - $platz = str_replace(".", "", $daten[$spalte["platz"]]); - if (empty($platz)) - continue; - - if (!isset($daten[$spalte["vorname1"]]) || !isset($daten[$spalte["nachname1"]])) - continue; - - $nachname1 = $daten[$spalte["nachname1"]]; - $vorname1 = $daten[$spalte["vorname1"]]; - $spielernr1 = isset($spalte["spielernr1"]) && isset($daten[$spalte["spielernr1"]]) ? $daten[$spalte["spielernr1"]] : ""; - $verein1 = isset($spalte["verein1"]) && isset($daten[$spalte["verein1"]]) ? $daten[$spalte["verein1"]] : ""; - - if ($vorname1 == "" || $nachname1 == "") - continue; - - if ($ist_doppel) { - if (!isset($daten[$spalte["vorname2"]]) || !isset($daten[$spalte["nachname2"]])) - continue; - - $nachname2 = $daten[$spalte["nachname2"]]; - $vorname2 = $daten[$spalte["vorname2"]]; - $spielernr2 = isset($spalte["spielernr2"]) && isset($daten[$spalte["spielernr2"]]) ? $daten[$spalte["spielernr2"]] : ""; - $verein2 = isset($spalte["verein2"]) && isset($daten[$spalte["verein2"]]) ? $daten[$spalte["verein2"]] : ""; - - if ($vorname2 == "" || $nachname2 == "") - continue; - } - } - - if ($ist_doppel) { - // Spielernummern und -namen ermitteln - $spieler2_id = null; - if (!empty($spielernr2)) { - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr2) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - if (count($s) == 1) - $spieler2_id = $s[0]->spieler_id; - } - if ($spieler2_id == null) { - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname2) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname2) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - if (count($s) == 1) - $spieler2_id = $s[0]->spieler_id; - } - } - - // Spielernummern und -namen ermitteln - $spieler1_id = null; - if (!empty($spielernr1)) { - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr1) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - if (count($s) == 1) - $spieler1_id = $s[0]->spieler_id; - } - if ($spieler1_id == null) { - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname1) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname1) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - if (count($s) == 1) - $spieler1_id = $s[0]->spieler_id; - } - - $spielerMeldung = array(); - $spielerMeldung["p"] = $platz; - if ($spieler1_id == null) { - $spielerMeldung["1n"] = $nachname1; - $spielerMeldung["1v"] = $vorname1; - $spielerMeldung["1vn"] = $verein1; - } else - $spielerMeldung["1"] = $spieler1_id; - - if ($ist_doppel) { - if ($spieler2_id == null) { - $spielerMeldung["2n"] = $nachname2; - $spielerMeldung["2v"] = $vorname2; - $spielerMeldung["2vn"] = $verein2; - } else - $spielerMeldung["2"] = $spieler2_id; - } - $spielerMeldungen[] = $spielerMeldung; - } - fclose($handle); - - foreach ($spielerMeldungen as $spielerMeldung) { - $platz = $spielerMeldung["p"]; - $spieler1_id = $spielerMeldung["1"] ?? null; - if ($ist_doppel) - $spieler2_id = $spielerMeldung["2"] ?? null; - - $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" - . "\n VALUES ('$id', '0', '$platz');"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - $meldungId = $db->insertid(); - - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" - . "\n VALUES ('$meldungId', " . ($spieler1_id != null ? "'$spieler1_id'" : "NULL") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - $meldungSpielerId = $db->insertid(); - - if ($spieler1_id == null) { - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" - . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["1n"]) . "', '" . $db->escape($spielerMeldung["1v"]) . "', '" . $db->escape($spielerMeldung["1vn"]) . "');"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - - if ($ist_doppel) { - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" - . "\n VALUES ('$meldungId', " . ($spieler2_id != null ? "'$spieler2_id'" : "NULL") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - $meldungSpielerId = $db->insertid(); - - if ($spieler2_id == null) { - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" - . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["2n"]) . "', '" . $db->escape($spielerMeldung["2v"]) . "', '" . $db->escape($spielerMeldung["2vn"]) . "');"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - } - } else { // XML-Import - fclose($handle); - - // Daten zu Vorrunde laden - $disziplinVorrunde = null; - if (!empty($_FILES["daten_vorrunde"]["tmp_name"])) { - if (is_uploaded_file($_FILES["daten_vorrunde"]["tmp_name"])) { - $disziplinVorrunde = new DOMDocument(); - $disziplinVorrunde->recover = true; - $success = $disziplinVorrunde->load($_FILES["daten_vorrunde"]["tmp_name"]); - if (!$success) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); - } - } - } - - // Daten zu Zusatzrunde laden - $disziplinZusatzrunde = null; - if (!empty($_FILES["daten_zusatzrunde"]["tmp_name"])) { - if (is_uploaded_file($_FILES["daten_zusatzrunde"]["tmp_name"])) { - $disziplinZusatzrunde = new DOMDocument(); - $disziplinZusatzrunde->recover = true; - $success = $disziplinZusatzrunde->load($_FILES["daten_zusatzrunde"]["tmp_name"]); - if (!$success) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); - } - } - } - - // Daten zu 2. Zusatzrunde laden - $disziplinZusatzrunde2 = null; - if (!empty($_FILES["daten_zusatzrunde2"]["tmp_name"])) { - if (is_uploaded_file($_FILES["daten_zusatzrunde2"]["tmp_name"])) { - $disziplinZusatzrunde2 = new DOMDocument(); - $disziplinZusatzrunde2->recover = true; - $success = $disziplinZusatzrunde2->load($_FILES["daten_zusatzrunde2"]["tmp_name"]); - if (!$success) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); - } - } - } - - // Daten zu Hauptrunde laden - $disziplin = new DOMDocument(); - $disziplin->recover = true; - $success = $disziplin->load($_FILES["daten"]["tmp_name"]); - if (!$success) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); - } - - if ($disziplinVorrunde != null) { - $matchingNodes = $disziplinVorrunde->getElementsByTagName("disziplin"); - if ($matchingNodes == null) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); - } - if ($matchingNodes->length != 1) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); - } - $turniersystemVorrunde = $matchingNodes->item(0)->getAttribute("system"); - } - - if ($disziplinZusatzrunde != null) { - $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("disziplin"); - if ($matchingNodes == null) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); - } - if ($matchingNodes->length != 1) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); - } - $turniersystemZusatzrunde = $matchingNodes->item(0)->getAttribute("system"); - } - - if ($disziplinZusatzrunde2 != null) { - $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("disziplin"); - if ($matchingNodes == null) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); - } - if ($matchingNodes->length != 1) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); - } - $turniersystemZusatzrunde2 = $matchingNodes->item(0)->getAttribute("system"); - } - - $matchingNodes = $disziplin->getElementsByTagName("disziplin"); - if ($matchingNodes == null) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei enthaelt keine Disziplin."); - } - if ($matchingNodes->length != 1) { - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei darf nur eine Disziplin enthalten."); - } - $turniersystemHauptrunde = $matchingNodes->item(0)->getAttribute("system"); - - // Spieler-Ids über Spielerliste ermitteln - $meldungenSpieler = array(); - $meldungenPlatz = array(); - foreach (array(0, 1, 2, 3, 10) as $rundenstufe) - $meldungenPlatz[$rundenstufe] = array(); - $meldungenIds = array(); - $matchingNodes = $disziplin->getElementsByTagName("meldung"); - if ($matchingNodes != null) { - $totalHauptrunde = $matchingNodes->length; - for ($i = 0; $i < $totalHauptrunde; $i++) { - $currNode = $matchingNodes->item($i); - $meldungName = $currNode->getAttribute("name"); - $meldungPlatz = (int)$currNode->getAttribute("platz"); - $meldungenSpieler[$meldungName] = array(); - $meldungenPlatz[0][$meldungName] = $meldungPlatz; - $meldungenPlatz[1][$meldungName] = $meldungPlatz; - - $spielerNodes = $currNode->getElementsByTagName("spieler"); - foreach ($spielerNodes as $spieler) { - $spielernr = $spieler->getAttribute("spielerpass"); - - if (!empty($spielernr)) { - // Spielernummern und -namen ermitteln - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '$spielernr') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } else - $gefunden = null; - - $spielerNachname = null; - $spielerVorname = null; - $spielerVerein = null; - if (!$gefunden) { - $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; - $spielerNachname = trim($spieler->getAttribute("nachname")); - $spielerVerein = trim($spieler->getAttribute("verein")); - - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } - - if ($gefunden != -1 && $gefunden != null) - $meldungenSpieler[$meldungName][] = $gefunden; - else - $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); - } - } - - $neueMeldungenZusatzrunde = 0; - if ($disziplinZusatzrunde != null) { - $matchingNodesZusatzrunde = $disziplinZusatzrunde->getElementsByTagName("meldung"); - if ($matchingNodesZusatzrunde != null) { - $totalZusatzrunde = $matchingNodesZusatzrunde->length; - for ($i = 0; $i < $totalZusatzrunde; $i++) { - $currNode = $matchingNodesZusatzrunde->item($i); - $meldungName = $currNode->getAttribute("name"); - $meldungPlatz = (int)$currNode->getAttribute("platz"); - $meldungenPlatz[2][$meldungName] = $meldungPlatz; - if (!isset($meldungenSpieler[$meldungName])) { - $neueMeldungenZusatzrunde++; - $meldungenSpieler[$meldungName] = array(); - $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $meldungPlatz; - - $spielerNodes = $currNode->getElementsByTagName("spieler"); - foreach ($spielerNodes as $spieler) { - $spielernr = $spieler->getAttribute("spielerpass"); - - if (!empty($spielernr)) { - // Spielernummern und -namen ermitteln - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } else - $gefunden = null; - - $spielerVorname = null; - $spielerNachname = null; - $spielerVerein = null; - if (!$gefunden) { - $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; - $spielerNachname = trim($spieler->getAttribute("nachname")); - $spielerVerein = trim($spieler->getAttribute("verein")); - - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } - - if ($gefunden != -1 && $gefunden != null) - $meldungenSpieler[$meldungName][] = $gefunden; - else - $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); - } - } - } - } - } - - $neueMeldungenZusatzrunde2 = 0; - if ($disziplinZusatzrunde2 != null) { - $matchingNodesZusatzrunde2 = $disziplinZusatzrunde2->getElementsByTagName("meldung"); - if ($matchingNodesZusatzrunde2 != null) { - $totalZusatzrunde2 = $matchingNodesZusatzrunde2->length; - for ($i = 0; $i < $totalZusatzrunde2; $i++) { - $currNode = $matchingNodesZusatzrunde2->item($i); - $meldungName = $currNode->getAttribute("name"); - $meldungPlatz = (int)$currNode->getAttribute("platz"); - $meldungenPlatz[3][$meldungName] = $meldungPlatz; - if (!isset($meldungenSpieler[$meldungName])) { - $neueMeldungenZusatzrunde2++; - $meldungenSpieler[$meldungName] = array(); - $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $meldungPlatz; - - $spielerNodes = $currNode->getElementsByTagName("spieler"); - foreach ($spielerNodes as $spieler) { - $spielernr = $spieler->getAttribute("spielerpass"); - - if (!empty($spielernr)) { - // Spielernummern und -namen ermitteln - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } else - $gefunden = null; - - $spielerVorname = null; - $spielerNachname = null; - $spielerVerein = null; - if (!$gefunden) { - $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; - $spielerNachname = trim($spieler->getAttribute("nachname")); - $spielerVerein = trim($spieler->getAttribute("verein")); - - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } - - if ($gefunden != -1 && $gefunden != null) - $meldungenSpieler[$meldungName][] = $gefunden; - else - $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); - } - } - } - } - } - - $disziplinVorrundeErsterPlatz = 0; - if ($disziplinVorrunde != null) { - $matchingNodesVorrunde = $disziplinVorrunde->getElementsByTagName("meldung"); - if ($matchingNodesVorrunde != null) { - $totalVorrunde = $matchingNodesVorrunde->length; - for ($i = 0; $i < $totalVorrunde; $i++) { - $currNode = $matchingNodesVorrunde->item($i); - $meldungName = $currNode->getAttribute("name"); - if (isset($meldungenSpieler[$meldungName])) - continue; - $meldungPlatz = $currNode->getAttribute("platz"); - if ($meldungPlatz < $disziplinVorrundeErsterPlatz || $disziplinVorrundeErsterPlatz == 0) - $disziplinVorrundeErsterPlatz = $meldungPlatz; - } - - for ($i = 0; $i < $totalVorrunde; $i++) { - $currNode = $matchingNodesVorrunde->item($i); - $meldungName = $currNode->getAttribute("name"); - $meldungPlatz = (int)$currNode->getAttribute("platz"); - $meldungenPlatz[10][$meldungName] = $meldungPlatz; - if ($disziplinVorrundeErsterPlatz == 0) - $disziplinVorrundeErsterPlatz = $meldungPlatz; - if (!isset($meldungenSpieler[$meldungName])) { - $meldungenSpieler[$meldungName] = array(); - $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $neueMeldungenZusatzrunde2 + $meldungPlatz - $disziplinVorrundeErsterPlatz + 1; - - $spielerNodes = $currNode->getElementsByTagName("spieler"); - foreach ($spielerNodes as $spieler) { - $spielernr = $spieler->getAttribute("spielerpass"); - - if (!empty($spielernr)) { - // Spielernummern und -namen ermitteln - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } else - $gefunden = null; - - $spielerVorname = null; - $spielerNachname = null; - $spielerVerein = null; - if (!$gefunden) { - $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; - $spielerNachname = trim($spieler->getAttribute("nachname")); - $spielerVerein = trim($spieler->getAttribute("verein")); - - $query = "SELECT spieler_id" - . "\n FROM #__sportsmanager_spieler" - . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" - . "\n LIMIT 2"; - $s = loadObjectList($db, $query); - $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; - } - - if ($gefunden != -1 && $gefunden != null) - $meldungenSpieler[$meldungName][] = $gefunden; - else - $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); - } - } - } - } - } - - // Meldungen speichern - foreach ($meldungenSpieler as $meldungName => $spielerIds) { - $meldungPlatz = $meldungenPlatz[0][$meldungName]; - $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" - . "\n VALUES ('$id', '0', '$meldungPlatz');"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - $meldungId = $db->insertid(); - $meldungenIds[$meldungName] = $meldungId; - - foreach ($spielerIds as $spielerId) { - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" - . "\n VALUES ('$meldungId', " . (!is_array($spielerId) ? "'$spielerId'" : "NULL") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - $meldungSpielerId = $db->insertid(); - - if (is_array($spielerId)) { - $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" - . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerId[0]) . "', '" . $db->escape($spielerId[1]) . "', '" . $db->escape($spielerId[2]) . "');"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - - $rundenstufen = array(0); - $platzierungen = array(0 => $meldungenPlatz[0][$meldungName]); - foreach (array(1, 2, 3, 10) as $rundenstufe) { - if (isset($meldungenPlatz[$rundenstufe][$meldungName])) { - $rundenstufen[] = $rundenstufe; - $platzierungen[$rundenstufe] = $meldungenPlatz[$rundenstufe][$meldungName]; - } - } - meldungsgruppe_verknuepfen($meldungId, $rundenstufen, $platzierungen); - } - } - - // Spiele speichern - $totalVorrunde = 0; - if ($disziplinVorrunde != null && $turniersystemVorrunde != "Monster-DYP") { - $matchingNodes = $disziplinVorrunde->getElementsByTagName("runde"); - if ($matchingNodes != null) { - $totalVorrunde = $matchingNodes->length; - $ergebnis_saetze_maximum = 0; - for ($i = 0; $i < $totalVorrunde; $i++) { - $currNode = $matchingNodes->item($i); - $rundenNr = $currNode->getAttribute("no"); - - $spielNodes = $currNode->getElementsByTagName("spiel"); - foreach ($spielNodes as $spiel) { - $heim = $spiel->getAttribute("heim"); - $gast = $spiel->getAttribute("gast"); - - $heimGewonneneSaetze = 0; - $gastGewonneneSaetze = 0; - $ergebnis_detailliert = ""; - $ergebnis_saetze = 0; - $satzNodes = $spiel->getElementsByTagName("satz"); - foreach ($satzNodes as $satz) { - $heimPunkte = $satz->getAttribute("heim"); - $gastPunkte = $satz->getAttribute("gast"); - if ($heimPunkte > $gastPunkte) - $heimGewonneneSaetze++; - else if ($heimPunkte < $gastPunkte) - $gastGewonneneSaetze++; - if ($heimPunkte > 1 || $gastPunkte > 1) { - if (!empty($ergebnis_detailliert)) - $ergebnis_detailliert .= " "; - $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; - $ergebnis_saetze++; - } - } - if ($ergebnis_saetze > $ergebnis_saetze_maximum) - $ergebnis_saetze_maximum = $ergebnis_saetze; - - $heimId = $meldungenIds[$heim]; - $gastId = $meldungenIds[$gast]; - $spielNr = $i + 1; - if ($heimGewonneneSaetze > $gastGewonneneSaetze) - $ergebnis = 1; - else if ($heimGewonneneSaetze < $gastGewonneneSaetze) - $ergebnis = 2; - else - $ergebnis = 0; - - $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" - . "\n VALUES ('$id', '$spielNr', '$rundenNr', '10', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - - } - } - if ($ergebnis_saetze_maximum > 0) { - $query = "INSERT #__sportsmanager_turnier_rundenstufe" - . "\n SET bezeichnung = ''," - . "\n typ = null," - . "\n runden = null," - . "\n tabellenwertung = null," - . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," - . "\n tore = null," - . "\n spielfelder = null," - . "\n turnierdisziplin_id = '$id'," - . "\n rundenstufe = '10'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - } - - // Spiele speichern - if ($disziplinZusatzrunde != null && $turniersystemZusatzrunde != "Monster-DYP") { - $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("runde"); - if ($matchingNodes != null) { - $totalZusatzrunde = $matchingNodes->length; - $ergebnis_saetze_maximum = 0; - for ($i = 0; $i < $totalZusatzrunde; $i++) { - $currNode = $matchingNodes->item($i); - $rundenNr = $currNode->getAttribute("no"); - - $spielNodes = $currNode->getElementsByTagName("spiel"); - foreach ($spielNodes as $spiel) { - $heim = $spiel->getAttribute("heim"); - $gast = $spiel->getAttribute("gast"); - - $heimGewonneneSaetze = 0; - $gastGewonneneSaetze = 0; - $ergebnis_detailliert = ""; - $ergebnis_saetze = 0; - $satzNodes = $spiel->getElementsByTagName("satz"); - foreach ($satzNodes as $satz) { - $heimPunkte = $satz->getAttribute("heim"); - $gastPunkte = $satz->getAttribute("gast"); - if ($heimPunkte > $gastPunkte) - $heimGewonneneSaetze++; - else if ($heimPunkte < $gastPunkte) - $gastGewonneneSaetze++; - if ($heimPunkte > 1 || $gastPunkte > 1) { - if (!empty($ergebnis_detailliert)) - $ergebnis_detailliert .= " "; - $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; - $ergebnis_saetze++; - } - } - if ($ergebnis_saetze > $ergebnis_saetze_maximum) - $ergebnis_saetze_maximum = $ergebnis_saetze; - - $heimId = $meldungenIds[$heim]; - $gastId = $meldungenIds[$gast]; - $spielNr = $i + 1; - if ($heimGewonneneSaetze > $gastGewonneneSaetze) - $ergebnis = 1; - else if ($heimGewonneneSaetze < $gastGewonneneSaetze) - $ergebnis = 2; - else - $ergebnis = 0; - - $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" - . "\n VALUES ('$id', '$spielNr', '$rundenNr', '2', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - if ($ergebnis_saetze_maximum > 0) { - $query = "INSERT #__sportsmanager_turnier_rundenstufe" - . "\n SET bezeichnung = ''," - . "\n typ = null," - . "\n runden = null," - . "\n tabellenwertung = null," - . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," - . "\n tore = null," - . "\n spielfelder = null," - . "\n turnierdisziplin_id = '$id'," - . "\n rundenstufe = '2'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - } - - // Spiele speichern - if ($disziplinZusatzrunde2 != null && $turniersystemZusatzrunde2 != "Monster-DYP") { - $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("runde"); - if ($matchingNodes != null) { - $totalZusatzrunde2 = $matchingNodes->length; - $ergebnis_saetze_maximum = 0; - for ($i = 0; $i < $totalZusatzrunde2; $i++) { - $currNode = $matchingNodes->item($i); - $rundenNr = $currNode->getAttribute("no"); - - $spielNodes = $currNode->getElementsByTagName("spiel"); - foreach ($spielNodes as $spiel) { - $heim = $spiel->getAttribute("heim"); - $gast = $spiel->getAttribute("gast"); - - $heimGewonneneSaetze = 0; - $gastGewonneneSaetze = 0; - $ergebnis_detailliert = ""; - $ergebnis_saetze = 0; - $satzNodes = $spiel->getElementsByTagName("satz"); - foreach ($satzNodes as $satz) { - $heimPunkte = $satz->getAttribute("heim"); - $gastPunkte = $satz->getAttribute("gast"); - if ($heimPunkte > $gastPunkte) - $heimGewonneneSaetze++; - else if ($heimPunkte < $gastPunkte) - $gastGewonneneSaetze++; - if ($heimPunkte > 1 || $gastPunkte > 1) { - if (!empty($ergebnis_detailliert)) - $ergebnis_detailliert .= " "; - $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; - $ergebnis_saetze++; - } - } - if ($ergebnis_saetze > $ergebnis_saetze_maximum) - $ergebnis_saetze_maximum = $ergebnis_saetze; - - $heimId = $meldungenIds[$heim]; - $gastId = $meldungenIds[$gast]; - $spielNr = $i + 1; - if ($heimGewonneneSaetze > $gastGewonneneSaetze) - $ergebnis = 1; - else if ($heimGewonneneSaetze < $gastGewonneneSaetze) - $ergebnis = 2; - else - $ergebnis = 0; - - $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" - . "\n VALUES ('$id', '$spielNr', '$rundenNr', '3', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - if ($ergebnis_saetze_maximum > 0) { - $query = "INSERT #__sportsmanager_turnier_rundenstufe" - . "\n SET bezeichnung = ''," - . "\n typ = null," - . "\n runden = null," - . "\n tabellenwertung = null," - . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," - . "\n tore = null," - . "\n spielfelder = null," - . "\n turnierdisziplin_id = '$id'," - . "\n rundenstufe = '3'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } - } - } - - if ($turniersystemHauptrunde != "Monster-DYP") { - $matchingNodes = $disziplin->getElementsByTagName("runde"); - if ($matchingNodes != null) { - $total = $matchingNodes->length; - $ergebnis_saetze_maximum = 0; - for ($i = 0; $i < $total; $i++) { - $currNode = $matchingNodes->item($i); - $rundenNr = $currNode->getAttribute("no"); - - $spielNodes = $currNode->getElementsByTagName("spiel"); - foreach ($spielNodes as $spiel) { - $heim = $spiel->getAttribute("heim"); - $gast = $spiel->getAttribute("gast"); - - $heimGewonneneSaetze = 0; - $gastGewonneneSaetze = 0; - $ergebnis_detailliert = ""; - $ergebnis_saetze = 0; - $satzNodes = $spiel->getElementsByTagName("satz"); - foreach ($satzNodes as $satz) { - $heimPunkte = $satz->getAttribute("heim"); - $gastPunkte = $satz->getAttribute("gast"); - if ($heimPunkte > $gastPunkte) - $heimGewonneneSaetze++; - else if ($heimPunkte < $gastPunkte) - $gastGewonneneSaetze++; - if ($heimPunkte > 1 || $gastPunkte > 1) { - if (!empty($ergebnis_detailliert)) - $ergebnis_detailliert .= " "; - $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; - $ergebnis_saetze++; - } - } - if ($ergebnis_saetze > $ergebnis_saetze_maximum) - $ergebnis_saetze_maximum = $ergebnis_saetze; - - $heimId = $meldungenIds[$heim]; - $gastId = $meldungenIds[$gast]; - $spielNr = $totalVorrunde + $i + 1; - if ($heimGewonneneSaetze > $gastGewonneneSaetze) - $ergebnis = 1; - else if ($heimGewonneneSaetze < $gastGewonneneSaetze) - $ergebnis = 2; - else - $ergebnis = 0; - - $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" - . "\n VALUES ('$id', '$spielNr', '$rundenNr', '1', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - } + $Meldung = "Alle Dateien wurden erfolgreich importiert!!!"; + + $filename = $_FILES['daten']['name']; + $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + + if (!in_array(strtolower($ext), ["csv","json","xml"], true)) + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei muss vom Typ csv, xml oder json sein."); + + if (!is_uploaded_file($_FILES["daten"]["tmp_name"])) + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Es wurde keine Datei hochgeladen."); + + adminLoeschenTurnierdisziplinMeldungenSpiele($id); + + // CSV-Import + if ($ext === "csv"){ + + $handle = fopen($_FILES["daten"]["tmp_name"], "r"); + if (!$handle) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei kann nicht geöffnet werden."); + } + if (feof($handle)) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei ist leer."); + } + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + if (str_starts_with($titelzeile, "sep=")) { + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + } + if (str_contains($titelzeile, "\t")) + $trennzeichen = "\t"; + else if (str_contains($titelzeile, ";")) + $trennzeichen = ";"; + else + $trennzeichen = ","; + + $spalte = array(); + $titel = explode($trennzeichen, strtolower($titelzeile)); + + foreach ($titel as $index => $bezeichnung) { + if ($bezeichnung == "platz" || $bezeichnung == "platzierung") + $spalte["platz"] = $index; + else if ($bezeichnung == "itsf") + $spalte["itsf"] = $index; + else if ($bezeichnung == "name" || $bezeichnung == "nachname" || $bezeichnung == "name1" || $bezeichnung == "nachname1" || $bezeichnung == "nachname 1") + $spalte["nachname1"] = $index; + else if ($bezeichnung == "vorname" || $bezeichnung == "vorname1" || $bezeichnung == "vorname 1") + $spalte["vorname1"] = $index; + else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr1" || $bezeichnung == "spielernr. 1") + $spalte["spielernr1"] = $index; + else if ($bezeichnung == "linzenznr" || $bezeichnung == "linzenznr1" || $bezeichnung == "license" || $bezeichnung == "license1") + $spalte["lizenznr1"] = $index; + else if ($bezeichnung == "verein" || $bezeichnung == "verein1" || $bezeichnung == "vereinsname" || $bezeichnung == "vereinsname1" || $bezeichnung == "vereinsname 1") + $spalte["verein1"] = $index; + else if ($bezeichnung == "name2" || $bezeichnung == "nachname2" || $bezeichnung == "nachname 2") + $spalte["nachname2"] = $index; + else if ($bezeichnung == "vorname2" || $bezeichnung == "vorname 2") + $spalte["vorname2"] = $index; + else if ($bezeichnung == "spielernr2" || $bezeichnung == "spielernr. 2") + $spalte["spielernr2"] = $index; + else if ($bezeichnung == "linzenznr2" || $bezeichnung == "license2") + $spalte["lizenznr2"] = $index; + else if ($bezeichnung == "verein2" || $bezeichnung == "vereinsname2" || $bezeichnung == "vereinsname 2") + $spalte["verein1"] = $index; + } + + if ((isset($spalte["platz"]) && isset($spalte["vorname1"]) && isset($spalte["nachname1"])) || isset($spalte["itsf"])) + $spielerMeldungen = array(); + else + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene csv-Datei hat keine gueltige Daten."); + + $ist_doppel = false; + if (isset($spalte["vorname2"]) && isset($spalte["nachname2"])) + $ist_doppel = true; + + while (!feof($handle)) { + $buffer = chop(utf8_encode(fgets($handle, 4096))); + $daten = explode($trennzeichen, $buffer); + + foreach ($daten as $index => $wert) { + $wert = trim($wert); + $len = strlen($wert); + if ($len < 2 || $wert[0] != '"' || $wert[$len - 1] != '"') + $daten[$index] = $wert; + else + $daten[$index] = str_replace('""', '"', substr($wert, 1, $len - 2)); + } + $vorname2 = null; + $nachname2 = null; + $verein2 = null; + if (isset($spalte["itsf"])) { + if (!isset($daten[$spalte["itsf"]])) + continue; + $itsf_daten = $daten[$spalte["itsf"]]; + if (empty($itsf_daten)) + continue; + + if (!$ist_doppel && str_contains($itsf_daten, " - ")) { + if (count($spielerMeldungen) != 0) + continue; + $ist_doppel = true; + } + + $nachname1 = ""; + $vorname1 = ""; + $spielernr1 = ""; + $lizenznr1 = ""; + $verein1 = ""; + if ($ist_doppel) { + $nachname2 = ""; + $vorname2 = ""; + $spielernr2 = ""; + $lizenznr2 = ""; + $verein2 = ""; + } + + $itsf_felder = explode(" ", $itsf_daten); + $position = 0; // 0: Platz, 1: Vorname1, 2: Nachname1, 3: Land1, 4: Vorname2, 5: Nachname2, 6: Land2 + foreach ($itsf_felder as $feld) { + if ($position == 0) { + if (!is_numeric($feld)) + break; + $platz = $feld; + $position++; + continue; + } + if ($position == 1) { + if (strtoupper($feld) != $feld) { + if (!empty($vorname1)) + $vorname1 .= " "; + $vorname1 .= $feld; + continue; } - if ($ergebnis_saetze_maximum > 0) { - $query = "INSERT #__sportsmanager_turnier_rundenstufe" - . "\n SET bezeichnung = ''," - . "\n typ = null," - . "\n runden = null," - . "\n tabellenwertung = null," - . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," - . "\n tore = null," - . "\n spielfelder = null," - . "\n turnierdisziplin_id = '$id'," - . "\n rundenstufe = '1'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); + $position = 2; + } + if ($position == 2) { + if ($feld != "-" && !str_starts_with($feld, "(")) { + if (!empty($nachname1)) + $nachname1 .= " "; + $nachname1 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); + continue; + } + $position = 3; + } + if ($position == 3) { + if ($feld == "-") + continue; + if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { + $verein1 = substr($feld, 1, 3); + continue; + } + if (!$ist_doppel) + break; + $position = 4; + } + if ($position == 4) { + if (strtoupper($feld) != $feld) { + if (!empty($vorname2)) + $vorname2 .= " "; + $vorname2 .= $feld; + continue; + } + $position = 5; + } + if ($position == 5) { + if ($feld != "-" && !str_starts_with($feld, "(")) { + if (ctype_digit($feld)) + continue; + if (!empty($nachname2)) + $nachname2 .= " "; + $nachname2 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); + continue; + } + $position = 6; + } + if ($position == 6) { + if ($feld == "-") + continue; + if (str_starts_with($feld, "(") && substr($feld, 4) == ")") { + $verein2 = substr($feld, 1, 3); + continue; + } + break; + } + } + + if (empty($platz) || empty($vorname1) || empty($nachname1)) + continue; + if ($ist_doppel && (empty($vorname2) || empty($nachname2))) + continue; + } else { + $platz = str_replace(".", "", $daten[$spalte["platz"]]); + if (empty($platz)) + continue; + + if (!isset($daten[$spalte["vorname1"]]) || !isset($daten[$spalte["nachname1"]])) + continue; + + $nachname1 = $daten[$spalte["nachname1"]]; + $vorname1 = $daten[$spalte["vorname1"]]; + $spielernr1 = isset($spalte["spielernr1"]) && isset($daten[$spalte["spielernr1"]]) ? $daten[$spalte["spielernr1"]] : ""; + $lizenznr1 = isset($spalte["lizenznr1"]) && isset($daten[$spalte["lizenznr1"]]) ? $daten[$spalte["lizenznr1"]] : ""; + $verein1 = isset($spalte["verein1"]) && isset($daten[$spalte["verein1"]]) ? $daten[$spalte["verein1"]] : ""; + + if ($vorname1 == "" || $nachname1 == "") + continue; + + if ($ist_doppel) { + if (!isset($daten[$spalte["vorname2"]]) || !isset($daten[$spalte["nachname2"]])) + continue; + + $nachname2 = $daten[$spalte["nachname2"]]; + $vorname2 = $daten[$spalte["vorname2"]]; + $spielernr2 = isset($spalte["spielernr2"]) && isset($daten[$spalte["spielernr2"]]) ? $daten[$spalte["spielernr2"]] : ""; + $lizenznr2 = isset($spalte["lizenznr2"]) && isset($daten[$spalte["lizenznr2"]]) ? $daten[$spalte["lizenznr2"]] : ""; + $verein2 = isset($spalte["verein2"]) && isset($daten[$spalte["verein2"]]) ? $daten[$spalte["verein2"]] : ""; + + if ($vorname2 == "" || $nachname2 == "") + continue; + } + } + + if ($ist_doppel) { + // Spielernummern und -namen ermitteln + $spieler2_id = null; + if (!empty($spielernr2)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr2) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } + if ($spieler2_id == null && !empty($lizenznr2)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($lizenznr2) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } + if ($spieler2_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname2) . "') = 0" + . "\n AND STRCMP(nachname, '" . $db->escape($nachname2) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } + } + + // Spielernummern und -namen ermitteln + $spieler1_id = null; + if (!empty($spielernr1)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr1) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } + if ($spieler1_id == null && !empty($lizenznr1)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($lizenznr1) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } + if ($spieler1_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname1) . "') = 0" + . "\n AND STRCMP(nachname, '" . $db->escape($nachname1) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } + + $spielerMeldung = array(); + $spielerMeldung["p"] = $platz; + if ($spieler1_id == null) { + $spielerMeldung["1n"] = $nachname1; + $spielerMeldung["1v"] = $vorname1; + $spielerMeldung["1vn"] = $verein1; + } else + $spielerMeldung["1"] = $spieler1_id; + + if ($ist_doppel) { + if ($spieler2_id == null) { + $spielerMeldung["2n"] = $nachname2; + $spielerMeldung["2v"] = $vorname2; + $spielerMeldung["2vn"] = $verein2; + } else + $spielerMeldung["2"] = $spieler2_id; + } + $spielerMeldungen[] = $spielerMeldung; + } + fclose($handle); + } + + // json Datei von Coral (nur Endergebnis einer Disziplin) + if ($ext === "json"){ + + $FehlerJason = ""; + $ist_doppel = false; + + if ($_FILES['daten']['error'] !== UPLOAD_ERR_OK) + $FehlerJason = "Fehler beim Hochladen der json-Datei."; + + $json = file_get_contents($_FILES['daten']['tmp_name']); + + // JSON validieren + $data = json_decode($json, true); + if ($data === null) { + $FehlerJason = "Ungültige JSON-Datei!"; + } elseif (!is_array($data)) { + $FehlerJason = "JSON hat nicht das erwartete Array-Format."; + } else { + // Struktur prüfen: jeder Eintrag sollte 'rank' und 'players' haben + $valid = true; + foreach ($data as $entry) { + if (!isset($entry['rank']) || !isset($entry['players']) || !is_array($entry['players'])) { + $valid = false; + break; + } + } + + if (!$valid) { + $FehlerJason = "JSON-Format stimmt nicht: Jeder Eintrag muss 'rank' und 'players' als Array enthalten."; + } else { + $capitalizeName = function(string $name): string { + $parts = explode('-', $name); + $parts = array_map(function($part) { + return ucfirst(mb_strtolower($part, 'UTF-8')); + }, $parts); + return implode('-', $parts); + }; + + $splitName = function(string $fullName) use ($capitalizeName): array { + $parts = explode(' ', $fullName); + $lastNameParts = []; + $firstNameParts = []; + + foreach ($parts as $part) { + if (mb_strtoupper($part, 'UTF-8') === $part) { + $lastNameParts[] = $capitalizeName($part); + } else { + $firstNameParts[] = $part; + } + } + + return [ + implode(' ', $lastNameParts), + implode(' ', $firstNameParts) + ]; + }; + + // maximale Spieleranzahl + $maxPlayers = 0; + foreach ($data as $entry) { + $count = count($entry['players'] ?? []); + if ($count > $maxPlayers) $maxPlayers = $count; + } + + $spielerMeldungen = []; + + foreach ($data as $entry) { + $row = ['p' => $entry['rank'] ?? null]; + + $i = 1; + foreach ($entry['players'] ?? [] as $player) { + if ($i > 1) $ist_doppel = true; + + [$nachname, $vorname] = $splitName($player['name'] ?? ""); + + // Spielernummern und -namen ermitteln + $spieler_id = null; + if (!empty($player['license'])) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($player['license']) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler_id = $s[0]->spieler_id; + } + if ($spieler_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname) . "') = 0" + . "\n AND STRCMP(nachname, '" . $db->escape($nachname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler_id = $s[0]->spieler_id; + } + + if (!empty($spieler_id)){ + $row[$i] = $spieler_id; + } else { + $row[$i."n"] = $nachname; + $row[$i."v"] = $vorname; + $row[$i."vn"] = ""; + } + $i++; + } + $spielerMeldungen[] = $row; + } + } + } + + if ($FehlerJason != "") + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, $FehlerJason); + } + + if (in_array(strtolower($ext), ["csv","json"], true) && !empty($spielerMeldungen)){ + + foreach ($spielerMeldungen as $spielerMeldung) { + $platz = $spielerMeldung["p"]; + $spieler1_id = $spielerMeldung["1"] ?? null; + if ($ist_doppel) + $spieler2_id = $spielerMeldung["2"] ?? null; + + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$id', '0', '$platz');"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $meldungId = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . ($spieler1_id != null ? "'$spieler1_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if ($spieler1_id == null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name" + . "\n (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["1n"]) . "', '" + . $db->escape($spielerMeldung["1v"]) . "', '" . $db->escape($spielerMeldung["1vn"]) . "');"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + + if ($ist_doppel) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . ($spieler2_id != null ? "'$spieler2_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if ($spieler2_id == null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name" + . "\n (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["2n"]) . "', '" + . $db->escape($spielerMeldung["2v"]) . "', '" . $db->escape($spielerMeldung["2vn"]) . "');"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + + if ($ext == "xml"){ // XML-Import + + // Daten zu Vorrunde laden + $disziplinVorrunde = null; + if (!empty($_FILES["daten_vorrunde"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_vorrunde"]["tmp_name"])) { + $disziplinVorrunde = new DOMDocument(); + $disziplinVorrunde->recover = true; + $success = $disziplinVorrunde->load($_FILES["daten_vorrunde"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + } + } + } + + // Daten zu Zusatzrunde laden + $disziplinZusatzrunde = null; + if (!empty($_FILES["daten_zusatzrunde"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_zusatzrunde"]["tmp_name"])) { + $disziplinZusatzrunde = new DOMDocument(); + $disziplinZusatzrunde->recover = true; + $success = $disziplinZusatzrunde->load($_FILES["daten_zusatzrunde"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + } + } + } + + // Daten zu 2. Zusatzrunde laden + $disziplinZusatzrunde2 = null; + if (!empty($_FILES["daten_zusatzrunde2"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_zusatzrunde2"]["tmp_name"])) { + $disziplinZusatzrunde2 = new DOMDocument(); + $disziplinZusatzrunde2->recover = true; + $success = $disziplinZusatzrunde2->load($_FILES["daten_zusatzrunde2"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + } + } + } + + // Daten zu Hauptrunde laden + $disziplin = new DOMDocument(); + $disziplin->recover = true; + $success = $disziplin->load($_FILES["daten"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + } + + if ($disziplinVorrunde != null) { + $matchingNodes = $disziplinVorrunde->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + } + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + } + $turniersystemVorrunde = $matchingNodes->item(0)->getAttribute("system"); + } + + if ($disziplinZusatzrunde != null) { + $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + } + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + } + $turniersystemZusatzrunde = $matchingNodes->item(0)->getAttribute("system"); + } + + if ($disziplinZusatzrunde2 != null) { + $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + } + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + } + $turniersystemZusatzrunde2 = $matchingNodes->item(0)->getAttribute("system"); + } + + $matchingNodes = $disziplin->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei enthaelt keine Disziplin."); + } + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei darf nur eine Disziplin enthalten."); + } + $turniersystemHauptrunde = $matchingNodes->item(0)->getAttribute("system"); + + // Spieler-Ids über Spielerliste ermitteln + $meldungenSpieler = array(); + $meldungenPlatz = array(); + foreach (array(0, 1, 2, 3, 10) as $rundenstufe) + $meldungenPlatz[$rundenstufe] = array(); + $meldungenIds = array(); + $matchingNodes = $disziplin->getElementsByTagName("meldung"); + if ($matchingNodes != null) { + $totalHauptrunde = $matchingNodes->length; + for ($i = 0; $i < $totalHauptrunde; $i++) { + $currNode = $matchingNodes->item($i); + $meldungName = $currNode->getAttribute("name"); + $meldungPlatz = (int)$currNode->getAttribute("platz"); + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $meldungPlatz; + $meldungenPlatz[1][$meldungName] = $meldungPlatz; + + $spielerNodes = $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '$spielernr') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } else + $gefunden = null; + + $spielerNachname = null; + $spielerVorname = null; + $spielerVerein = null; + if (!$gefunden) { + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0" + . "\n AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + $meldungenSpieler[$meldungName][] = $gefunden; + else + $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); + } + } + + $neueMeldungenZusatzrunde = 0; + if ($disziplinZusatzrunde != null) { + $matchingNodesZusatzrunde = $disziplinZusatzrunde->getElementsByTagName("meldung"); + if ($matchingNodesZusatzrunde != null) { + $totalZusatzrunde = $matchingNodesZusatzrunde->length; + for ($i = 0; $i < $totalZusatzrunde; $i++) { + $currNode = $matchingNodesZusatzrunde->item($i); + $meldungName = $currNode->getAttribute("name"); + $meldungPlatz = (int)$currNode->getAttribute("platz"); + $meldungenPlatz[2][$meldungName] = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $neueMeldungenZusatzrunde++; + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $meldungPlatz; + + $spielerNodes = $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } else + $gefunden = null; + + $spielerVorname = null; + $spielerNachname = null; + $spielerVerein = null; + if (!$gefunden) { + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0" + . "\n AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + $meldungenSpieler[$meldungName][] = $gefunden; + else + $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); } } } } - } - } - } + } + + $neueMeldungenZusatzrunde2 = 0; + if ($disziplinZusatzrunde2 != null) { + $matchingNodesZusatzrunde2 = $disziplinZusatzrunde2->getElementsByTagName("meldung"); + if ($matchingNodesZusatzrunde2 != null) { + $totalZusatzrunde2 = $matchingNodesZusatzrunde2->length; + for ($i = 0; $i < $totalZusatzrunde2; $i++) { + $currNode = $matchingNodesZusatzrunde2->item($i); + $meldungName = $currNode->getAttribute("name"); + $meldungPlatz = (int)$currNode->getAttribute("platz"); + $meldungenPlatz[3][$meldungName] = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $neueMeldungenZusatzrunde2++; + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $meldungPlatz; + + $spielerNodes = $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } else + $gefunden = null; + + $spielerVorname = null; + $spielerNachname = null; + $spielerVerein = null; + if (!$gefunden) { + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0" + . "\n AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + $meldungenSpieler[$meldungName][] = $gefunden; + else + $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); + } + } + } + } + } + + $disziplinVorrundeErsterPlatz = 0; + if ($disziplinVorrunde != null) { + $matchingNodesVorrunde = $disziplinVorrunde->getElementsByTagName("meldung"); + if ($matchingNodesVorrunde != null) { + $totalVorrunde = $matchingNodesVorrunde->length; + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode = $matchingNodesVorrunde->item($i); + $meldungName = $currNode->getAttribute("name"); + if (isset($meldungenSpieler[$meldungName])) + continue; + $meldungPlatz = $currNode->getAttribute("platz"); + if ($meldungPlatz < $disziplinVorrundeErsterPlatz || $disziplinVorrundeErsterPlatz == 0) + $disziplinVorrundeErsterPlatz = $meldungPlatz; + } + + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode = $matchingNodesVorrunde->item($i); + $meldungName = $currNode->getAttribute("name"); + $meldungPlatz = (int)$currNode->getAttribute("platz"); + $meldungenPlatz[10][$meldungName] = $meldungPlatz; + if ($disziplinVorrundeErsterPlatz == 0) + $disziplinVorrundeErsterPlatz = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $neueMeldungenZusatzrunde2 + $meldungPlatz - $disziplinVorrundeErsterPlatz + 1; + + $spielerNodes = $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } else + $gefunden = null; + + $spielerVorname = null; + $spielerNachname = null; + $spielerVerein = null; + if (!$gefunden) { + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0" + . "\n AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + $meldungenSpieler[$meldungName][] = $gefunden; + else + $meldungenSpieler[$meldungName][] = array($spielerNachname, $spielerVorname, $spielerVerein); + } + } + } + } + } + + // Meldungen speichern + foreach ($meldungenSpieler as $meldungName => $spielerIds) { + $meldungPlatz = $meldungenPlatz[0][$meldungName]; + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$id', '0', '$meldungPlatz');"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $meldungId = $db->insertid(); + $meldungenIds[$meldungName] = $meldungId; + + foreach ($spielerIds as $spielerId) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . (!is_array($spielerId) ? "'$spielerId'" : "NULL") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if (is_array($spielerId)) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name" + . "\n (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerId[0]) . "', '" + . $db->escape($spielerId[1]) . "', '" . $db->escape($spielerId[2]) . "');"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + + $rundenstufen = array(0); + $platzierungen = array(0 => $meldungenPlatz[0][$meldungName]); + foreach (array(1, 2, 3, 10) as $rundenstufe) { + if (isset($meldungenPlatz[$rundenstufe][$meldungName])) { + $rundenstufen[] = $rundenstufe; + $platzierungen[$rundenstufe] = $meldungenPlatz[$rundenstufe][$meldungName]; + } + } + meldungsgruppe_verknuepfen($meldungId, $rundenstufen, $platzierungen); + } + } + + // Spiele speichern + $totalVorrunde = 0; + if ($disziplinVorrunde != null && $turniersystemVorrunde != "Monster-DYP") { + $matchingNodes = $disziplinVorrunde->getElementsByTagName("runde"); + if ($matchingNodes != null) { + $totalVorrunde = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode = $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + $spielNodes = $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + $satzNodes = $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel" + . "\n (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id," + . "\n ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '10', '$heimId', '$gastId'," + . "\n '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '10'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Spiele speichern + if ($disziplinZusatzrunde != null && $turniersystemZusatzrunde != "Monster-DYP") { + $matchingNodes = $disziplinZusatzrunde->getElementsByTagName("runde"); + if ($matchingNodes != null) { + $totalZusatzrunde = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalZusatzrunde; $i++) { + $currNode = $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + $spielNodes = $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + $satzNodes = $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel" + . "\n (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id," + . "\n ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '2', '$heimId', '$gastId'," + . "\n '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '2'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Spiele speichern + if ($disziplinZusatzrunde2 != null && $turniersystemZusatzrunde2 != "Monster-DYP") { + $matchingNodes = $disziplinZusatzrunde2->getElementsByTagName("runde"); + if ($matchingNodes != null) { + $totalZusatzrunde2 = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalZusatzrunde2; $i++) { + $currNode = $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + $spielNodes = $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + $satzNodes = $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel" + . "\n (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id," + . "\n ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '3', '$heimId', '$gastId'," + . "\n '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '3'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + } + + if ($turniersystemHauptrunde != "Monster-DYP") { + $matchingNodes = $disziplin->getElementsByTagName("runde"); + if ($matchingNodes != null) { + $total = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $total; $i++) { + $currNode = $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + $spielNodes = $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + $satzNodes = $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $totalVorrunde + $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel" + . "\n (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id," + . "\n ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '1', '$heimId', '$gastId'," + . "\n '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . "'$ergebnis_saetze_maximum'" . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '1'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + + foreach (array(1, 2, 3, 10) as $rundenstufe) { $query = "SELECT runde, COUNT(*) AS spiele" @@ -12682,7 +14575,7 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void ranglisteAktualisieren(0, $id); einstufungAktualisieren(); - redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, $Meldung); } function adminEditTurnierdisziplinSpiel(): void diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 4edc1af..0127c0a 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5435,6 +5435,139 @@ function updateDatabase(): void } } + if ($datenbank_version < 114) { + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_regelwerke` (" + . "\n `regelwerke_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `regelwerk` varchar(32) NOT NULL," + . "\n PRIMARY KEY (`regelwerke_id`)," + . "\n UNIQUE KEY `regelwerk` (`regelwerk`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verstoesse` (" + . "\n `verstoesse_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `regelwerke_id` int(11) NOT NULL DEFAULT 0," + . "\n `paragraph_spo` varchar(32) NOT NULL DEFAULT ''," + . "\n `paragraph_go` varchar(32) NOT NULL DEFAULT ''," + . "\n `verstoss` varchar(64) NOT NULL DEFAULT ''," + . "\n `haupttext` text NOT NULL," + . "\n `zusatztext` text NOT NULL," + . "\n `gebuehr` smallint(3) NOT NULL DEFAULT 0," + . "\n `zusatzgebuehr` smallint(2) NOT NULL DEFAULT 0," + . "\n `zur_auswahl` tinyint(1) NOT NULL DEFAULT 1," + . "\n PRIMARY KEY (`verstoesse_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_ordnungsstrafen` (" + . "\n `ordnungsstrafen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verstoesse_id` int(11) NOT NULL DEFAULT 0," + . "\n `begegnung_id` int(11) NOT NULL DEFAULT 0," + . "\n `team_id` int(11) NOT NULL DEFAULT 0," + . "\n `aussteller_id` int(11) NOT NULL DEFAULT 0," + . "\n `ausstelldatum` datetime NOT NULL DEFAULT current_timestamp()," + . "\n `versender_id` int(11) DEFAULT NULL," + . "\n `versendedatum` datetime DEFAULT NULL," + . "\n `rechnungssteller_id` int(11) DEFAULT NULL," + . "\n `rechnungsdatum` datetime DEFAULT NULL," + . "\n `multiplikator` tinyint(1) NOT NULL DEFAULT 1," + . "\n `weitere_angaben` text NOT NULL," + . "\n PRIMARY KEY (`ordnungsstrafen_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_email_vorlagen` (" + . "\n `email_vorlagen_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `vorlage` varchar(64) NOT NULL," + . "\n `betreff` varchar(256) NOT NULL DEFAULT ''," + . "\n `von` varchar(64) NOT NULL DEFAULT ''," + . "\n `an` varchar(256) NOT NULL DEFAULT ''," + . "\n `cc` varchar(256) NOT NULL DEFAULT ''," + . "\n `bcc` varchar(256) NOT NULL DEFAULT ''," + . "\n `email_text` text NOT NULL," + . "\n PRIMARY KEY (`email_vorlagen_id`)," + . "\n UNIQUE KEY `vorlage` (`vorlage`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ordnungsstrafen_verwenden', wert = '0';"; + $db->setQuery( $query ); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Ordnungsstrafe');"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD COLUMN IF NOT EXISTS `regelwerke_id` INT(11) NOT NULL DEFAULT '0' AFTER `bezeichnung`;"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '114'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 115) { + + // Erweiterung Tabelle #__sportsmanager_verschieberegel + $query = "ALTER TABLE `#__sportsmanager_verschieberegel`" + ."\n ADD COLUMN IF NOT EXISTS `begruendung_erforderlich` INT(1) NOT NULL DEFAULT 0 AFTER `ablehnen`," + ."\n ADD COLUMN IF NOT EXISTS `vereine_berechtigt` INT(1) NOT NULL DEFAULT 1 AFTER `begruendung_erforderlich`," + ."\n ADD COLUMN IF NOT EXISTS `verband_berechtigt` INT(1) NOT NULL DEFAULT 0 AFTER `vereine_berechtigt`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Spielverlegung');"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '115'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 116) { + + $query = "ALTER TABLE `#__sportsmanager_spielort`" + . "\n ADD IF NOT EXISTS `telefon` VARCHAR(64) NULL DEFAULT NULL AFTER `url`," + . "\n ADD IF NOT EXISTS `email` VARCHAR(64) NULL DEFAULT NULL AFTER `telefon`," + . "\n ADD IF NOT EXISTS `ruhetage` VARCHAR(64) NULL DEFAULT NULL AFTER `email`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE `#__sportsmanager_team`" + . "\n ADD IF NOT EXISTS `trainingstage` VARCHAR(64) NULL DEFAULT NULL AFTER `heimspielort_id`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '116'" + . "\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 dd205c0..05de63e 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -215,6 +215,24 @@ if ($task == "spielerbild") { case 'admin_verschieben_modus_remove': adminRemoveVerschiebenModus(); break; + case 'admin_spielverlegungen'; + adminSpielverlegungen(); + break; + case 'admin_spielverlegung_edit'; + adminEditSpielverlegung(); + break; + case 'admin_spielverlegung_save'; + adminSaveSpielverlegung(); + break; + case 'admin_spielverlegung_remove'; + adminRemoveSpielverlegung(); + break; + case 'admin_spielverlegungen_export': + adminExportSpielverlegungen(); + break; + case 'admin_spielverlegung_mailen'; + adminSpielverlegungMailen(); + break; case 'admin_kategorien': adminKategorien(); break; @@ -350,6 +368,60 @@ if ($task == "spielerbild") { case 'admin_rechnung_remove': adminRemoveRechnung(); break; + case 'admin_joomla_mail_senden': + sendJoomlaMail(); + break; + case 'admin_regelwerke': + adminRegelwerke(); + break; + case 'admin_regelwerk_edit': + adminEditRegelwerk(); + break; + case 'admin_regelwerk_save': + adminSaveRegelwerk(); + break; + case 'admin_regelwerk_remove': + adminRemoveRegelwerk(); + break; + case 'admin_ordnungsstrafe_mailen': + adminOrdnungsstrafeMailen(); + break; + case 'admin_ordnungsstrafen': + adminOrdnungsstrafen(); + break; + case 'admin_ordnungsstrafe_edit': + adminEditOrdnungsstrafe(); + break; + case 'admin_ordnungsstrafe_save': + adminSaveOrdnungsstrafe(); + break; + case 'admin_ordnungsstrafe_remove': + adminRemoveOrdnungsstrafe(); + break; + case 'admin_ordnungsstrafen_export': + adminExportOrdnungsstrafen(); + break; + case 'admin_verstoesse': + adminVerstoesse(); + break; + case 'admin_verstoss_edit': + adminEditVerstoss(); + break; + case 'admin_verstoss_save': + adminSaveVerstoss(); + break; + case 'admin_verstoss_remove': + adminRemoveVerstoss(); + break; + case 'admin_ordnungsstrafen_vorlage': + adminEditEmailVorlage('Ordnungsstrafe'); + break; + case 'admin_spielverlegung_vorlage'; + adminEditEmailVorlage('Spielverlegung'); + break; + case 'admin_email_vorlage_save': + adminSaveEmailVorlage(); + break; case 'admin_moderatoren': adminModeratoren(); break; @@ -987,6 +1059,8 @@ if ($task == "spielerbild") { adminTermine(0); break; } +} else if ($content == 'spielverlegungen') { + spielverlegungen(); } else if ($content == 'login') { userAuth(); } else if ($content == 'login_refresh') { @@ -2379,7 +2453,7 @@ function turnierbaumAnzeigen($veranstaltung): void else $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Heim']); } - } else + } else if ($begegnung['Heim_Satzpunkte'] < $begegnung['Gast_Satzpunkte']) { $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 2; if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ @@ -2388,6 +2462,24 @@ function turnierbaumAnzeigen($veranstaltung): void else $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Gast']); } + } else + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte'] && $begegnung['Heim_Tore'] > $begegnung['Gast_Tore']) { + $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 1; + if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ + if (round($begegnung['Spiel_Nr'] % 2)) + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Heim']); + else + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Heim']); + } + } else + if ($begegnung['Heim_Satzpunkte'] == $begegnung['Gast_Satzpunkte'] && $begegnung['Heim_Tore'] < $begegnung['Gast_Tore']) { + $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 2; + if ($begegnung['Spieltag_Nr'] < $anzahlRunden){ + if (round($begegnung['Spiel_Nr'] % 2)) + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['heim'] = htmlentities($begegnung['Gast']); + else + $begegnungen[$begegnung['Spieltag_Nr'] + 1][round($begegnung['Spiel_Nr'] / 2)]['gast'] = htmlentities($begegnung['Gast']); + } } else { $begegnungen[$begegnung['Spieltag_Nr']][$begegnung['Spiel_Nr']]['sieger'] = 0; } @@ -2410,7 +2502,7 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) 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) AS verlegung_eingetragen," . "\n (SELECT verantwortlich_team_id 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) AS verantwortlich_team_id," - . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND t6.vereine_berechtigt = 1 AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" @@ -2430,7 +2522,7 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) 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) AS verlegung_eingetragen," . "\n (SELECT verantwortlich_team_id 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) AS verantwortlich_team_id," - . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND t6.vereine_berechtigt = 1 AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" . "\n FROM #__sportsmanager_begegnung AS t1" . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" @@ -2451,7 +2543,7 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) 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) AS verlegung_eingetragen," . "\n (SELECT verantwortlich_team_id 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) AS verantwortlich_team_id," - . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND t6.vereine_berechtigt = 1 AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" . "\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" @@ -2478,7 +2570,7 @@ function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfens . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) 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) AS verlegung_eingetragen," . "\n (SELECT verantwortlich_team_id 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) AS verantwortlich_team_id," // - . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND t6.vereine_berechtigt = 1 AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" . "\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" @@ -4025,6 +4117,105 @@ function spielort(): void HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=spielort_begegnungen_ical&id=' . $id)); } +function spielverlegungen(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $filter_status = $jInput->get('filter_status', '', 'RAW'); + + if (empty($filter_status)) + $filter_status = "offen,genehmigt"; + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC LIMIT 1"; + $saisons = loadObjectList($db, $query); + $filter_saison_id = $saisons[0]->saison_id; + + $query = "SELECT t1.begegnung_historie_id AS beantragt_id, t1.begegnung_id AS begegnung_id," + . "\n t1.eingetragen AS beantragt, t1.kommentar AS Begruendung_beantragt, t1.zeitpunkt AS Termin_alt," + . "\n t1.team_id as beantragt_verein, t5.bezeichnung AS Liga," + . "\n t3.teamname AS Heim, t4.teamname AS Gast, t6.teamname AS beantragt_von, 'offen' AS status" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id" + . "\n WHERE t1.aktion = 2" + . "\n AND t5.saison_id = '$filter_saison_id'" + . kategorieFilter("AND t5.kategorie IN") + . "\n ORDER BY t1.begegnung_id, t1.zeitpunkt ASC;"; + $spielverlegungen = loadObjectList($db, $query); + + $last_id = ""; + foreach ($spielverlegungen as $key => $spielverlegung) { + if ($spielverlegung->begegnung_id == $last_id) { + unset($spielverlegungen[$key]); + } else { + $last_id = $spielverlegung->begegnung_id; + + $query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt," + . "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 1 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $genehmigt = loadObjectList($db, $query); + + if (!empty($genehmigt)) { + $spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id; + $spielverlegung->genehmigt = $genehmigt[0]->genehmigt; + $spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu; + $spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von; + $spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein; + $spielverlegung->status = "genehmigt"; + } else { + $spielverlegung->genehmigt_id = ""; + $spielverlegung->genehmigt = ""; + $spielverlegung->Termin_neu = ""; + $spielverlegung->genehmigt_von = ""; + $spielverlegung->genehmigt_verein = ""; + } + + $query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt," + . "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein," + . "\n t1.kommentar AS Begruendung_abgelehnt" + . "\n FROM #__sportsmanager_begegnung_historie AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id" + . "\n WHERE t1.aktion = 10 AND t1.begegnung_id = $last_id" + . "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;"; + + $abgelehnt = loadObjectList($db, $query); + + if (!empty($abgelehnt)) { + $spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id; + $spielverlegung->abgelehnt = $abgelehnt[0]->abgelehnt; + $spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von; + $spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein; + $spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt; + $spielverlegung->status = "abgelehnt"; + } else { + $spielverlegung->abgelehnt_id = ""; + $spielverlegung->abgelehnt = ""; + $spielverlegung->abgelehnt_von = ""; + $spielverlegung->abgelehnt_verein = ""; + $spielverlegung->Begruendung_abgelehnt = ""; + } + } + } + + $spielverlegungen = array_values($spielverlegungen); + + if (isJson()) { + echo json_encode($spielverlegungen); + } else { + HTML_sportsmanager::spielverlegungen($params->get('titel'), $params->get('beschreibung'), $spielverlegungen); + } +} + function begegnungSpielplan($teamansicht = false): void { $db = getDatabase(); @@ -4211,7 +4402,11 @@ function begegnungVerlegenForm(): void die("Missing id!"); $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); - $query = "SELECT #__sportsmanager_veranstaltung.*, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen FROM #__sportsmanager_veranstaltung LEFT JOIN #__sportsmanager_verschieberegel USING (verschieberegel_id) WHERE veranstaltung_id = $veranstaltungid"; + $query = "SELECT #__sportsmanager_veranstaltung.*, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage," + . "\n termine_minimal, termine_maximal, ablehnen, begruendung_erforderlich" + . "\n FROM #__sportsmanager_veranstaltung LEFT JOIN #__sportsmanager_verschieberegel USING (verschieberegel_id)" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $rows = loadObjectList($db, $query); if (count($rows) < 1) die("Wrong id!"); @@ -4295,6 +4490,7 @@ function begegnungVerlegen(): void $aus_uebersicht = $jInput->get('aus_uebersicht', 0, 'INT'); $angefordert = $jInput->get('anfordern', false, 'BOOL'); $abgelehnt = $jInput->get('ablehnen', false, 'BOOL'); + $verlegungsgrund = $jInput->get('verlegungsgrund', '', 'RAW'); if ($jInput->get('cancel', false, 'BOOL')) { redirectSportsManagerURL('&task=' . ($aus_uebersicht ? 'veranstaltungen' : 'veranstaltung') . '&veranstaltungid=' . $veranstaltungId); @@ -4362,7 +4558,7 @@ function begegnungVerlegen(): void $aktueller_zeitpunkt = date('Y-m-d H:i:s'); if (count($verlegen_aktionen) == 0 || $verlegen_aktionen[0]->aktion == 1 || $verlegen_aktionen[0]->aktion == 5 || $verlegen_aktionen[0]->aktion == 10) { $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" - . "\n VALUES ($id, 2, '$begegnung->zeitpunkt', NULL, NULL, NULL, NULL, '$aktueller_zeitpunkt');"; + . "\n VALUES ($id, 2, '$begegnung->zeitpunkt', '$user_id', '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', '$verlegungsgrund', '$aktueller_zeitpunkt');"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); @@ -4371,7 +4567,7 @@ function begegnungVerlegen(): void if ($angefordert) { $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" - . "\n VALUES ($id, 3, NULL, '$user_id', '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', NULL, '$aktueller_zeitpunkt');"; + . "\n VALUES ($id, 3, NULL, '$user_id', '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', '$verlegungsgrund', '$aktueller_zeitpunkt');"; $db->setQuery($query); if (!$db->execute()) { abortWithError($db->stderr(true)); diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php index 7f6beea..cfbeaad 100644 --- a/src/structure/components/com_sportsmanager/tools.php +++ b/src/structure/components/com_sportsmanager/tools.php @@ -185,17 +185,45 @@ function individualwettbewerbFilter($prefix): string function kategorieFilter($prefix, $suffix = ""): string { global $params; + $kategorien = explode(",", $params->get('kategorien')); - $filter = ""; - foreach ($kategorien as $s) { - $kategorie = intval(trim($s)); - if ($kategorie == 0) - continue; - if (!empty($filter)) - $filter .= ", "; - $filter .= $kategorie; + $result = []; + + foreach ($kategorien as $item) { + $item = trim($item); + if ($item === '') continue; + + // Prüfen, ob es ein Bereich ist + if (strpos($item, '-') !== false) { + $rangeParts = explode('-', $item); + + // genau 2 Teile für einen gültigen Bereich + if (count($rangeParts) !== 2) continue; + + $start = intval(trim($rangeParts[0])); + $end = intval(trim($rangeParts[1])); + + if ($start <= 0 || $end <= 0 || $start > $end) continue; + + for ($i = $start; $i <= $end; $i++) { + $result[$i] = true; // Duplikate vermeiden + } + } else { + $num = intval($item); + if ($num > 0) { + $result[$num] = true; + } + } } - return empty($filter) ? "" : (" " . $prefix . " (" . $filter . ") " . $suffix); + + if (empty($result)) { + return ""; + } + + $filter = array_keys($result); + sort($filter, SORT_NUMERIC); + + return " $prefix (" . implode(", ", $filter) . ") $suffix"; } function turnierFilter($prefix): string diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml index dcc238d..abbb926 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml @@ -24,6 +24,7 @@ + name); $anschrift = $team->strasse . (!empty($team->strasse) && (!empty($team->plz) || !empty($team->ortsname) || !empty($team->ortsteil)) ? ", " : "") . $team->plz . (!empty($team->plz) ? " " : "") . $team->ortsname . (!empty($team->ortsname) && !empty($team->ortsteil) ? "-" : "") . $team->ortsteil; echo "
" . htmlentities_utf8($anschrift); + if (!empty($team->telefon)) + echo "
" . htmlentities_utf8($team->telefon); ?> @@ -3929,6 +3931,76 @@ static function spielort($spielort, $begegnung_zeitpunkt, $aktuelle_teams, $vorh } } +static function spielverlegungen($titel, $beschreibung, $rows): void +{ + global $params; + if (!empty($titel)) { ?> + +
+
+ + + + +
") ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+
+ +
+ + + + + + + + + 0) { + $k = 0; + foreach ($rows as $row) { + ?> + + + + + + + + +
+ Liga); ?> + + Heim == $row->beantragt_von) + echo "" . htmlentities_utf8($row->Heim) . ""; + else + echo htmlentities_utf8($row->Heim); + echo "
"; + if ($row->Gast == $row->beantragt_von) + echo "" . htmlentities_utf8($row->Gast) . ""; + else + echo htmlentities_utf8($row->Gast); + ?> +
+ ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> + + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> +
+ Begruendung_beantragt); ?> +
+   + " method="post" name="adminForm" id="adminForm">
- +
- + + + aktion == 1 || $aktion->aktion == 5 || $aktion->aktion == 10) // akzeptiert, von Moderator eingetragen oder Verschiebung abgelehnt + break; + $letzte_verlegung_aktionen[] = $aktion; + } + + $termine = array(); + if (count($letzte_verlegung_aktionen) > 0) { + $eingetragen = $letzte_verlegung_aktionen[0]->eingetragen; + foreach ($letzte_verlegung_aktionen as $aktion) { + if ($aktion->eingetragen != $eingetragen || ($aktion->aktion != 0) || $aktion->zeitpunkt == null) // aktion == 1 <=> Akzeptiert + break; + $termine[] = $aktion; + } + } + + $berechtigt_anfordern = $veranstaltung->initial_ohne_termin != 1 && (count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion == 1); + $berechtigt_vorschlagen = ($veranstaltung->initial_ohne_termin != 2 || (count($letzte_verlegung_aktionen) != 0 && $letzte_verlegung_aktionen[0]->aktion != 1)) && (!$veranstaltung->keine_gegenvorschlaege || count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion != 3 || $letzte_verlegung_aktionen[0]->team_id != $vorschlagendes_team_id) && (count($termine) == 0 || !$veranstaltung->keine_gegenvorschlaege || $letzte_verlegung_aktionen[0]->team_id == $vorschlagendes_team_id); + $berechtigt_ablehnen = count($letzte_verlegung_aktionen) != 0 && ($letzte_verlegung_aktionen[0]->aktion == 0 || $letzte_verlegung_aktionen[0]->aktion == 3 || $letzte_verlegung_aktionen[0]->aktion == 4) && ((($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 3) && $berechtigt_fuer_akzeptieren) || (($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 2) && $berechtigt_vorschlagen)); + + if ($berechtigt_vorschlagen) { + $anzahl_moegliche_termine = $veranstaltung->termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; + ?> + + begruendung_erforderlich && empty($verlegen_aktionen)){ ?> + + + + + + + + + + kommentar)) { + ?> + + + + + + + + + + termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; + for ($termin = 1; + $termin <= count($termine); + $termin++) { + ?> + + + + + kommentar)) { + ?> + + + + +
-
- - - - - - - aktion == 1 || $aktion->aktion == 5 || $aktion->aktion == 10) // akzeptiert, von Moderator eingetragen oder Verschiebung abgelehnt - break; - $letzte_verlegung_aktionen[] = $aktion; - } - - $termine = array(); - if (count($letzte_verlegung_aktionen) > 0) { - $eingetragen = $letzte_verlegung_aktionen[0]->eingetragen; - foreach ($letzte_verlegung_aktionen as $aktion) { - if ($aktion->eingetragen != $eingetragen || ($aktion->aktion != 0) || $aktion->zeitpunkt == null) // aktion == 1 <=> Akzeptiert - break; - $termine[] = $aktion; - } - } - - $berechtigt_anfordern = $veranstaltung->initial_ohne_termin != 1 && (count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion == 1); - $berechtigt_vorschlagen = ($veranstaltung->initial_ohne_termin != 2 || (count($letzte_verlegung_aktionen) != 0 && $letzte_verlegung_aktionen[0]->aktion != 1)) && (!$veranstaltung->keine_gegenvorschlaege || count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion != 3 || $letzte_verlegung_aktionen[0]->team_id != $vorschlagendes_team_id) && (count($termine) == 0 || !$veranstaltung->keine_gegenvorschlaege || $letzte_verlegung_aktionen[0]->team_id == $vorschlagendes_team_id); - $berechtigt_ablehnen = count($letzte_verlegung_aktionen) != 0 && ($letzte_verlegung_aktionen[0]->aktion == 0 || $letzte_verlegung_aktionen[0]->aktion == 3 || $letzte_verlegung_aktionen[0]->aktion == 4) && ((($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 3) && $berechtigt_fuer_akzeptieren) || (($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 2) && $berechtigt_vorschlagen)); - - if ($berechtigt_vorschlagen) { - $anzahl_moegliche_termine = $veranstaltung->termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; - ?> - - - - - - - kommentar)) { - ?> - - - - - - - - - - termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; - for ($termin = 1; - $termin <= count($termine); - $termin++) { - ?> - - - - - kommentar)) { - ?> - - - - - -
- : - - zeitpunkt != null ? FormatiertesDatum($begegnung->zeitpunkt) : "N/A"; ?> -
- - . : - - - - - - - - - - -
- : - - kommentar); ?> -
- - - -
- - . : - - zeitpunkt)); ?> - -
- : - - kommentar); ?> -
-
+
+ : + + zeitpunkt != null ? FormatiertesDatum($begegnung->zeitpunkt) : "N/A"; ?>
+ + + +
+ + . : + + + + + + + + + + +
+ : + + kommentar); ?> +
+ + + +
+ + . : + + zeitpunkt)); ?> + +
+ : + + kommentar); ?> +
diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 4d7f129..690e996 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -191,7 +191,7 @@ class HTML_sportsmanager_admin if (benutzerZugriff("verschieberegeln_aendern")) { ?> - + + + + +
@@ -808,6 +817,24 @@ class HTML_sportsmanager_admin + + + + + + + +