From 84211e9f9e6eee55ee073585c97124d6ae44cf7e Mon Sep 17 00:00:00 2001 From: svennickel Date: Mon, 7 Sep 2026 18:01:58 +0200 Subject: [PATCH] Ergebnisanzeige, Spielerstatistik, und die Spielfolge bleibt schmal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drei weitere Punkte aus dem Review. 1. ERGEBNISANZEIGE BEI SAETZEN. Im Spielbericht stand je Spiel NUR ergebnis_detailliert. Bei reinem „Mehrere" ist das derselbe Satzstand — bei Erfassung je Satz sind es die Saetze, und dann fehlte, wer das Spiel gewonnen hat. Gemessen: die Zeilen lasen „6:3 | 3:6" ohne jede Angabe des Standes. Jetzt steht der Stand davor und die Saetze in Klammern dahinter: „1:1 (6:3 | 3:6)", „2:1 (6:3 | 3:6 | 6:4)". Wo beides dasselbe ist („Einer", oder „Mehrere" ohne Satzerfassung), bleibt es einzeilig — gegengeprueft an einer Begegnung aus der Einer-Zeit: unveraendert „6:3", nichts doppelt. Ein nicht gespieltes Spiel bleibt leer und zeigt kein „0:0". 2. SPIELERSTATISTIK. Die Spalten „T +/-" summieren teamspiel_*_punkte, zaehlen also je punktetyp Tore oder gewonnene Saetze — hiessen aber immer „Tore". Anders als in der Tabelle gibt es hier nicht einen Modus: eine Bestenliste kann mehrere Wettbewerbe umfassen, sogar Individualwettbewerbe. spielerstatistikEinheit() liest deshalb den punktetyp der speisenden Wettbewerbe; sind sie einig, steht die richtige Einheit, sonst „Punkte" — statt eine zu behaupten, die nicht fuer alle Zeilen gilt. Neuer Schluessel COM_SPORTSMANAGER_SETS_SHORTCUT in beiden Sprachen. Alle drei Faelle gemessen: nur „Mehrere" -> „S +/-" mit „Saetze", gemischt -> „P +/-" mit „Punkte", zurueck -> wieder „S". Und der Tooltip der Tabellenspalte hiess COM_SPORTSMANAGER_DIFFERENCE = „Differenz Tore", widersprach also der neuen Beschriftung „Saetze". Er nennt jetzt nur die Rechenart („Differenz"), wie sein Geschwister „Verhaeltnis" schon immer; die Einheit steht in der Spalte. Einzige Verwendungsstelle. 3. SPIELFOLGE. Die sechs Auswahlfelder der Spielfolge und der Verknuepfungen stehen wieder auf medium — sie tragen kurze Werte und sollten nicht mitwachsen. Breit bleiben nur die 33 Felder der Einstellungen, wo die langen Beschriftungen stehen. --- .../com_sportsmanager/sportsmanager.php | 29 +++++++++++++-- .../views/sportsmanager/view.html.php | 36 +++++++++++++++---- .../views/sportsmanager/view_admin.php | 12 +++---- .../de-DE/de-DE.com_sportsmanager.ini | 3 +- .../en-GB/en-GB.com_sportsmanager.ini | 3 +- 5 files changed, 67 insertions(+), 16 deletions(-) diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 9ca9fa5..0bd74c7 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -7786,6 +7786,31 @@ function turniervoranmeldungen(): void administrationFooter(); } +/// Die Einheit der Spalten „T +/-" einer Bestenliste: 0 = Tore, 1 = Saetze, null = gemischt +/// oder unbekannt. Die Werte sind die Summe der teamspiel_*_punkte, und die zaehlen je +/// punktetyp Tore oder gewonnene Saetze. Eine Bestenliste kann mehrere Wettbewerbe umfassen — +/// dann gibt es keine gemeinsame Einheit. +function spielerstatistikEinheit($bestenliste_id): ?int +{ + $db = getDatabase(); + $query = "SELECT DISTINCT punktetyp" + . "\n FROM #__sportsmanager_bestenliste_veranstaltung" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_teamspiel_modus ON teamspiel_modus_id = modus_id" + . "\n WHERE bestenliste_id = " . (int)$bestenliste_id; + $rows = loadObjectList($db, $query); + if (count($rows) != 1) { + return null; + } + // Individualwettbewerbe kennen keinen punktetyp; sind welche dabei, ist die Einheit offen. + $query = "SELECT COUNT(*) FROM #__sportsmanager_bestenliste_individualwettbewerb" + . "\n WHERE bestenliste_id = " . (int)$bestenliste_id; + if (!empty(loadResult($db, $query))) { + return null; + } + return (int)$rows[0]->punktetyp; +} + function spielerstatistiken(): void { $db = getDatabase(); @@ -7870,7 +7895,7 @@ function spielerstatistiken(): void $query .= "\n ORDER BY leistungsindex DESC, quotient DESC, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; $spielerstatistik_punkte = loadObjectList($db, $query); - HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, FALSE, 0, 0, 0, $details_anzeigen); + HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, FALSE, 0, 0, 0, $details_anzeigen, spielerstatistikEinheit($spielerstatistik->bestenliste_id)); } administrationFooter(); @@ -8030,7 +8055,7 @@ function spielerstatistik(): void JSON_sportsmanager::spielerstatistik($spielerstatistik_punkte); } else { HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, $id, $spiele, $spielerstatistik->min_spiele, $teams, $filter_teams); - HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen); + HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen, spielerstatistikEinheit($spielerstatistik->bestenliste_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 fc2fae1..a0744bf 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -1597,7 +1597,21 @@ if (count($spiele) > 0) { - ergebnis_detailliert); ?> + teamspiel_heim_punkte . ':' . $spiel->teamspiel_gast_punkte; + $saetze = str_replace(" ", " | ", (string)$spiel->ergebnis_detailliert); + if ($saetze === '' && $spiel->teamspiel_heim_punkte == 0 && $spiel->teamspiel_gast_punkte == 0) { + // Nicht gespielt: wie bisher leer, kein „0:0". + } else if ($saetze === '' || $saetze === $stand) { + echo htmlentities_utf8($saetze !== '' ? $saetze : $stand); + } else { + echo htmlentities_utf8($stand) . ' (' . htmlentities_utf8($saetze) . ')'; + } + ?> @@ -6780,7 +6794,7 @@ static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filte } } -static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $allein_angezeigt, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen): void +static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $allein_angezeigt, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen, ?int $einheit = null): void { global $params; if ($allein_angezeigt) { @@ -6934,13 +6948,23 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a + - + + title=""> + + - - + title=""> + - - - @@ -5855,7 +5855,7 @@ class HTML_sportsmanager_admin
- - -