Merge pull request #182 from Deutscher-Tischfussballbund/sportsmanager2-issue178

Überarbeitung Anzeige Vereinsliste in Frontend (issue #178)
This commit is contained in:
MarvinF
2025-09-17 20:36:49 +02:00
committed by GitHub
7 changed files with 105 additions and 27 deletions
@@ -658,6 +658,7 @@ function adminEinstellungen(): void
$lizenz_anzeigen = $jInput->get('lizenz_anzeigen', 0, 'INT');
$anzahl_mitglieder_zeigen = $jInput->get('anzahl_mitglieder_zeigen', 0, 'INT');
$verband_anzeigen = $jInput->get('verband_anzeigen', 0, 'INT');
$spalte_mitglieder_zeigen = $jInput->get('spalte_mitglieder_zeigen', 0, 'INT');
$turnierbaum_zeigen = $jInput->get('turnierbaum_zeigen', 0, 'INT');
$termine_beantragen = $jInput->get('termine_beantragen', 0, 'INT');
$spielerimport_persoenliche_daten_vorauswahl = $jInput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT');
@@ -717,6 +718,14 @@ function adminEinstellungen(): void
die($db->stderr(true));
}
$query = "REPLACE #__sportsmanager_einstellungen"
. "\n SET name = 'spalte_mitglieder_zeigen'"
. ", wert = '$spalte_mitglieder_zeigen'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "REPLACE #__sportsmanager_einstellungen"
. "\n SET name = 'turnierbaum_zeigen'"
. ", wert = '$turnierbaum_zeigen'";
@@ -2873,11 +2873,13 @@ function spieler(): void
$query .= "\n INNER JOIN (SELECT spieler_id, teamname FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)";
$query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE NOT ISNULL(aktueller_verein_id)";
. "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)"
. "\n WHERE NOT ISNULL(aktueller_verein_id) AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)";
if (!empty($search))
$query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')";
if ($einstufungid != 0)
$query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)";
$query .= "\n GROUP BY spieler_id";
if (!empty($kategorie))
$query .= "\n HAVING kategorie = '" . $db->escape($kategorie) . "'";
$query .= "\n ORDER BY " . $sortierung_query
@@ -2996,7 +2998,11 @@ function spielerDetails(): void
$query = "SELECT vereinsname"
. "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id "
. "\n AND NOT #__sportsmanager_verein.ausgetreten"
. "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n ORDER BY vereinsname";
$vereine = loadObjectList($db, $query);
@@ -3004,7 +3010,12 @@ function spielerDetails(): void
$query = "SELECT veranstalterbezeichnung"
. "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein"
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id"
. "\n AND NOT #__sportsmanager_verein.ausgetreten"
. "\n AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"
. "\n AND #__sportsmanager_mitglied_von_verein.mitgliedsstatus IN (1,2)"
. "\n AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id"
. "\n GROUP BY veranstalterbezeichnung"
. "\n ORDER BY veranstalterbezeichnung";
$veranstalter = loadObjectList($db, $query);
@@ -3788,13 +3799,14 @@ function vereine($sort): void
$db = getDatabase();
global $params;
$organisationAnzeigen = einstellungswert('verband_anzeigen');
$spalteMitgliederAnzeigen = einstellungswert('spalte_mitglieder_zeigen');
if (!$spalteMitgliederAnzeigen) $sort = "vereinsname";
$query = "SELECT t1.verein_id, t1.vereinsname, t1.vereinssitz,"
. "\n t2.veranstalterbezeichnung, COUNT(*) As mitglieder"
. "\n FROM #__sportsmanager_verein AS t1"
. "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 USING (veranstalter_id)"
. "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS t3 USING (verein_id)"
. "\n WHERE t1.ausgetreten = 0 AND verstecken = 0"
. "\n WHERE t1.ausgetreten = 0 AND t1.verstecken = 0 AND t3.ausgetreten = 0"
. "\n GROUP BY t1.verein_id";
if ($sort == "mitglieder"){
$query .= "\n HAVING mitglieder >= " . einstellungswert('anzahl_mitglieder_zeigen');
@@ -3805,7 +3817,7 @@ function vereine($sort): void
}
$vereine = loadObjectList($db, $query);
HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen);
HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen, $spalteMitgliederAnzeigen);
administrationFooter();
}
@@ -3082,7 +3082,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
}
static function vereine($titel, $beschreibung, $rows, $organisationAnzeigen): void
static function vereine($titel, $beschreibung, $rows, $organisationAnzeigen, $spalteMitgliederAnzeigen): void
{
global $params;
if (!empty($titel)) { ?>
@@ -3122,10 +3122,13 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<?php echo Text::_('COM_SPORTSMANAGER_TEAM_NAME2'); ?>
</a>
</strong></th>
<?php if ($spalteMitgliederAnzeigen){ ?>
<th style='text-align: center;width: 120px;' nowrap><strong>
<a href="verband/vereine?view=sportsmanager&task=sort_by_mitglieder">
<?php echo Text::_('COM_SPORTSMANAGER_MEMBERS'); ?></a></strong></th>
<th style='text-align: left;' nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?></strong></th>
<th style='text-align: left;' nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?>
</strong></th>
<?php } ?>
<?php if ($organisationAnzeigen) { ?>
<th style='text-align: left;' nowrap>Organisation</th>
<?php } ?>
@@ -3153,9 +3156,11 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
<a href="<?php echo SportsManagerURL('&task=verein_details&id=' . $row->verein_id); ?>">
<?php echo htmlentities_utf8(NichtLeererString($row->vereinsname)); ?></a>
</td>
<?php if ($spalteMitgliederAnzeigen){ ?>
<td nowrap style="text-align: center">
<?php echo $row->mitglieder; ?>
</td>
<?php } ?>
<td style='text-align: left;' nowrap><?php if (!empty($row->vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?></td>
<?php if ($organisationAnzeigen) {
echo "<td nowrap style='text-align: left;'>" . $row->veranstalterbezeichnung . "</td>";
@@ -4277,9 +4282,16 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
}
}
static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert, $statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid, $einstufungid, $unabhaengige_ansicht, $details_anzeigen, $lizenz_anzeigen):void {
static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel,
$spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen,
$individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen,
$teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert,
$statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid,
$einstufungid, $unabhaengige_ansicht, $details_anzeigen, $lizenz_anzeigen):void {
global $params;
if (count($vereine) == 0){echo "Sie haben keine Berechtigung auf diesen Datensatz!!!"; die;}
?>
<table style="width: 100%; border: none; border-spacing: 0; padding: 3px">
<tr>
@@ -197,6 +197,7 @@ class JSON_sportsmanager
#[NoReturn] static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $elo_detailliert, $statistik, $einstufungen): void
{
if (count($vereine) == 0){die;}
$letzte_einzel = [];
$spieler->bild = playerImage($spieler->spieler_id, $spieler->geschlecht);
for ($i = sizeof($spieler_elo_verlauf_einzel) - 1; $i >= max(sizeof($spieler_elo_verlauf_einzel) - 10, 0); $i--) {
@@ -723,18 +723,13 @@ class HTML_sportsmanager_admin
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
for="show_member"><?php echo Text::_('COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT'); ?>
for="show_member_count"><?php echo Text::_('COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="anzahl_mitglieder_zeigen"
id="show_member" size="1">
<?php
for ($wert = 0; $wert <= 99; $wert++) {
echo "<option value=\"" . $wert . "\"" . (isset($einstellungen["anzahl_mitglieder_zeigen"]) && $einstellungen["anzahl_mitglieder_zeigen"] == $wert ? " selected" : "") . ">" . $wert . "</option>";
}
?>
</select>
<input style='height: 34px;' class="uk-select uk-form-width-medium" type="text"
value= <?php echo $einstellungen["anzahl_mitglieder_zeigen"]; ?>
id="show_member_count" name="anzahl_mitglieder_zeigen" placeholder="Zahl eingeben">
</td>
</tr>
<tr>
@@ -755,6 +750,24 @@ class HTML_sportsmanager_admin
</select>
</td>
</tr>
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
for="show_count_members"><?php echo Text::_('COM_SPORTSMANAGER_SHOW_MEMBER_COUNT'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="spalte_mitglieder_zeigen"
id="show_count_members" size="1">
<?php
$spalte_mitglieder_zeigen = array(1 => Text::_('JYES'), 0 => Text::_('JNO'));
foreach ($spalte_mitglieder_zeigen as $wert => $bezeichnung) {
echo "<option value=\"" . $wert . "\"" . (isset($einstellungen["spalte_mitglieder_zeigen"]) && $einstellungen["spalte_mitglieder_zeigen"] == $wert ? " selected" : "") . ">" . htmlentities_utf8($bezeichnung) . "</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
@@ -905,6 +918,35 @@ class HTML_sportsmanager_admin
class="button"/>
<input type="hidden" name="task" value="admin_einstellungen_save"/>
</form>
<script>
// Eingabefelder nur für Zahlen
function enableNumberOnly(input) {
// Blockiere alles außer Ziffern
input.addEventListener("beforeinput", function (e) {
if (e.data && /[^0-9]/.test(e.data)) {
e.preventDefault();
}
});
// Entferne führende Nullen
input.addEventListener("input", function () {
if (this.value.length > 1 && this.value.startsWith("0")) {
this.value = this.value.replace(/^0+/, "");
}
});
// Validiere beim Absenden
input.form.addEventListener("submit", function (e) {
if (input.value.trim() === "") {
e.preventDefault();
alert("Bitte eine Zahl eingeben das Feld darf nicht leer bleiben!");
input.focus();
}
});
}
enableNumberOnly(document.getElementById("show_member_count"));
</script>
<?php
}
@@ -315,8 +315,9 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="F&uuml;r andere Ansprechpartner"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Termine beantragten durch angemeldete Benutzer"
COM_SPORTSMANAGER_VIEW_ELO_RATING="Elo-Wertung anzeigen"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Lizenz anzeigen"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Mindest Mitgliederzahl zeigen"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Verband zeigen"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Mindest Mitgliederzahl zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Spalte Verband zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_MEMBER_COUNT="Spalte Mitglieder Zeigen (Vereine)"
COM_SPORTSMANAGER_SHOW_TOURNAMENT_BRACKET="Turnierbaum anzeigen"
COM_SPORTSMANAGER_PLAYER_DETAILS="Spielerdetails"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Spielerliste/-details"
@@ -315,8 +315,9 @@ COM_SPORTSMANAGER_FOR_OTHER_CONTACT="For other contact"
COM_SPORTSMANAGER_DATES_REGISTERED_USERS="Apply dates by registered users"
COM_SPORTSMANAGER_VIEW_ELO_RATING="View Elo rating"
COM_SPORTSMANAGER_VIEW_SPORTSMANAGER_LIZENZ="Show License"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Show least member count"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Show organisation"
COM_SPORTSMANAGER_VIEW_LEAST_MEMBER_COUNT="Show least member count (teams)"
COM_SPORTSMANAGER_SHOW_ORGANISATION="Show organisation (teams)"
COM_SPORTSMANAGER_SHOW_MEMBER_COUNT="Show member column (teams)"
COM_SPORTSMANAGER_SHOW_TOURNAMENT_BRACKET="Show Tournament Bracket"
COM_SPORTSMANAGER_PLAYER_DETAILS="Player details"
COM_SPORTSMANAGER_PLAYER_LIST_DETAILS="Player list details"