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 b8fd46a..2fca482 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) { @@ -110,6 +112,29 @@ function renderTemplate($template, $vars = []): string ); } +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(); @@ -4544,6 +4569,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(); @@ -4601,6 +5257,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; @@ -4609,7 +5268,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'," @@ -4618,7 +5281,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); @@ -6148,7 +6814,7 @@ function adminOrdnungsstrafeMailen(): void $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); - if (!benutzerZugriff("benutzerVeranstalterModerator")) + if (!benutzerZugriff("mannschaftswettbewerb_aendern")) keinZugriff(true); $query = "SELECT *, t2.verstoss, t2.paragraph_spo, t2.paragraph_go, t2.zusatztext, t10.regelwerk," @@ -6302,7 +6968,7 @@ function adminOrdnungsstrafen(): void $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; - if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(); $filter['saison'] = $jInput->get('filter_saison_id', 0, 'INT'); @@ -6379,9 +7045,6 @@ function adminEditOrdnungsstrafe(): void $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; - if (!benutzerZugriff("mannschaftswettbewerb_aendern")) - keinZugriff(); - $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); @@ -6430,6 +7093,9 @@ function adminEditOrdnungsstrafe(): void $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]); } @@ -6438,7 +7104,7 @@ function adminEditOrdnungsstrafe(): void $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; - if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(); if ($jInput->get('cancel', false, 'BOOL')) { @@ -6519,7 +7185,7 @@ function adminEditOrdnungsstrafe(): void $db = getDatabase(); $jInput = Factory::getContainer()->get(SiteApplication::class)->input; - if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) keinZugriff(); $id = $jInput->get('id', 0, 'INT'); @@ -6841,9 +7507,17 @@ function adminEditEmailVorlage($vorlage): void $rows = loadObjectList($db, $query); $row = $rows[0]; - $vars = "Ansprechpartner, SPO, GO, Regelwerk, Verstoss, Begegnung, Liga, Spieltag, -
Spieldatum, Verein, Gebuehr, Zusatztext, Erweitert, Aussteller"; - HTML_sportsmanager_admin::adminEditEmailVorlage($vorlage,$row,$vars); + 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 @@ -6853,8 +7527,10 @@ function adminSaveEmailVorlage(): void if (!benutzerZugriff("benutzerVeranstalterModerator")) keinZugriff(); + $back = $db->escape(trim($jInput->get('back', '', 'RAW'))); + if ($jInput->get('cancel', false, 'BOOL')) { - redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + redirectSportsManagerURL('&task=' . $back); } $vorlage = $db->escape(trim($jInput->get('vorlage', '', 'RAW'))); @@ -6874,7 +7550,7 @@ function adminSaveEmailVorlage(): void die($db->stderr(true)); } - redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + redirectSportsManagerURL('&task=' . $back); } function adminEditVeranstaltung(): void @@ -8499,6 +9175,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); @@ -8565,7 +9249,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 @@ -11272,8 +11956,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 @@ -11297,10 +11981,10 @@ function adminBegegnungenExportForm(): void } $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 @@ -11309,9 +11993,39 @@ 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; + + // 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) { @@ -11332,20 +12046,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 = " diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index c45acc4..1cf2d45 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5516,6 +5516,31 @@ function updateDatabase(): void } } + 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 ($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 e6bc4fa..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; @@ -398,6 +416,9 @@ if ($task == "spielerbild") { case 'admin_ordnungsstrafen_vorlage': adminEditEmailVorlage('Ordnungsstrafe'); break; + case 'admin_spielverlegung_vorlage'; + adminEditEmailVorlage('Spielverlegung'); + break; case 'admin_email_vorlage_save': adminSaveEmailVorlage(); break; @@ -1038,6 +1059,8 @@ if ($task == "spielerbild") { adminTermine(0); break; } +} else if ($content == 'spielverlegungen') { + spielverlegungen(); } else if ($content == 'login') { userAuth(); } else if ($content == 'login_refresh') { @@ -2479,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" @@ -2499,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" @@ -2520,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" @@ -2547,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" @@ -4094,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(); @@ -4280,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!"); @@ -4364,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); @@ -4431,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)); @@ -4440,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 @@ + + +
+
+ + + + +
") ? $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 0173690..63373c2 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")) { ?> - + @@ -4925,7 +4925,7 @@ class HTML_sportsmanager_admin @@ -4978,139 +4978,185 @@ class HTML_sportsmanager_admin
-
+ href="">
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  -
- -
@@ -6566,97 +6612,89 @@ class HTML_sportsmanager_admin
- - - @@ -7098,7 +7137,7 @@ class HTML_sportsmanager_admin value="aussteller_id) ? $aussteller->id : $row->aussteller_id); ?>"/> + value="ausstelldatum) ? date('Y-m-d H:i:s') : $row->ausstelldatum); ?>"/> @@ -7191,6 +7230,227 @@ class HTML_sportsmanager_admin + +
+ :
+ +
-
- - - - - - - - - - - - + +
- - - -
- - - - -
- Text::_('COM_SPORTSMANAGER_MANAGE_MODERATORS'), - "basiseinstellungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_BASIC_SETTING'), - "kategorien_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_CATEGORIES'), - "organisationen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGING_ORGANISATIONS'), - "saisons_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_SEASONS'), - "spieler_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_PLAYERS'), - "spieler_lesen_erweiterte_daten" => Text::_('COM_SPORTSMANAGER_PRIVATE_PLAYER_DATA'), - "vereine_aendern" => Text::_('COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE'), - "einstufungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS'), - "mannschaftsspielplaene_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TEAM_PLANS'), - "verschieberegeln_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT'), - "spielorte_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_VENUES'), - "mannschaftswettbewerb_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS'), - "spielerstatistiken_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS'), - "turniere_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TOURNAMENTS'), - "individualwettbewerbe_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_INDIVIDUAL_COMPETITIONS'), - "ranglistenwertungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RANKING_VOTES'), - "ranglisten_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RANKING'), - "rechnungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_MEMBERS_BILLS'), - "verteiler_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_DISTRIBUTIORS'), - "verteiler_lesen" => Text::_('COM_SPORTSMANAGER_READ_DISTRIBUTIORS'), - "termine_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_EVENTS'), - "termine_benachrichtigung" => Text::_('COM_SPORTSMANAGER_NOTIFICATION_APPOINTMENTS')); - foreach ($werte as $wert => $bezeichnung) { - $auswahl = false; - if ($row != null) { - foreach ($zugriffe as $zugriff) { - if ($zugriff->zugriff == $wert) { - $auswahl = true; - break; - } - } - } - ?> - -
- -
  + + + + + + + + + + + - -
+ + + +
+ + + + +
+ Text::_('COM_SPORTSMANAGER_MANAGE_MODERATORS'), + "basiseinstellungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_BASIC_SETTING'), + "kategorien_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_CATEGORIES'), + "organisationen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGING_ORGANISATIONS'), + "saisons_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_SEASONS'), + "spieler_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_PLAYERS'), + "spieler_lesen_erweiterte_daten" => Text::_('COM_SPORTSMANAGER_PRIVATE_PLAYER_DATA'), + "vereine_aendern" => Text::_('COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE'), + "einstufungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS'), + "mannschaftsspielplaene_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TEAM_PLANS'), + "verschieberegeln_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT'), + "spielorte_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_VENUES'), + "mannschaftswettbewerb_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS'), + "spielerstatistiken_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS'), + "turniere_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_TOURNAMENTS'), + "individualwettbewerbe_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_INDIVIDUAL_COMPETITIONS'), + "ranglistenwertungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RANKING_VOTES'), + "ranglisten_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_RANKING'), + "rechnungen_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_MEMBERS_BILLS'), + "verteiler_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_DISTRIBUTIORS'), + "verteiler_lesen" => Text::_('COM_SPORTSMANAGER_READ_DISTRIBUTIORS'), + "termine_aendern" => Text::_('COM_SPORTSMANAGER_MANAGE_EVENTS'), + "termine_benachrichtigung" => Text::_('COM_SPORTSMANAGER_NOTIFICATION_APPOINTMENTS')); + foreach ($werte as $wert => $bezeichnung) { + $auswahl = false; + if ($row != null) { + foreach ($zugriffe as $zugriff) { + if ($zugriff->zugriff == $wert) { + $auswahl = true; + break; + } + } + } + ?> + +
+ +
  -
