From b112b4dc313b8f0feb294da719196a55d1979ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Sat, 4 Apr 2026 12:42:07 +0200 Subject: [PATCH] =?UTF-8?q?Effizienzindex=20und=20Punkteschnitt=20zu=20Spi?= =?UTF-8?q?elerstatistoken=20hinzugef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com_sportsmanager/sportsmanager.php | 62 +++++++++++++++++-- .../views/sportsmanager/view.html.php | 25 +++++++- .../views/sportsmanager/view_admin.php | 9 +-- .../de-DE/de-DE.com_sportsmanager.ini | 8 ++- .../en-GB/en-GB.com_sportsmanager.ini | 8 ++- 5 files changed, 93 insertions(+), 19 deletions(-) diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 96725d2..0ff9d98 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -7312,6 +7312,7 @@ function spielerstatistiken(): void $details_anzeigen = currentUserHasAccessToDetails(); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); @@ -7341,10 +7342,22 @@ function spielerstatistiken(): void . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; $spielerstatistiken = loadObjectList($db, $query); - HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, "", null, null); foreach ($spielerstatistiken as $spielerstatistik) { - $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname," + //Mindestzahl an Spielen + $spiele = null; + $spielerstatistik->min_spiele = 0; + if (in_array($spielerstatistik->tabellenwertung, [4, 5])) { + $query = "SELECT siege + unentschieden + niederlagen AS spiele" + . "\n FROM #__sportsmanager_bestenliste_punkte" + . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id" + . "\n ORDER BY spiele DESC;"; + $max_spiele = loadResult($db, $query); + $spielerstatistik->min_spiele = round($max_spiele/2); + } + $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname," + . "\n siege + unentschieden + niederlagen AS spiele," . "\n #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht," . "\n #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden," . "\n spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2," @@ -7359,11 +7372,16 @@ function spielerstatistiken(): void $query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren)), 0) AS leistungsindex"; } else if ($spielerstatistik->tabellenwertung == 3){ $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * 2 + unentschieden + punkte_gewonnen - punkte_verloren, 0) AS leistungsindex"; + } else if ($spielerstatistik->tabellenwertung == 4){ + $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen*100 / (punkte_gewonnen + punkte_verloren),2), 0) AS leistungsindex"; + } else if ($spielerstatistik->tabellenwertung == 5){ + $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen / (siege + unentschieden + niederlagen),2), 0) AS leistungsindex"; } $query .= "\n FROM #__sportsmanager_bestenliste_punkte" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" - . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; + . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id" + . "\n AND siege + unentschieden + niederlagen >= $spielerstatistik->min_spiele"; if ($spielerstatistik->tabellenwertung == 0) $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; else @@ -7379,6 +7397,7 @@ function spielerstatistiken(): void function spielerstatistik(): void { $db = getDatabase(); + global $params; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $id = $jInput->get('id', 0, 'INT'); @@ -7394,6 +7413,7 @@ function spielerstatistik(): void } } $details_anzeigen = currentUserHasAccessToDetails(); + $filter_min_spiele = $jInput->get('filter_min_spiele', 999, 'INT'); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); if ($filter_saison_id == 0) { $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); @@ -7430,9 +7450,33 @@ function spielerstatistik(): void } $spielerstatistik = $rows[0]; + //Mindestzahl an Spielen + $spiele = null; + $spielerstatistik->min_spiele = 0; + if (in_array($spielerstatistik->tabellenwertung, [4, 5])) { + $query = "SELECT siege + unentschieden + niederlagen AS spiele" + . "\n FROM #__sportsmanager_bestenliste_punkte" + . "\n WHERE bestenliste_id = $id" + . "\n ORDER BY spiele DESC;"; + $max_spiele = loadResult($db, $query); + if ($max_spiele > 0){ + $offset = $max_spiele/10; + $spiele[0] = "Alle zeigen"; + for($i = 1; $i <= 10; $i++){ + $spiele[round($offset*$i)] = $i*10 . "%"; + } + } + $spielerstatistik->max_spiele = $max_spiele; + if ($filter_min_spiele == 999) + $spielerstatistik->min_spiele = round($max_spiele/2); + else if ($filter_min_spiele != 999) + $spielerstatistik->min_spiele = $filter_min_spiele; + } + // Spielerstatistikpunkte ermitteln $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname," - . "\n #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden," + . "\n siege + unentschieden + niederlagen AS spiele," + . "\n #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden," . "\n spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2," . "\n spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2," . "\n IF(siege > 0 OR unentschieden > 0, ROUND(((siege * 2 + unentschieden)*100) / ((siege + unentschieden + niederlagen)*2)), 0) AS quotient"; @@ -7444,11 +7488,16 @@ function spielerstatistik(): void $query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren)), 0) AS leistungsindex"; } else if ($spielerstatistik->tabellenwertung == 3){ $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * 2 + unentschieden + punkte_gewonnen - punkte_verloren, 0) AS leistungsindex"; + } else if ($spielerstatistik->tabellenwertung == 4){ + $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen*100 / (punkte_gewonnen + punkte_verloren),2), 0) AS leistungsindex"; + } else if ($spielerstatistik->tabellenwertung == 5){ + $query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen / (siege + unentschieden + niederlagen),2), 0) AS leistungsindex"; } $query .= "\n FROM #__sportsmanager_bestenliste_punkte" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" - . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; + . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id" + . "\n AND siege + unentschieden + niederlagen >= $spielerstatistik->min_spiele"; if ($spielerstatistik->tabellenwertung == 0) { $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; } else { @@ -7460,7 +7509,7 @@ function spielerstatistik(): void $query = "SELECT *" . "\n FROM #__sportsmanager_bestenliste" . "\n WHERE status > 0" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") - . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; $rows = loadObjectList($db, $query); $n = count($rows); @@ -7482,6 +7531,7 @@ function spielerstatistik(): void if (isJson()) { JSON_sportsmanager::spielerstatistik($spielerstatistik_punkte); } else { + HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, $id, $spiele, $spielerstatistik->min_spiele); HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen); } 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 f83b9c7..af4be4d 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -6016,9 +6016,10 @@ static function turniervoranmeldungen($disziplin, $meldungenSpielerSortiert, $me
0) { + if (!empty($saisons) || !empty($spiele)) { ?>
+ - + + + + @@ -6060,6 +6078,7 @@ static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filte
+
Text::_('COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE'), - 1 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX'), + $typ = array(0 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX0'), + 1 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX1'), 2 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX2'), 3 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX3'), - 4 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX4')); - for ($i = 0; $i <= 3; $i++) { + 4 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX4'), + 5 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX5')); + for ($i = 0; $i <= 5; $i++) { echo ""; } ?> diff --git a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini index 8725ba3..a06c9aa 100644 --- a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini +++ b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini @@ -550,11 +550,12 @@ COM_SPORTSMANAGER_NO_RATING="Keine Wertung" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe" COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich" -COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" -COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..." +COM_SPORTSMANAGER_PERFORMANCE_INDEX0="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" +COM_SPORTSMANAGER_PERFORMANCE_INDEX1="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX3="Race Performance Index (Siege*2 + Unentschieden + Tordifferenz)" COM_SPORTSMANAGER_PERFORMANCE_INDEX4="Effizienzindex (G+ / (G+ + G-))" +COM_SPORTSMANAGER_PERFORMANCE_INDEX5="Punkteschnitt (SP+ / Anzahl Sätze)" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Einzelstatistik aus allen Spielen" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Einzelstatistik aus Einzel-Spielen" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Einzelstatistik aus Doppel-Spielen" @@ -1100,4 +1101,5 @@ COM_SPORTSMANAGER_SWAP_MATCH="Heimrechttausch" COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="Der Spielbericht wird zusammen mit allen historischen Einträgen gelöscht. Willst du den Spielbericht wirklich löschen?" COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Spielbericht gelöscht" COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="Der Spielbericht wurde erfolgreich gelöscht!" -COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur" \ No newline at end of file +COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur" +COM_SPORTSMANAGER_MIN_MATCHES="Mindestzahl Spiele" \ No newline at end of file diff --git a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini index bfd2e98..ecdcd3b 100644 --- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini +++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini @@ -550,11 +550,12 @@ COM_SPORTSMANAGER_NO_RATING="No rating" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions" COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record" -COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference" -COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..." +COM_SPORTSMANAGER_PERFORMANCE_INDEX0="Game points won, game points lost, point difference" +COM_SPORTSMANAGER_PERFORMANCE_INDEX1="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX3="Race Performance Index (victories*2 + draws + goal difference)" COM_SPORTSMANAGER_PERFORMANCE_INDEX4="Efficency index (G+ / (G+ + G-))" +COM_SPORTSMANAGER_PERFORMANCE_INDEX5="Set point average (SP+ / count sets)" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Individual statistics of all games" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Individual statistics of singles games" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Individual statistics of doubles games" @@ -1100,4 +1101,5 @@ COM_SPORTSMANAGER_SWAP_MATCH="Swap home advantage" COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="The match report and all its history will be deleted. Are you sure you want to delete the match report?" COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Match report deleted" COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="The match report has been successfully deleted!" -COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected" \ No newline at end of file +COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected" +COM_SPORTSMANAGER_MIN_MATCHES="Min count matches" \ No newline at end of file