From df794966dfced264aced38a503d6847a276819aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Fri, 4 Sep 2026 08:35:27 +0200 Subject: [PATCH] =?UTF-8?q?Hall=20of=20Fame:=20Jahres-/Id-Filter=20korrigi?= =?UTF-8?q?ert,=20inaktive=20Vereine=20bei=20Namens-Links=20ber=C3=BCcksic?= =?UTF-8?q?htigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - halloffame_id: Bereichssuche (z.B. "1-5") ist nicht mehr möglich, nur noch einzelne Werte. - jahr: Bereichs- und Einzelwerte werden auf 1900..aktuelles Jahr+5 begrenzt; liegt bei einem Bereich der 2. Wert unter dem 1., werden die Werte vertauscht statt den Bereich zu verwerfen. - halloffameNameLink verlinkt bei Vereinen jetzt nur noch, wenn der Verein nicht ausgetreten ist (analog zur bestehenden Spieler-Aktiv-Prüfung). --- .../com_sportsmanager/sportsmanager.php | 12 ++- .../components/com_sportsmanager/tools.php | 101 ++++++++++++++---- .../views/sportsmanager/view.html.php | 32 +++--- 3 files changed, 103 insertions(+), 42 deletions(-) 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)); ?> - $spieler1_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler1)); ?> + $spieler1_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler1)); ?> $spieler2_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler2_id, $disziplin->geschaetztes_geschlecht)); ?> - $spieler2_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler2)); ?> + $spieler2_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler2)); ?> spielform == 1) { @@ -4381,7 +4381,7 @@ static function halloffameNachJahrGruppiert($titel, $beschreibung, $disziplinen, $id) : $row->$id, 45, 60, 0, 0, 'border="0"', $type === 'spieler' ? halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$id, $disziplin->geschaetztes_geschlecht) : ''); ?> - $id, $alleSpielerInfo, htmlentities_utf8($row->$txt)); ?> + $id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$txt)); ?> @@ -4465,13 +4465,13 @@ static function halloffameNachJahrGruppiert($titel, $beschreibung, $disziplinen, $spieler1)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->$spieler1_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler1_id, $disziplin->geschaetztes_geschlecht)); ?> - $spieler1_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler1)); ?> + $spieler1_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler1)); ?> $spieler2)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->$spieler2_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler2_id, $disziplin->geschaetztes_geschlecht)); ?> - $spieler2_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler2)); ?> + $spieler2_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler2)); ?> spielform == 1) { @@ -4492,7 +4492,7 @@ static function halloffameNachJahrGruppiert($titel, $beschreibung, $disziplinen, $txt)) echo bildHTML($type, $type === 'spieler' ? halloffameSpielerBildId($alleSpielerInfo, $row->$id) : $row->$id, 45, 60, 0, 0, 'border="0"', $type === 'spieler' ? halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$id, $disziplin->geschaetztes_geschlecht) : ''); ?> - $id, $alleSpielerInfo, htmlentities_utf8($row->$txt)); ?> + $id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$txt)); ?> @@ -4694,7 +4694,7 @@ static function halloffameNachSummeDisziplinGruppiert($titel, $beschreibung, $di @@ -4788,13 +4788,13 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame, $pl $spieler1_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler1_id, $halloffame->geschaetztes_geschlecht)); ?> - $spieler1_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler1)); ?> + $spieler1_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler1)); ?> $spieler2_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler2_id, $halloffame->geschaetztes_geschlecht)); ?> - $spieler2_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler2)); ?> + $spieler2_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler2)); ?> spielform == 1) { @@ -4815,7 +4815,7 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame, $pl $id) : $row->$id, 45, 60, 0, 0, 'border="0"', $type === 'spieler' ? halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$id, $halloffame->geschaetztes_geschlecht) : ''); ?> - $id, $alleSpielerInfo, htmlentities_utf8($row->$txt)); ?> + $id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$txt)); ?> spieler1_1)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->spieler1_id_1), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->spieler1_id_1, $halloffame->geschaetztes_geschlecht)); ?> - spieler1_id_1, $alleSpielerInfo, htmlentities_utf8($row->spieler1_1)); ?> + spieler1_id_1, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->spieler1_1)); ?> spieler2_1)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->spieler2_id_1), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->spieler2_id_1, $halloffame->geschaetztes_geschlecht)); ?> - spieler2_id_1, $alleSpielerInfo, htmlentities_utf8($row->spieler2_1)); ?> + spieler2_id_1, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->spieler2_1)); ?> $spieler1)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->$spieler1_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler1_id, $halloffame->geschaetztes_geschlecht)); ?> - $spieler1_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler1)); ?> + $spieler1_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler1)); ?> @@ -4919,7 +4919,7 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame, $pl $spieler2)) echo bildHTML("spieler", halloffameSpielerBildId($alleSpielerInfo, $row->$spieler2_id), 45, 60, 0, 0, 'border="0"', halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$spieler2_id, $halloffame->geschaetztes_geschlecht)); ?> - $spieler2_id, $alleSpielerInfo, htmlentities_utf8($row->$spieler2)); ?> + $spieler2_id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$spieler2)); ?> @@ -4951,7 +4951,7 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame, $pl $txt)) echo bildHTML($type, $type === 'spieler' ? halloffameSpielerBildId($alleSpielerInfo, $row->$id) : $row->$id, 45, 60, 0, 0, 'border="0"', $type === 'spieler' ? halloffameSpielerBildAlternativ($alleSpielerInfo, $row->$id, $halloffame->geschaetztes_geschlecht) : ''); ?> - $id, $alleSpielerInfo, htmlentities_utf8($row->$txt)); ?> + $id, $alleSpielerInfo, $alleVereineInfo, htmlentities_utf8($row->$txt)); ?>