Merge pull request #278 from Deutscher-Tischfussballbund/sportsmanager2-issue276

Optimization of direct comparison
This commit is contained in:
MarvinF
2026-04-05 19:07:34 +02:00
committed by GitHub
5 changed files with 51 additions and 14 deletions
@@ -1805,7 +1805,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$teams = getTabelleAktuellerSpieltag($veranstaltung); $teams = getTabelleAktuellerSpieltag($veranstaltung);
} else { } else {
$teams = getTabelleSpieltag($veranstaltung,$spieltag); $teams = getTabelleSpieltag($veranstaltung,$spieltag);
if ($veranstaltung->direktervergleich && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){ if ($veranstaltung->direktervergleich > 0 && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag); $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag);
} }
} }
@@ -1833,17 +1833,40 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag) function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag)
{ {
$gesamtpunkte = 1000; $gesamtpunkte = 1000;
$anzahlSpiele = 1000; $anzahl_spiele = 1000;
$punkte_differenz = 1000;
$punkte_quotient = 1000.0000;
$spielpunkte_differenz = 1000;
$spielpunkte_quotient = 1000.0000;
$platz = 0; $platz = 0;
$punktgleicheMannschaften = []; $punktgleicheMannschaften = [];
$korrekturen = []; $korrekturen = [];
$bufferplatz = []; $bufferplatz = [];
foreach($teams AS $team){ foreach($teams AS $team){
$bufferplatz[$team->team_id]['platz'] = $team->platz; $bufferplatz[$team->team_id]['platz'] = $team->platz;
if (($gesamtpunkte != $team->gesamtpunkte) OR ($anzahlSpiele != $team->anzahl_spiele)){ $unterschied = false;
if (($gesamtpunkte != $team->gesamtpunkte) || ($anzahl_spiele != $team->anzahl_spiele))
$unterschied = true;
if ($veranstaltung->direktervergleich >= 2 && in_array($veranstaltung->tabellenwertung, [1,4,7,10]) && $spielpunkte_differenz != $team->spielpunkte_differenz)
$unterschied = true;
if ($veranstaltung->direktervergleich >= 2 && in_array($veranstaltung->tabellenwertung, [2,5,8,11]) && $spielpunkte_quotient != $team->spielpunkte_quotient)
$unterschied = true;
if ($veranstaltung->direktervergleich == 3 && in_array($veranstaltung->tabellenwertung, [1,4,7,10]) && $punkte_differenz != $team->punkte_differenz)
$unterschied = true;
if ($veranstaltung->direktervergleich == 3 && in_array($veranstaltung->tabellenwertung, [2,5,8,11]) && $punkte_quotient != $team->punkte_quotient)
$unterschied = true;
if ($unterschied)
{
$gesamtpunkte = $team->gesamtpunkte; $gesamtpunkte = $team->gesamtpunkte;
$anzahlSpiele = $team->anzahl_spiele; $anzahl_spiele = $team->anzahl_spiele;
$punkte_differenz = $team->punkte_differenz;
$punkte_quotient = $team->punkte_quotient;
$spielpunkte_differenz = $team->spielpunkte_differenz;
$spielpunkte_quotient = $team->spielpunkte_quotient;
$platz = $team->platz; $platz = $team->platz;
$punktgleicheMannschaften[$platz] = $team->team_id; $punktgleicheMannschaften[$platz] = $team->team_id;
} }
@@ -5270,7 +5293,7 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
} }
// Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind. // Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind.
if ($veranstaltung->direktervergleich && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){ if ($veranstaltung->direktervergleich > 0 && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag); $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag);
} }
@@ -5284,7 +5307,10 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
$buchholz1_wert = 0; $buchholz1_wert = 0;
$buchholz2_wert = 0; $buchholz2_wert = 0;
foreach ($teams as $team) { foreach ($teams as $team) {
if ($platz == 1 || (($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte) || (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz)) || (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11 || $veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient)) || (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert))) if ($platz == 1 || (($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte)
|| (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz))
|| (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11 || $veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient))
|| (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert)))
$tatsaechlicher_platz = $platz; $tatsaechlicher_platz = $platz;
$query = "UPDATE #__sportsmanager_team" $query = "UPDATE #__sportsmanager_team"
. "\n SET platz = $tatsaechlicher_platz"; . "\n SET platz = $tatsaechlicher_platz";
@@ -1697,7 +1697,6 @@ if (count($spiele) > 0) {
static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, int $praesentation = 0): void static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, int $praesentation = 0): void
{ {
global $params; global $params;
if (count($teams) > 0) { if (count($teams) > 0) {
if ($alleine_angezeigt && $veranstaltung->tabellenwertung >= -1 && $veranstaltung->tabellenwertung <= 11 && count($spieltage) > 1) { if ($alleine_angezeigt && $veranstaltung->tabellenwertung >= -1 && $veranstaltung->tabellenwertung <= 11 && count($spieltage) > 1) {
?> ?>
@@ -9435,12 +9435,16 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
:</label> :</label>
</td> </td>
<td nowrap> <td nowrap>
<select class="uk-select uk-form-width-medium" name="direktervergleich" id="dd_hthr" size="1"> <select class="uk-select uk-form-width-large" name="direktervergleich" id="dd_hthr" size="1">
<?php <?php
$direktervergleich = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES')); $typ = array(
for ($i = 0; $i <= 1; $i++) { 0 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT'),
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->direktervergleich == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($direktervergleich[$i]) . "</option>"; 1 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS'),
} 2 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS'),
3 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS')
);
foreach ($typ as $typ_wert => $typ_bezeichnung)
echo "<option value=\"" . $typ_wert . "\"" . ($row != null ? ($row->direktervergleich == $typ_wert ? " selected" : "") : "") . ">" . htmlentities_utf8($typ_bezeichnung) . "</option>";
?> ?>
</select> </select>
</td> </td>
@@ -9662,7 +9666,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
function pruefeAnzeige() { function pruefeAnzeige() {
const wert = parseInt(dropdown.value); const wert = parseInt(dropdown.value);
if (wert >= 1 && wert <= 9) { if (wert >= 1 && wert <= 11) {
zeile.style.display = ""; zeile.style.display = "";
} else { } else {
zeile.style.display = "none"; zeile.style.display = "none";
@@ -550,6 +550,10 @@ COM_SPORTSMANAGER_NO_RATING="Keine Wertung"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe"
COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung" COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT="deaktiviert"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS="bei gleicher Punktzahl"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS="bei gleicher Punktzahl, Satzpunkte"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS="bei gleicher Punktzahl, Satzpunkte, Tore"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" 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_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..."
@@ -550,6 +550,10 @@ COM_SPORTSMANAGER_NO_RATING="No rating"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions"
COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating" COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT="Off"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS="Tie: pts"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS="Tie: pts, set points"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS="Tie: pts, set points, goals"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference" 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_INDEX="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_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..."