Einige Optimierungen durchgeführt.

This commit is contained in:
Jürgen Meyer
2025-08-01 16:02:32 +02:00
parent 3e577f6be1
commit 850fd2c079
3 changed files with 70 additions and 124 deletions
@@ -5267,54 +5267,24 @@ function updateDatabase(): void
}
if ($datenbank_version < 104) {
$query = $db->getQuery(true)
->select('COUNT(*)')
->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_veranstaltung')))
->where('COLUMN_NAME = ' . $db->quote('direktervergleich'));
$db->setQuery($query);
$exists = (bool)$db->loadResult();
if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_veranstaltung ADD direktervergleich INT(4) NOT NULL DEFAULT '0' AFTER tabellenwertung;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = $db->getQuery(true)
->select('COUNT(*)')
->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_team')))
->where('COLUMN_NAME = ' . $db->quote('setzliste_nr'));
$db->setQuery($query);
$exists = (bool)$db->loadResult();
if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = $db->getQuery(true)
->select('COUNT(*)')
->from('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME = ' . $db->quote($db->replacePrefix('#__sportsmanager_begegnung')))
->where('COLUMN_NAME = ' . $db->quote('spiel_nr'));
$db->setQuery($query);
$exists = (bool)$db->loadResult();
if (!$exists) {
$query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "ALTER TABLE #__sportsmanager_team ADD setzliste_nr INT(4) NULL DEFAULT NULL AFTER veranstaltung_id;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "ALTER TABLE #__sportsmanager_begegnung ADD spiel_nr INT(4) NULL DEFAULT NULL AFTER spieltag;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '104'"
@@ -1620,7 +1620,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_komplett = count($spieltage);
$anzahl_spieltage_komplett = $db->loadResult();
// Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde
$query = "SELECT DISTINCT spieltag"
@@ -1634,7 +1634,6 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_gespielt = count($spieltage);
$aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0;
if ($spieltag == 0 || $veranstaltung->tabellenwertung >= 21)
@@ -1644,45 +1643,11 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$teams = getTabelleAktuellerSpieltag($veranstaltung);
} else {
$teams = getTabelleSpieltag($veranstaltung,$spieltag);
if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag);
}
}
if ($veranstaltung->direktervergleich AND $spieltag >= $anzahl_spieltage_komplett/2){
$Gesamtpunkte = 1000;
$Anzahl_Spiele = 1000;
$Platz = 0;
foreach($teams AS $key => $value){
if (($Gesamtpunkte != $value->gesamtpunkte) OR ($Anzahl_Spiele != $value->anzahl_spiele)){
$Gesamtpunkte = $value->gesamtpunkte;
$Anzahl_Spiele = $value->anzahl_spiele;
$Platz = $value->platz;
@$Punktgleiche_Mannschaften[$Platz] = $value->team_id;
}
else{
@$Punktgleiche_Mannschaften[$Platz] .= ",".$value->team_id;
@$Korrektur[$Platz] = $Punktgleiche_Mannschaften[$Platz];
}
}
if (isset($Korrektur)){
foreach($Korrektur AS $key => $value){
$teams_korrektur = getTabelleSpieltag($veranstaltung,$spieltag,$value,$key-1);
foreach($teams_korrektur AS $key1 => $value1){
foreach($teams AS $key2 => $value2){
if ($value2->team_id == $value1->team_id){
$value2->platz = $value1->platz;
}
}
}
}
}
//Tabelle neu sortieren
usort($teams, function($a, $b) {
return $a->platz <=> $b->platz;
});
}
if (isJson()) {
return JSON_sportsmanager::tabelleAnzeigen($modus, $teams);
} else {
@@ -1707,6 +1672,49 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
return "";
}
function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag)
{
$gesamtpunkte = 1000;
$anzahlSpiele = 1000;
$platz = 0;
$punktgleicheMannschaften = [];
$korrekturen = [];
foreach($teams AS $team){
if (($gesamtpunkte != $team->gesamtpunkte) OR ($anzahlSpiele != $team->anzahl_spiele)){
$gesamtpunkte = $team->gesamtpunkte;
$anzahlSpiele = $team->anzahl_spiele;
$platz = $team->platz;
$punktgleicheMannschaften[$platz] = $team->team_id;
}
else{
$punktgleicheMannschaften[$platz] .= ",".$team->team_id;
$korrekturen[$platz] = $punktgleicheMannschaften[$platz];
}
}
if (!empty($korrekturen)){
foreach($korrekturen AS $key => $korrektur){
$teamsKorrektur = getTabelleSpieltag($veranstaltung,$spieltag,$korrektur,$key-1);
foreach($teamsKorrektur AS $teamKorrektur){
foreach($teams AS $team){
if ($team->team_id == $teamKorrektur->team_id){
$team->platz = $teamKorrektur->platz;
}
}
}
}
}
//Tabelle neu sortieren
usort($teams, function($a, $b) {
return $a->platz <=> $b->platz;
});
return $teams;
}
function getTabelleAktuellerSpieltag($veranstaltung)
{
$db = getDatabase();
@@ -1721,8 +1729,7 @@ function getTabelleAktuellerSpieltag($veranstaltung)
if (!$db->execute()) {
die($db->stderr(true));
}
$teams = $db->loadObjectList();
return $teams;
return $db->loadObjectList();
}
function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_platz = 0)
@@ -1773,7 +1780,7 @@ function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_
$query .= "\n ORDER BY spielpunkte_quotient DESC, punkte_quotient DESC, teamname";
else
$query .= "\n ORDER BY gesamtpunkte DESC, anzahl_spiele ASC, teamname";
//echo $query;
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
@@ -4970,7 +4977,7 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_komplett = count($spieltage);
$anzahl_spieltage_komplett = $db->loadResult();
// Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde
$query = "SELECT DISTINCT spieltag"
@@ -4984,43 +4991,12 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
die($db->stderr(true));
}
$spieltage = $db->loadObjectList();
$anzahl_spieltage_gespielt = count($spieltage);
$anzahl_spieltage_gespielt = $db->loadResult();
$aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0;
// Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind.
if ($veranstaltung->direktervergleich AND $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2){
$Gesamtpunkte = 1000;
$Anzahl_Spiele = 1000;
$Platz = 0;
foreach($teams AS $key => $value){
if (($Gesamtpunkte != $value->gesamtpunkte) OR ($Anzahl_Spiele != $value->anzahl_spiele)){
$Gesamtpunkte = $value->gesamtpunkte;
$Anzahl_Spiele = $value->anzahl_spiele;
$Platz = $value->platz;
@$Punktgleiche_Mannschaften[$Platz] = $value->team_id;
}
else{
@$Punktgleiche_Mannschaften[$Platz] .= ",".$value->team_id;
@$Korrektur[$Platz] = $Punktgleiche_Mannschaften[$Platz];
}
}
if (isset($Korrektur)){
foreach($Korrektur AS $key => $value){
$teams_korrektur = getTabelleSpieltag($veranstaltung,999,$value,$key-1);
foreach($teams_korrektur AS $key1 => $value1){
foreach($teams AS $key2 => $value2){
if ($value2->team_id == $value1->team_id){
$value2->platz = $value1->platz;
}
}
}
}
}
//Tabelle neu sortieren
usort($teams, function($a, $b) {
return $a->platz <=> $b->platz;
});
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag);
}
$platz = 1;
@@ -7206,7 +7206,7 @@ class HTML_sportsmanager_admin
</tr>
<tr id="tr_hthr">
<td nowrap style="width: 20%; text-align: right">
<label for="direktervergleich"><?php echo Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD'); ?>
<label for="dd_hthr"><?php echo Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD'); ?>
:</label>
</td>
<td nowrap>