diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 7249de5..9ca9fa5 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -4539,6 +4539,7 @@ function halloffameNachJahrGruppiert(): void $rows = loadObjectList($db, $query); $alleTeams = halloffameAlleTeams($db); $alleSpielerInfo = halloffameAlleSpielerInfo($db); + $alleVereineInfo = halloffameAlleVereineInfo($db); $disziplinen = []; $jahresDaten = []; @@ -4622,7 +4623,7 @@ function halloffameNachJahrGruppiert(): void if (isJson()) { echo json_encode(['disziplinen' => $disziplinen, 'jahre' => $jahresDaten]); } else { - HTML_sportsmanager::halloffameNachJahrGruppiert(halloffameTitel(), $params->get('beschreibung'), $disziplinen, $jahresDaten, $platzierung, $alleSpielerInfo); + HTML_sportsmanager::halloffameNachJahrGruppiert(halloffameTitel(), $params->get('beschreibung'), $disziplinen, $jahresDaten, $platzierung, $alleSpielerInfo, $alleVereineInfo); } } @@ -4660,6 +4661,7 @@ function halloffameNachSummeGruppiert(): void $rows = loadObjectList($db, $query); $alleTeams = halloffameAlleTeams($db); $alleSpielerInfo = halloffameAlleSpielerInfo($db); + $alleVereineInfo = halloffameAlleVereineInfo($db); $traeger = []; @@ -4683,7 +4685,7 @@ function halloffameNachSummeGruppiert(): void 'name' => $name, 'bild_type' => $bild_type, 'bild_id' => $bild_id, - 'aktiv' => true, + 'aktiv' => $bild_type === 'vereine' ? halloffameVereinAktiv($alleVereineInfo, $bild_id) : true, 'geschlecht' => null, 'titel' => [], ]; @@ -4766,6 +4768,7 @@ function halloffameNachSummeDisziplinGruppiert(): void $rows = loadObjectList($db, $query); $alleTeams = halloffameAlleTeams($db); $alleSpielerInfo = halloffameAlleSpielerInfo($db); + $alleVereineInfo = halloffameAlleVereineInfo($db); $disziplinen = []; @@ -4799,7 +4802,7 @@ function halloffameNachSummeDisziplinGruppiert(): void 'name' => $name, 'bild_type' => $bild_type, 'bild_id' => $bild_id, - 'aktiv' => true, + 'aktiv' => $bild_type === 'vereine' ? halloffameVereinAktiv($alleVereineInfo, $bild_id) : true, 'geschlecht' => null, 'jahre' => [], ]; @@ -4907,6 +4910,7 @@ function halloffameDetails($uebergabe_id = 0): void . "\n ORDER BY t2.jahr $jahrSortierung, platz ASC;"; $rows = loadObjectList($db, $query); $alleSpielerInfo = halloffameAlleSpielerInfo($db); + $alleVereineInfo = halloffameAlleVereineInfo($db); if (count($rows) > 0){ $mitglieder = []; @@ -4975,7 +4979,7 @@ function halloffameDetails($uebergabe_id = 0): void if (isJson()) { echo json_encode($mitglieder); } else { - HTML_sportsmanager::halloffameDetails(halloffameTitel(), $params->get('beschreibung'), $mitglieder, $halloffame, $platzierung, $alleSpielerInfo); + HTML_sportsmanager::halloffameDetails(halloffameTitel(), $params->get('beschreibung'), $mitglieder, $halloffame, $platzierung, $alleSpielerInfo, $alleVereineInfo); } } diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php index 485bdd4..015fb66 100644 --- a/src/structure/components/com_sportsmanager/tools.php +++ b/src/structure/components/com_sportsmanager/tools.php @@ -242,26 +242,9 @@ function idListeParameterFilter(string $parameterName, string $prefix, string $s $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; - } + $num = intval($item); + if ($num > 0) { + $result[$num] = true; // Duplikate vermeiden } } @@ -277,12 +260,67 @@ function idListeParameterFilter(string $parameterName, string $prefix, string $s function halloffameIdFilter($prefix): string { + // Keine Bereichssuche bei der Halloffame-Id, nur einzelne Werte return idListeParameterFilter('halloffame_id', $prefix); } function halloffameJahrFilter($prefix): string { - return idListeParameterFilter('jahr', $prefix); + $minJahr = 1900; + $maxJahr = (int) date('Y') + 5; + + $jInput = Factory::getContainer()->get(SiteApplication::class)->input; + $werte = $jInput->get('jahr', '', 'STRING'); + + $result = []; + foreach (explode(",", $werte) 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) continue; + + // Werte vertauschen, falls der 2. Wert kleiner als der 1. ist + if ($end < $start) { + [$start, $end] = [$end, $start]; + } + + // Bereich auf 1900 .. aktuelles Jahr+5 begrenzen + $start = max($start, $minJahr); + $end = min($end, $maxJahr); + + if ($start > $end) continue; + + for ($i = $start; $i <= $end; $i++) { + $result[$i] = true; // Duplikate vermeiden + } + } else { + $num = intval($item); + if ($num <= 0) continue; + + // Einzelwert auf 1900 .. aktuelles Jahr+5 begrenzen + $num = max($minJahr, min($maxJahr, $num)); + $result[$num] = true; + } + } + + if (empty($result)) { + return ""; + } + + $filter = array_keys($result); + sort($filter, SORT_NUMERIC); + + return " $prefix (" . implode(", ", $filter) . ")"; } function halloffameAlleTeams($db): array @@ -357,12 +395,31 @@ function halloffameGeschaetztesGeschlecht($anzahl_m, $anzahl_w): string return ''; } -function halloffameNameLink(string $bild_type, $id, array $alleSpielerInfo, string $nameHtml): string +function halloffameAlleVereineInfo($db): array +{ + $rows = loadObjectList($db, "SELECT verein_id, ausgetreten FROM #__sportsmanager_verein"); + $result = []; + foreach ($rows as $row) { + $result[$row->verein_id] = (object) [ + 'aktiv' => empty($row->ausgetreten), + ]; + } + return $result; +} + +function halloffameVereinAktiv(array $alleVereineInfo, $verein_id): bool +{ + return empty($verein_id) || !isset($alleVereineInfo[$verein_id]) || $alleVereineInfo[$verein_id]->aktiv; +} + +function halloffameNameLink(string $bild_type, $id, array $alleSpielerInfo, array $alleVereineInfo, string $nameHtml): string { if (empty($id)) return $nameHtml; if ($bild_type === 'spieler' && !halloffameSpielerAktiv($alleSpielerInfo, $id)) return $nameHtml; + if ($bild_type === 'vereine' && !halloffameVereinAktiv($alleVereineInfo, $id)) + return $nameHtml; $tasks = ['spieler' => 'spieler_details', 'vereine' => 'verein_details', 'mannschaften' => 'team_details']; if (!isset($tasks[$bild_type])) 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 1b60e3a..d1dd6b9 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -4217,7 +4217,7 @@ static function halloffame($titel, $beschreibung, $rows): void @@ -4354,13 +4354,13 @@ static function halloffameNachJahrGruppiert($titel, $beschreibung, $disziplinen, $spieler1_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler1_id, $disziplin->geschaetztes_geschlecht)); ?>