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, $