Ergebnisanzeige, Spielerstatistik, und die Spielfolge bleibt schmal

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.
This commit is contained in:
svennickel
2026-09-07 18:01:58 +02:00
parent 099174c0ef
commit 84211e9f9e
5 changed files with 67 additions and 16 deletions
@@ -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));
}
}
@@ -1597,7 +1597,21 @@ if (count($spiele) > 0) {
</td>
<td style="text-align: center" nowrap>
<?php echo str_replace(" ", " | ", $spiel->ergebnis_detailliert); ?>
<?php
// Der Stand des Spiels, und die Satzergebnisse dahinter, wo sie einzeln
// erfasst sind. Bisher stand hier NUR ergebnis_detailliert: bei reinem
// „Mehrere" ist das derselbe Stand, bei Erfassung je Satz sind es die
// Saetze — und dann fehlte, wer das Spiel gewonnen hat.
$stand = $spiel->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) . ' <small>(' . htmlentities_utf8($saetze) . ')</small>';
}
?>
</td>
<td>
@@ -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
<th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_DEFEATS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_DEFEATS_SHORTCUT'); ?></strong>
</th>
<?php
// Die Spalten summieren teamspiel_*_punkte — je punktetyp also Tore oder
// gewonnene Saetze. Umfasst die Bestenliste beides (oder auch
// Individualwettbewerbe), gibt es keine gemeinsame Einheit; dann steht
// „Punkte", statt eine zu behaupten.
$einheit_lang = $einheit === 0 ? 'COM_SPORTSMANAGER_GOALS'
: ($einheit === 1 ? 'COM_SPORTSMANAGER_SETS' : 'COM_SPORTSMANAGER_POINTS');
$einheit_kurz = $einheit === 0 ? 'COM_SPORTSMANAGER_GOALS_SHORTCUT'
: ($einheit === 1 ? 'COM_SPORTSMANAGER_SETS_SHORTCUT' : 'COM_SPORTSMANAGER_POINTS_SHORTCUT');
?>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GOALS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GOALS_SHORTCUT'); ?> +</strong>
title="<?php echo Text::_($einheit_lang); ?>">
<strong><?php echo Text::_($einheit_kurz); ?> +</strong>
</th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GOALS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GOALS_SHORTCUT'); ?> -</strong>
title="<?php echo Text::_($einheit_lang); ?>">
<strong><?php echo Text::_($einheit_kurz); ?> -</strong>
</th>
</tr>
<?php
@@ -5774,7 +5774,7 @@ class HTML_sportsmanager_admin
<table>
<tr>
<td nowrap>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="spiel_<?php echo $spiel_nr; ?>_heim" size="1"
onChange="zeilen_anzeigen();"
aria-label="<?php echo Text::sprintf('COM_SPORTSMANAGER_ARIA_LABEL_GAME_NUMBER_HOME', $spiel_nr); ?>">
@@ -5786,7 +5786,7 @@ class HTML_sportsmanager_admin
</select>
</td>
<td nowrap>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="spiel_<?php echo $spiel_nr; ?>_gast" size="1"
onChange="zeilen_anzeigen();"
aria-label="<?php echo Text::sprintf('COM_SPORTSMANAGER_ARIA_LABEL_GAME_NUMBER_GUEST', $spiel_nr); ?>">
@@ -5799,7 +5799,7 @@ class HTML_sportsmanager_admin
<label
for="match_<?php echo $spiel_nr; ?>_starting_team"><?php echo Text::_('COM_SPORTSMANAGER_EDITION'); ?>
:</label>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="spiel_<?php echo $spiel_nr; ?>_auflage"
id="match_<?php echo $spiel_nr; ?>_starting_team"
size="1">
@@ -5855,7 +5855,7 @@ class HTML_sportsmanager_admin
<table>
<tr>
<td nowrap>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="verknuepfung_<?php echo $verknuepfung_nr; ?>_doppel"
size="1"
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_GAME_LINK_DOUBLE'); ?>">
@@ -5868,7 +5868,7 @@ class HTML_sportsmanager_admin
</select>
</td>
<td nowrap>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="verknuepfung_<?php echo $verknuepfung_nr; ?>_einzel1"
size="1"
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_GAME_LINK_SINGLE'); ?>">
@@ -5881,7 +5881,7 @@ class HTML_sportsmanager_admin
</select>
</td>
<td nowrap>
<select class="uk-select uk-form-width-large"
<select class="uk-select uk-form-width-medium"
name="verknuepfung_<?php echo $verknuepfung_nr; ?>_einzel2"
size="1"
aria-label="<?php echo Text::_('COM_SPORTSMANAGER_ARIA_LABEL_GAME_LINK_SINGLE'); ?>">
@@ -161,6 +161,7 @@ COM_SPORTSMANAGER_GOALS_SHORTCUT="T"
COM_SPORTSMANAGER_SETS="Sätze"
COM_SPORTSMANAGER_POINT="Punkt"
COM_SPORTSMANAGER_POINTS="Punkte"
COM_SPORTSMANAGER_SETS_SHORTCUT="S"
COM_SPORTSMANAGER_POINTS_SHORTCUT="P"
COM_SPORTSMANAGER_ONE_POINT="1 Punkt"
COM_SPORTSMANAGER_NUMBER_POINTS="%d Punkte"
@@ -170,7 +171,7 @@ COM_SPORTSMANAGER_GAME_POINTS="Spielpunkte"
COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="SP"
COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (eine Mannschaft)"
COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (Mannschaften zusammen)"
COM_SPORTSMANAGER_DIFFERENCE="Differenz Tore"
COM_SPORTSMANAGER_DIFFERENCE="Differenz"
COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Differenz Spielpunkte"
COM_SPORTSMANAGER_POINTS_RATIO="Verh&auml;ltnis Spielpunkte"
COM_SPORTSMANAGER_SCHEDULE_DATE="Zeitpunkt"
@@ -161,6 +161,7 @@ COM_SPORTSMANAGER_GOALS_SHORTCUT="G"
COM_SPORTSMANAGER_SETS="Sets"
COM_SPORTSMANAGER_POINT="Point"
COM_SPORTSMANAGER_POINTS="Points"
COM_SPORTSMANAGER_SETS_SHORTCUT="S"
COM_SPORTSMANAGER_POINTS_SHORTCUT="P"
COM_SPORTSMANAGER_ONE_POINT="1 point"
COM_SPORTSMANAGER_NUMBER_POINTS="%d points"
@@ -170,7 +171,7 @@ COM_SPORTSMANAGER_GAME_POINTS="Game points"
COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="GP"
COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (one team)"
COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (teams together)"
COM_SPORTSMANAGER_DIFFERENCE="Goal difference"
COM_SPORTSMANAGER_DIFFERENCE="Difference"
COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Difference in game points"
COM_SPORTSMANAGER_POINTS_RATIO="Game points ratio"
COM_SPORTSMANAGER_SCHEDULE_DATE="Appointment date"