From db80f584cd2828716d0e914b923b9a6431fda8ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Thu, 25 Dec 2025 13:20:54 +0100 Subject: [PATCH 01/10] Verschiebereln erweitert. Kategoriefilter optimiert. --- .../components/com_sportsmanager/admin.php | 14 +- .../com_sportsmanager/database/update.php | 21 + .../components/com_sportsmanager/tools.php | 46 +- .../views/sportsmanager/view.html.php | 480 +++++++++--------- .../views/sportsmanager/view_admin.php | 310 ++++++----- .../de-DE/de-DE.com_sportsmanager.ini | 3 + .../en-GB/en-GB.com_sportsmanager.ini | 3 + 7 files changed, 490 insertions(+), 387 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index b8fd46a..b841c72 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -4601,6 +4601,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 +4612,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 +4625,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); diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index c45acc4..7be5f42 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5516,6 +5516,27 @@ 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 = "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/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/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php index 6119d89..18edd2f 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -5122,253 +5122,245 @@ function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $
- +
- + + + 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)) { + ?> + + + + +
-
- - - - - - - 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..bfad356 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -4978,139 +4978,185 @@ class HTML_sportsmanager_admin
- - - + + + termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; for ($termin = 1; $termin <= count($termine); - $termin++) { - ?> - - - - - kommentar)) { + $termin++) { ?> - - - - - + + + + kommentar)) { + ?> + + + + +
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
  -
- -
diff --git a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini index 647b965..9999cf4 100644 --- a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini +++ b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini @@ -886,6 +886,9 @@ COM_SPORTSMANAGER_INITIAL_APPOINTMENT_SUGGESTIONS="Initiale Terminvorschläg COM_SPORTSMANAGER_REQUESTING_TEAM="Beantragende Mannschaft" COM_SPORTSMANAGER_OPPONENT_TEAM="Gegnerische Mannschaft" COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Gegensvorschläge zulässig" +COM_SPORTSMANAGER_REASON_REQUIRED="Begründung erforderlich" +COM_SPORTSMANAGER_CLUB_ENTITLEMENT="Berechtigung Vereine" +COM_SPORTSMANAGER_ASSOCIATION_ENTITLEMENT="Berechtigung Verband" COM_SPORTSMANAGER_LEAD_TIME="Vorlaufzeit" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Terminvorschläge minimal" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Terminvorschläge maximal" diff --git a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini index eddda13..e1db513 100644 --- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini +++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini @@ -886,6 +886,9 @@ COM_SPORTSMANAGER_INITIAL_APPOINTMENT_SUGGESTIONS="Initial appointment suggestio COM_SPORTSMANAGER_REQUESTING_TEAM="Requesting team" COM_SPORTSMANAGER_OPPONENT_TEAM="Opponent team" COM_SPORTSMANAGER_AGAINST_PROPOSALS_ALLOWED="Against proposals allowed" +COM_SPORTSMANAGER_REASON_REQUIRED="Reason required" +COM_SPORTSMANAGER_CLUB_ENTITLEMENT="Club entitlement" +COM_SPORTSMANAGER_ASSOCIATION_ENTITLEMENT="Association_entitlement" COM_SPORTSMANAGER_LEAD_TIME="Lead time" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MINIMAL="Appointment proposals minimal" COM_SPORTSMANAGER_APPOINTMENT_PROPOSALS_MAXIMUM="Appointment proposals maximum" From 4686f5d8db2c2587da6ba72bd8dc8d30bc4b7ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Mon, 29 Dec 2025 12:44:50 +0100 Subject: [PATCH 02/10] Liste Spielverlegungen in Frontend --- .../de-DE/de-DE.com_sportsmanager.sys.ini | 3 +- .../en-GB/en-GB.com_sportsmanager.sys.ini | 3 +- .../com_sportsmanager/sportsmanager.php | 92 +++++++++++- .../views/sportsmanager/tmpl/default.xml | 1 + .../views/sportsmanager/view.html.php | 141 ++++++++++++++---- .../de-DE/de-DE.com_sportsmanager.ini | 5 +- .../en-GB/en-GB.com_sportsmanager.ini | 5 +- 7 files changed, 215 insertions(+), 35 deletions(-) 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/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index e6bc4fa..35540a5 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -1038,6 +1038,8 @@ if ($task == "spielerbild") { adminTermine(0); break; } +} else if ($content == 'spielverlegungen') { + spielverlegungen(); } else if ($content == 'login') { userAuth(); } else if ($content == 'login_refresh') { @@ -4094,6 +4096,85 @@ 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,abgelehnt"; + +$query = "SELECT" + . "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt," + . "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt," + . "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt," + . "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von," + + // Ermittlung Status + . "\n CASE" + . "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)" + . "\n THEN 'abgelehnt'" + . "\n WHEN t2.genehmigt IS NOT NULL" + . "\n THEN 'genehmigt'" + . "\n ELSE 'offen'" + . "\n END AS status" + + // Beantragt + . "\n FROM (" + . "\n SELECT begegnung_id," + . "\n MIN(eingetragen) AS beantragt," + . "\n MIN(zeitpunkt) AS Termin_alt," + . "\n MAX(kommentar) AS Begruendung," + . "\n MAX(team_id) AS team_id" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion IN (2,3)" + . "\n GROUP BY begegnung_id" + . "\n ) AS t1" + + // Genehmigt + . "\n LEFT JOIN (" + . "\n SELECT begegnung_id," + . "\n MAX(eingetragen) AS genehmigt," + . "\n MAX(zeitpunkt) AS Termin_neu," + . "\n MAX(kommentar) AS Begruendung" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion = 1" + . "\n GROUP BY begegnung_id" + . "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id" + + // Abgelehnt + . "\n LEFT JOIN (" + . "\n SELECT begegnung_id," + . "\n MAX(eingetragen) AS abgelehnt," + . "\n MAX(kommentar) AS Begruendung" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion = 10" + . "\n GROUP BY begegnung_id" + . "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id" + + // Sonstige Infos + . "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id" + + // Filter + . "\n " . kategorieFilter("WHERE t7.kategorie IN") + . "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')" + . "\n ORDER BY t1.beantragt DESC;"; + + $spielverlegungen = loadObjectList($db, $query); + + 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 +4361,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 +4449,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 +4517,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 +4526,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/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) { + ?> + + + + + + + + +
+ ", $row->Termin_alt); ?> + + 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); + ?> +
+ ", $row->Termin_neu); ?> + + Begruendung_beantragt); ?> +
+   + = termine_minimal; } + begruendung_erforderlich && empty($verlegen_aktionen)){ ?> +
+ + + +
- - . : - - zeitpunkt)); ?> - -
- : - - kommentar); ?> -
+ + . : + + zeitpunkt)); ?> + +
+ : + + kommentar); ?> +
diff --git a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini index 9999cf4..b7e3a21 100644 --- a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini +++ b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini @@ -1059,4 +1059,7 @@ COM_SPORTSMANAGER_BILL_ISSUER="Rechnung erstellt" COM_SPORTSMANAGER_MULTIPLIER="Multiplikator" COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Weitere Angaben" COM_SPORTSMANAGER_EMAIL_WAS_SEND="Die E-Mail wurde erfolgreich versendet" -COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="Die E-Mail wurde nicht versendet" \ No newline at end of file +COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="Die E-Mail wurde nicht versendet" +COM_SPORTSMANAGER_OLD_DATE="Alter Termin" +COM_SPORTSMANAGER_NEW_DATE="Neuer Termin" +COM_SPORTSMANAGER_REASON_GAME_APPOINTMENT="Verlegungsgrund" \ No newline at end of file diff --git a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini index e1db513..ff21948 100644 --- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini +++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini @@ -1059,4 +1059,7 @@ COM_SPORTSMANAGER_BILL_ISSUER="Bill issuer" COM_SPORTSMANAGER_MULTIPLIER="Multiplier" COM_SPORTSMANAGER_ADDITIONAL_INFORMATION="Additional information" COM_SPORTSMANAGER_EMAIL_WAS_SEND="E-Mail was succesfully sent" -COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="E-Mail was not sent" \ No newline at end of file +COM_SPORTSMANAGER_EMAIL_WAS_NOT_SEND="E-Mail was not sent" +COM_SPORTSMANAGER_OLD_DATE="Old Date" +COM_SPORTSMANAGER_NEW_DATE="New Date" +COM_SPORTSMANAGER_REASON_GAME_APPOINTMENT="Appointment reason" \ No newline at end of file From 7253426b515711cd14cdbfea21cb5afa523c9a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Mon, 29 Dec 2025 17:45:21 +0100 Subject: [PATCH 03/10] =?UTF-8?q?Men=C3=BCstruktur=20f=C3=BCr=20admin=20Sp?= =?UTF-8?q?ielverlegungen=20erstellt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 163 ++++++++++++++++-- .../com_sportsmanager/sportsmanager.php | 19 +- .../views/sportsmanager/view.html.php | 4 +- .../views/sportsmanager/view_admin.php | 105 ++++++++++- .../de-DE/de-DE.com_sportsmanager.ini | 3 +- .../en-GB/en-GB.com_sportsmanager.ini | 3 +- 6 files changed, 277 insertions(+), 20 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index b841c72..2207294 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -4544,6 +4544,94 @@ function adminEditTeamspielmodus(): void redirectSportsManagerURL('&task=admin_teamspiel_modi'); } +function adminSpielverlegungen(): void +{ + $db = getDatabase(); + global $params; + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $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" + . "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt," + . "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt," + . "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt," + . "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von," + + // Ermittlung Status + . "\n CASE" + . "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)" + . "\n THEN 'abgelehnt'" + . "\n WHEN t2.genehmigt IS NOT NULL" + . "\n THEN 'genehmigt'" + . "\n ELSE 'offen'" + . "\n END AS status" + + // Beantragt + . "\n FROM (" + . "\n SELECT begegnung_id," + . "\n MIN(eingetragen) AS beantragt," + . "\n MIN(zeitpunkt) AS Termin_alt," + . "\n MAX(kommentar) AS Begruendung," + . "\n MAX(team_id) AS team_id" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion IN (2,3)" + . "\n GROUP BY begegnung_id" + . "\n ) AS t1" + + // Genehmigt + . "\n LEFT JOIN (" + . "\n SELECT begegnung_id," + . "\n MAX(eingetragen) AS genehmigt," + . "\n MAX(zeitpunkt) AS Termin_neu," + . "\n MAX(kommentar) AS Begruendung" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion = 1" + . "\n GROUP BY begegnung_id" + . "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id" + + // Abgelehnt + . "\n LEFT JOIN (" + . "\n SELECT begegnung_id," + . "\n MAX(eingetragen) AS abgelehnt," + . "\n MAX(kommentar) AS Begruendung" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE aktion = 10" + . "\n GROUP BY begegnung_id" + . "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id" + + // Sonstige Infos + . "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id" + + // Filter + . "\n WHERE t7.saison_id = '$filter_saison_id'" + . "\n " . kategorieFilter("AND t7.kategorie IN") + . "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')" + . "\n ORDER BY t1.beantragt DESC;"; + + $spielverlegungen = loadObjectList($db, $query); + + HTML_sportsmanager_admin::adminSpielverlegungen($spielverlegungen,$saisons,$filter_saison_id); +} + function adminVerschiebenModi(): void { $db = getDatabase(); @@ -6851,9 +6939,16 @@ 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 = "Alter_Termin, Neuer_Termin"; + $back = 'admin_spielverlegungen'; + } + HTML_sportsmanager_admin::adminEditEmailVorlage($vorlage,$row,$vars,$back); } function adminSaveEmailVorlage(): void @@ -6863,8 +6958,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'))); @@ -6884,7 +6981,7 @@ function adminSaveEmailVorlage(): void die($db->stderr(true)); } - redirectSportsManagerURL('&task=admin_ordnungsstrafen'); + redirectSportsManagerURL('&task=' . $back); } function adminEditVeranstaltung(): void @@ -11342,20 +11439,66 @@ 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) + 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/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 35540a5..642c5d7 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -215,6 +215,9 @@ if ($task == "spielerbild") { case 'admin_verschieben_modus_remove': adminRemoveVerschiebenModus(); break; + case 'admin_spielverlegungen'; + adminSpielverlegungen(); + break; case 'admin_kategorien': adminKategorien(); break; @@ -398,6 +401,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; @@ -4104,9 +4110,15 @@ function spielverlegungen(): void $filter_status = $jInput->get('filter_status', '', 'RAW'); if (empty($filter_status)) - $filter_status = "offen,genehmigt,abgelehnt"; + $filter_status = "offen,genehmigt"; -$query = "SELECT" + $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" . "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt," . "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt," . "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt," @@ -4162,7 +4174,8 @@ $query = "SELECT" . "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id" // Filter - . "\n " . kategorieFilter("WHERE t7.kategorie IN") + . "\n WHERE t7.saison_id = '$filter_saison_id'" + . "\n " . kategorieFilter("AND t7.kategorie IN") . "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')" . "\n ORDER BY t1.beantragt DESC;"; diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php index d8becf5..bc8016c 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -3965,7 +3965,7 @@ static function spielverlegungen($titel, $beschreibung, $rows): void - ", $row->Termin_alt); ?> + ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> Liga); ?> @@ -3984,7 +3984,7 @@ static function spielverlegungen($titel, $beschreibung, $rows): void ?> - ", $row->Termin_neu); ?> + ", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> Begruendung_beantragt); ?> 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 bfad356..077eca6 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")) { ?> - + + href=""> @@ -7237,6 +7237,104 @@ class HTML_sportsmanager_admin + +
+ :
+ + + + + + + + + + + +
+
+ +
+ + + + + +
+ + +
+ + +
+ + + + + + + + + 0) { + $k = 0; + foreach ($rows as $row) { + ?> + + + + + + + + +
+ ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> + + 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_neu))); ?> + + Begruendung_beantragt); ?> +
+   + @@ -7622,6 +7720,7 @@ class HTML_sportsmanager_admin + Date: Tue, 30 Dec 2025 18:53:44 +0100 Subject: [PATCH 04/10] Abfragen optimiert --- .../components/com_sportsmanager/admin.php | 132 +++++++++-------- .../com_sportsmanager/sportsmanager.php | 135 ++++++++++-------- .../views/sportsmanager/view.html.php | 2 +- .../views/sportsmanager/view_admin.php | 2 +- 4 files changed, 147 insertions(+), 124 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 2207294..d12d56a 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -4566,68 +4566,78 @@ function adminSpielverlegungen(): void if (empty($filter_status)) $filter_status = "offen,genehmigt,abgelehnt"; - $query = "SELECT" - . "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt," - . "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt," - . "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt," - . "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von," - - // Ermittlung Status - . "\n CASE" - . "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)" - . "\n THEN 'abgelehnt'" - . "\n WHEN t2.genehmigt IS NOT NULL" - . "\n THEN 'genehmigt'" - . "\n ELSE 'offen'" - . "\n END AS status" - - // Beantragt - . "\n FROM (" - . "\n SELECT begegnung_id," - . "\n MIN(eingetragen) AS beantragt," - . "\n MIN(zeitpunkt) AS Termin_alt," - . "\n MAX(kommentar) AS Begruendung," - . "\n MAX(team_id) AS team_id" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion IN (2,3)" - . "\n GROUP BY begegnung_id" - . "\n ) AS t1" - - // Genehmigt - . "\n LEFT JOIN (" - . "\n SELECT begegnung_id," - . "\n MAX(eingetragen) AS genehmigt," - . "\n MAX(zeitpunkt) AS Termin_neu," - . "\n MAX(kommentar) AS Begruendung" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion = 1" - . "\n GROUP BY begegnung_id" - . "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id" - - // Abgelehnt - . "\n LEFT JOIN (" - . "\n SELECT begegnung_id," - . "\n MAX(eingetragen) AS abgelehnt," - . "\n MAX(kommentar) AS Begruendung" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion = 10" - . "\n GROUP BY begegnung_id" - . "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id" - - // Sonstige Infos - . "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id" - . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id" - . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id" - . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id" - . "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id" - - // Filter - . "\n WHERE t7.saison_id = '$filter_saison_id'" - . "\n " . kategorieFilter("AND t7.kategorie IN") - . "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')" - . "\n ORDER BY t1.beantragt DESC;"; + $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 = ""; + } - $spielverlegungen = loadObjectList($db, $query); + $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); } diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 642c5d7..890e4e7 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -4118,68 +4118,81 @@ function spielverlegungen(): void $saisons = loadObjectList($db, $query); $filter_saison_id = $saisons[0]->saison_id; - $query = "SELECT" - . "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt," - . "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt," - . "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt," - . "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von," - - // Ermittlung Status - . "\n CASE" - . "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)" - . "\n THEN 'abgelehnt'" - . "\n WHEN t2.genehmigt IS NOT NULL" - . "\n THEN 'genehmigt'" - . "\n ELSE 'offen'" - . "\n END AS status" - - // Beantragt - . "\n FROM (" - . "\n SELECT begegnung_id," - . "\n MIN(eingetragen) AS beantragt," - . "\n MIN(zeitpunkt) AS Termin_alt," - . "\n MAX(kommentar) AS Begruendung," - . "\n MAX(team_id) AS team_id" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion IN (2,3)" - . "\n GROUP BY begegnung_id" - . "\n ) AS t1" - - // Genehmigt - . "\n LEFT JOIN (" - . "\n SELECT begegnung_id," - . "\n MAX(eingetragen) AS genehmigt," - . "\n MAX(zeitpunkt) AS Termin_neu," - . "\n MAX(kommentar) AS Begruendung" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion = 1" - . "\n GROUP BY begegnung_id" - . "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id" - - // Abgelehnt - . "\n LEFT JOIN (" - . "\n SELECT begegnung_id," - . "\n MAX(eingetragen) AS abgelehnt," - . "\n MAX(kommentar) AS Begruendung" - . "\n FROM #__sportsmanager_begegnung_historie" - . "\n WHERE aktion = 10" - . "\n GROUP BY begegnung_id" - . "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id" - - // Sonstige Infos - . "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id" - . "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id" - . "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id" - . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id" - . "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id" - - // Filter - . "\n WHERE t7.saison_id = '$filter_saison_id'" - . "\n " . kategorieFilter("AND t7.kategorie IN") - . "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')" - . "\n ORDER BY t1.beantragt DESC;"; + $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 = ""; + } - $spielverlegungen = loadObjectList($db, $query); + $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); diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php index bc8016c..95d9fc7 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -3984,7 +3984,7 @@ static function spielverlegungen($titel, $beschreibung, $rows): void ?> - ", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> Begruendung_beantragt); ?> 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 077eca6..80f6b1b 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -7320,7 +7320,7 @@ class HTML_sportsmanager_admin ?> - ", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> Begruendung_beantragt); ?> From 76f0ef5f55f61e8c199d6d6fface6e2fb99d155c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Thu, 1 Jan 2026 18:31:09 +0100 Subject: [PATCH 05/10] =?UTF-8?q?Anlegen=20und=20L=C3=B6schen=20von=20Spie?= =?UTF-8?q?lverlegungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 267 +++++++++++++++- .../com_sportsmanager/database/update.php | 6 +- .../com_sportsmanager/sportsmanager.php | 9 + .../views/sportsmanager/view_admin.php | 302 ++++++++++++------ .../de-DE/de-DE.com_sportsmanager.ini | 6 +- .../en-GB/en-GB.com_sportsmanager.ini | 6 +- 6 files changed, 494 insertions(+), 102 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index d12d56a..090a1e7 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) { @@ -4549,8 +4551,11 @@ function adminSpielverlegungen(): void $db = getDatabase(); global $params; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; - $filter_status = $jInput->get('filter_status', '', 'RAW'); + + 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'); @@ -4642,6 +4647,257 @@ function adminSpielverlegungen(): void 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_von_id ? $beantragt_von_id : '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'" + . "\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'); +} + function adminVerschiebenModi(): void { $db = getDatabase(); @@ -6256,7 +6512,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," @@ -8616,6 +8872,11 @@ 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 = $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); @@ -8682,7 +8943,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 diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index 7be5f42..1cf2d45 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5527,7 +5527,11 @@ function updateDatabase(): void 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'"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 890e4e7..25bb641 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -218,6 +218,15 @@ if ($task == "spielerbild") { 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_kategorien': adminKategorien(); break; 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 80f6b1b..7bab22d 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -6612,97 +6612,89 @@ class HTML_sportsmanager_admin
- - - @@ -7256,11 +7248,13 @@ class HTML_sportsmanager_admin href=""> - + + @@ -7285,8 +7279,9 @@ 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; + } + } + } + ?> + +
+ +
  -