- -
@@ -6953,7 +6991,7 @@ class HTML_sportsmanager_admin echo ""; ?> - + veranstaltung_id)){continue;} ?>
+ + + + + + + + + + +
+
+ +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + 0) { + $k = 0; + foreach ($rows as $row) { + ?> + + + + + + + + + + + +
ID
+ + begegnung_id; ?> + + + 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); ?> + + status); ?> + + X + + M +
+   + +
+ :
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+
+ + + + + "/> + "/> + "/> + "/> +
+ @@ -7576,6 +7836,7 @@ class HTML_sportsmanager_admin + 'bezeichnung); ?> ':
- + +
+ + +
@@ -9846,11 +10108,17 @@ class HTML_sportsmanager_admin href="begegnung_id); ?>" title="">O V
+
execute()) { die($db->stderr(true)); } $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verschieberegel` (" - . "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `bezeichnung` varchar(50) NOT NULL DEFAULT ''," - . "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0'," - . "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0'," . "\n `vorlaufzeit_tage` tinyint(4) NOT NULL DEFAULT '0'," . "\n `termine_minimal` tinyint(4) NOT NULL DEFAULT '0'," . "\n `termine_maximal` tinyint(4) NOT NULL DEFAULT '0'," - . "\n `ablehnen` tinyint(1) NOT NULL DEFAULT '0'," - . "\n PRIMARY KEY (`verschieberegel_id`)" - . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + . "\n `ablehnen` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `begruendung_erforderlich` int(1) NOT NULL DEFAULT 0," + . "\n `vereine_berechtigt` int(1) NOT NULL DEFAULT 1," + . "\n `verband_berechtigt` int(1) NOT NULL DEFAULT 0," + . "\n PRIMARY KEY (`verschieberegel_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } @@ -1181,7 +1184,7 @@ return new class () implements InstallerScriptInterface $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } - $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '114';"; + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '115';"; $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } @@ -1234,6 +1237,10 @@ return new class () implements InstallerScriptInterface $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 = "INSERT #__sportsmanager_rangliste_system" . "\n SET systembezeichnung = 'Klostermann/Wahle (1 Punkt für letzten Platz)'," . "\n status = '1',"