- -
@@ -7144,7 +7136,7 @@ class HTML_sportsmanager_admin value="aussteller_id) ? $aussteller->id : $row->aussteller_id); ?>"/> + value="ausstelldatum) ? date('Y-m-d H:i:s') : $row->ausstelldatum); ?>"/>
+
+ @@ -7301,7 +7296,14 @@ class HTML_sportsmanager_admin + + + + + +
+ :
+ + +
+
ID
- ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> + + begegnung_id; ?> + + + ", date('d.m.Y H:i', strtotime($row->Termin_alt))); ?> Liga); ?> @@ -7320,11 +7322,22 @@ class HTML_sportsmanager_admin ?> - Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?> + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y H:i', strtotime($row->Termin_neu))); ?>
Begruendung_beantragt); ?> X + M +
+ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+
+ + + + + "/> + "/> + "/> + "/> + + begegnung_id); ?>" title="">O + + V + Date: Fri, 2 Jan 2026 23:12:45 +0100 Subject: [PATCH 06/10] Mailen von Spielverlegung und Export von Spielverlegungen --- .../components/com_sportsmanager/admin.php | 306 +++++++++++++++++- .../com_sportsmanager/sportsmanager.php | 14 +- .../views/sportsmanager/view_admin.php | 14 +- 3 files changed, 326 insertions(+), 8 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 090a1e7..7b7efba 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -112,6 +112,30 @@ 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 = ";"; + $spalte = 0; + $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(); @@ -4898,6 +4922,285 @@ function adminEditSpielverlegung(): void 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(); @@ -7211,7 +7514,8 @@ function adminEditEmailVorlage($vorlage): void $back = 'admin_ordnungsstrafen'; } if ($vorlage == 'Spielverlegung'){ - $vars = "Alter_Termin, Neuer_Termin"; + $vars = "Ansprechpartner, Heim, Gast, Liga, Spieltag, Antragsteller, +
Alter_Termin, Neuer_Termin, Begruendung, Absender"; $back = 'admin_spielverlegungen'; } HTML_sportsmanager_admin::adminEditEmailVorlage($vorlage,$row,$vars,$back); diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 25bb641..05de63e 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -227,6 +227,12 @@ if ($task == "spielerbild") { case 'admin_spielverlegung_remove'; adminRemoveSpielverlegung(); break; + case 'admin_spielverlegungen_export': + adminExportSpielverlegungen(); + break; + case 'admin_spielverlegung_mailen'; + adminSpielverlegungMailen(); + break; case 'admin_kategorien': adminKategorien(); break; @@ -2496,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" @@ -2516,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" @@ -2537,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" @@ -2564,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" 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 7bab22d..23059c6 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -6991,7 +6991,7 @@ class HTML_sportsmanager_admin echo ""; ?> - + "> + if (benutzerZugriff("verschieberegeln_aendern")){ ?> @@ -7274,9 +7274,17 @@ class HTML_sportsmanager_admin ?> + + + + + + -
From 825ff04a89726f30de9286cd86aafae51ff0394c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Sat, 3 Jan 2026 17:45:35 +0100 Subject: [PATCH 07/10] script.php angepasst und noch ein paar kleine Korrekturen --- .../components/com_sportsmanager/admin.php | 52 ++++++++++++++----- src/structure/script.php | 21 +++++--- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 7b7efba..5692c41 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -123,7 +123,6 @@ function CSVfromArray($rows,$dateiname) $data = ""; $trennzeichen = ";"; - $spalte = 0; $header = ""; $header .= implode(';', array_keys($rows[0])); @@ -11979,10 +11978,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 @@ -11991,9 +11990,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) { @@ -12025,8 +12054,7 @@ function adminBegegnungenExportForm(): void LEFT JOIN #__users AS t2 ON t1.user_id = t2.id WHERE begegnung_id = " . $value->ID . " AND aktion IN (6) - ORDER BY eingetragen DESC - LIMIT 1; + ORDER BY eingetragen DESC LIMIT 1; "; $Bestaetigt = loadObjectList($db, $query); if (!empty($Bestaetigt)) { @@ -12044,8 +12072,7 @@ function adminBegegnungenExportForm(): void 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; + ORDER BY eingetragen DESC LIMIT 1; "; $Bestaetigt = loadObjectList($db, $query); if (!empty($Bestaetigt)) { @@ -12063,8 +12090,7 @@ function adminBegegnungenExportForm(): void 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; + ORDER BY eingetragen DESC LIMIT 1; "; $Moderator = loadObjectList($db, $query); if (!empty($Moderator)) { diff --git a/src/structure/script.php b/src/structure/script.php index 7ec37e9..f427f68 100644 --- a/src/structure/script.php +++ b/src/structure/script.php @@ -1097,16 +1097,19 @@ return new class () implements InstallerScriptInterface if (!$db->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'," From 4a448cb61d5387d8f4d76478475224a133f3b6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Sun, 4 Jan 2026 12:14:21 +0100 Subject: [PATCH 08/10] Letzter Feinschliff --- .../components/com_sportsmanager/admin.php | 4 +-- .../views/sportsmanager/view.html.php | 12 ++++---- .../views/sportsmanager/view_admin.php | 30 +++++++++++-------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 5692c41..e2f73e9 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -11953,8 +11953,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 diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php index 95d9fc7..ff3790f 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -3949,12 +3949,12 @@ static function spielverlegungen($titel, $beschreibung, $rows): void } ?>
-
+
- - + + - @@ -3983,6 +3980,9 @@ static function spielverlegungen($titel, $beschreibung, $rows): void echo htmlentities_utf8($row->Gast); ?> + 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 23059c6..d36f026 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -7287,14 +7287,16 @@ class HTML_sportsmanager_admin
- ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> - Liga); ?> + ", date('d.m.Y h:i', strtotime($row->Termin_alt))); ?> + Termin_neu == "" ? "" : str_replace(" ", "
", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?>
- +
- + + + 0) { @@ -7310,9 +7312,6 @@ class HTML_sportsmanager_admin begegnung_id; ?> - @@ -7329,23 +7328,28 @@ class HTML_sportsmanager_admin echo htmlentities_utf8($row->Gast); ?> + - + + - + M + 'bezeichnung); ?> ': - + +
ID
- ", date('d.m.Y H:i', strtotime($row->Termin_alt))); ?> - Liga); ?> + ", 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 -
@@ -10114,6 +10119,7 @@ class HTML_sportsmanager_admin } ?>
+
Date: Sun, 4 Jan 2026 13:29:29 +0100 Subject: [PATCH 09/10] Fehler bei Insert Antragsteller korrigiert --- src/structure/components/com_sportsmanager/admin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index e2f73e9..cd8e290 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -4847,12 +4847,12 @@ function adminEditSpielverlegung(): void 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_von_id ? $beantragt_von_id : 'NULL') . ", '$Begruendung_beantragt', NOW());"; + . "\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'" + . "\n team_id = " . ($beantragt_verein ? $beantragt_verein : 'NULL') . "\n WHERE begegnung_historie_id = $beantragt_id"; } $db->setQuery($query); From 9913279519a9f90af1bd628b58650ef82e999739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Tue, 6 Jan 2026 13:10:40 +0100 Subject: [PATCH 10/10] =?UTF-8?q?Benutzerrechte=20f=C3=BCr=20OS=20und=20SV?= =?UTF-8?q?=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 17 ++++++++++------- .../views/sportsmanager/view_admin.php | 19 +++++++++---------- .../de-DE/de-DE.com_sportsmanager.ini | 2 +- .../en-GB/en-GB.com_sportsmanager.ini | 2 +- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index cd8e290..2fca482 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -6968,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'); @@ -7045,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); @@ -7096,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]); } @@ -7104,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')) { @@ -7185,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'); @@ -9178,7 +9178,10 @@ function adminBegegnungen(): void $query = "SELECT * FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = '$veranstaltung->verschieberegel_id'"; $verschieberegeln = loadObjectList($db, $query); - $verschieben_admin = $verschieberegeln[0]->verband_berechtigt; + $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"; 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 d36f026..63373c2 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -205,7 +205,7 @@ class HTML_sportsmanager_admin self::checkZeilenumbruch($Spalte_Nr, $max_Spalten); } - if (benutzerZugriff("mannschaftswettbewerb_aendern") && einstellungswert("ordnungsstrafen_verwenden")) { + if ((benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator()) && einstellungswert("ordnungsstrafen_verwenden")) { ?> @@ -7027,6 +7027,7 @@ class HTML_sportsmanager_admin $k = 0; foreach ($rows as $row) { + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($row->veranstaltung_id)){continue;} ?> @@ -7239,7 +7240,7 @@ class HTML_sportsmanager_admin }
+ class="componentheadingget('pageclass_sfx'); ?>"> :
@@ -7254,7 +7255,7 @@ class HTML_sportsmanager_admin href=""> + if (benutzerZugriff("benutzerVeranstalterModerator")){ ?> @@ -7340,15 +7341,13 @@ class HTML_sportsmanager_admin -
status); ?> X - - + + X + M -