diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index deff560..20b3eff 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -9280,10 +9280,16 @@ function heimspieltag_aktualisieren($team_id): void $query = "SELECT begegnung_id, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" - . "\n WHERE heim_team_id = $team_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" + . "\n WHERE heim_team_id = $team_id AND COALESCE(heim_spielpunkte, 0) = 0" + . "\n AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id)" + . "\n AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id)" + . "\n AND NOT EXISTS(" + . "\n SELECT * FROM #__sportsmanager_begegnung_historie" + . "\n WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id" + . "\n AND #__sportsmanager_begegnung_historie.aktion NOT IN (11,12))" . "\n ORDER BY spieltag DESC"; $begegnungen = loadObjectList($db, $query); - foreach ($begegnungen as $begegnung) { + foreach ($begegnungen as $begegnung) { $ts = getdate(geaenderterWochentag(strtotime($begegnung->zeitpunkt), $team->heimspiel_wochentag - 1)); $neuer_zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100); $query = "UPDATE #__sportsmanager_begegnung" @@ -9303,7 +9309,13 @@ function termin_aktualisieren($begegnung_id): void $query = "SELECT heim_team_id, zeitpunkt" . "\n FROM #__sportsmanager_begegnung" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" - . "\n WHERE begegnung_id = $begegnung_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" + . "\n WHERE begegnung_id = $begegnung_id AND COALESCE(heim_spielpunkte, 0) = 0" + . "\n AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id)" + . "\n AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id)" + . "\n AND NOT EXISTS(" + . "\n SELECT * FROM #__sportsmanager_begegnung_historie" + . "\n WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id" + . "\n AND #__sportsmanager_begegnung_historie.aktion NOT IN (11,12))" . "\n ORDER BY spieltag DESC"; $begegnungen = loadObjectList($db, $query); if (count($begegnungen) < 1) @@ -10407,7 +10419,7 @@ function adminRemoveBegegnung(): void if (!$db->execute()) { die($db->stderr(true)); } - + termin_aktualisieren($id); redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id); diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index e965805..0fa7438 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5503,10 +5503,12 @@ function updateDatabase(): void $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } - $query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD COLUMN IF NOT EXISTS `regelwerke_id` INT(11) NOT NULL DEFAULT '0' AFTER `bezeichnung`;"; - $db->setQuery($query); - if (!$db->execute()) { die($db->stderr(true)); } - + $columns = $db->getTableColumns('#__sportsmanager_veranstaltung'); + if (!array_key_exists('regelwerke_id', $columns)) { + $query = "ALTER TABLE `#__sportsmanager_veranstaltung` ADD COLUMN `regelwerke_id` INT(11) NOT NULL DEFAULT '0' AFTER `bezeichnung`;"; + $db->setQuery($query); + if (!$db->execute()) { die($db->stderr(true)); } + } $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '114'" . "\n WHERE name = 'datenbank_version'"; @@ -5519,19 +5521,24 @@ function updateDatabase(): void if ($datenbank_version < 115) { // Erweiterung Tabelle #__sportsmanager_verschieberegel - $query = "ALTER TABLE `#__sportsmanager_verschieberegel`" - ."\n ADD COLUMN IF NOT EXISTS `begruendung_erforderlich` INT(1) NOT NULL DEFAULT 0 AFTER `ablehnen`," - ."\n ADD COLUMN IF NOT EXISTS `vereine_berechtigt` INT(1) NOT NULL DEFAULT 1 AFTER `begruendung_erforderlich`," - ."\n ADD COLUMN IF NOT EXISTS `verband_berechtigt` INT(1) NOT NULL DEFAULT 0 AFTER `vereine_berechtigt`;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); + $columns = $db->getTableColumns('#__sportsmanager_verschieberegel'); + if (!array_key_exists('begruendung_erforderlich', $columns) + || !array_key_exists('vereine_berechtigt', $columns) + || !array_key_exists('verband_berechtigt', $columns)) { + $query = "ALTER TABLE `#__sportsmanager_verschieberegel`" + . "\n ADD COLUMN `begruendung_erforderlich` INT(1) NOT NULL DEFAULT 0 AFTER `ablehnen`," + . "\n ADD COLUMN `vereine_berechtigt` INT(1) NOT NULL DEFAULT 1 AFTER `begruendung_erforderlich`," + . "\n ADD COLUMN `verband_berechtigt` INT(1) NOT NULL DEFAULT 0 AFTER `vereine_berechtigt`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } } - + $query = "INSERT IGNORE INTO `#__sportsmanager_email_vorlagen` (`email_vorlagen_id`, `vorlage`) VALUES (NULL, 'Spielverlegung');"; $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } - + $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '115'" . "\n WHERE name = 'datenbank_version'"; @@ -5540,25 +5547,33 @@ function updateDatabase(): void die($db->stderr(true)); } } - + if ($datenbank_version < 116) { - $query = "ALTER TABLE `#__sportsmanager_spielort`" - . "\n ADD IF NOT EXISTS `telefon` VARCHAR(64) NULL DEFAULT NULL AFTER `url`," - . "\n ADD IF NOT EXISTS `email` VARCHAR(64) NULL DEFAULT NULL AFTER `telefon`," - . "\n ADD IF NOT EXISTS `ruhetage` VARCHAR(64) NULL DEFAULT NULL AFTER `email`;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); + $columns = $db->getTableColumns('#__sportsmanager_spielort'); + if (!array_key_exists('telefon', $columns) + || !array_key_exists('email', $columns) + || !array_key_exists('ruhetage', $columns)) { + $query = "ALTER TABLE `#__sportsmanager_spielort`" + . "\n ADD `telefon` VARCHAR(64) NULL DEFAULT NULL AFTER `url`," + . "\n ADD `email` VARCHAR(64) NULL DEFAULT NULL AFTER `telefon`," + . "\n ADD `ruhetage` VARCHAR(64) NULL DEFAULT NULL AFTER `email`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } } - - $query = "ALTER TABLE `#__sportsmanager_team`" - . "\n ADD IF NOT EXISTS `trainingstage` VARCHAR(64) NULL DEFAULT NULL AFTER `heimspielort_id`;"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); + + $columns = $db->getTableColumns('#__sportsmanager_team'); + if (!array_key_exists('trainingstage', $columns)){ + $query = "ALTER TABLE `#__sportsmanager_team`" + . "\n ADD `trainingstage` VARCHAR(64) NULL DEFAULT NULL AFTER `heimspielort_id`;"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } } - + $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '116'" . "\n WHERE name = 'datenbank_version'"; @@ -5581,10 +5596,15 @@ function updateDatabase(): void $db->setQuery( $query ); if (!$db->execute()) { die($db->stderr(true)); } - $query = "ALTER TABLE #__sportsmanager_veranstaltung" - . "\n ADD IF NOT EXISTS explizite_strafen tinyint(4) DEFAULT '0' AFTER elo_wertung"; - $db->setQuery($query); - if (!$db->execute()) { die($db->stderr(true)); } + $columns = $db->getTableColumns('#__sportsmanager_veranstaltung'); + if (!array_key_exists('explizite_strafen', $columns)) { + $query = "ALTER TABLE #__sportsmanager_veranstaltung" + . "\n ADD explizite_strafen tinyint(4) DEFAULT '0' AFTER elo_wertung"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } $query = "UPDATE #__sportsmanager_einstellungen SET wert = '117' WHERE name = 'datenbank_version'"; $db->setQuery($query); @@ -5608,7 +5628,7 @@ function updateDatabase(): void if (!$db->execute()) { die($db->stderr(true)); } - + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_verbandsorgan` (" . "\n `mitglied_von_verbandsorgan_id` int(11) NOT NULL AUTO_INCREMENT," . "\n `verbandsorgane_id` int(11) DEFAULT NULL," @@ -5629,7 +5649,7 @@ function updateDatabase(): void if (!$db->execute()) { die($db->stderr(true)); } - + $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '118'" . "\n WHERE name = 'datenbank_version'"; @@ -5678,7 +5698,7 @@ function updateDatabase(): void if (!$db->execute()) { die($db->stderr(true)); } - + $query = "UPDATE #__sportsmanager_einstellungen" . "\n SET wert = '119'" . "\n WHERE name = 'datenbank_version'"; diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index cac7242..5757739 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -1832,14 +1832,15 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag) { - $gesamtpunkte = 1000; $anzahlSpiele = 1000; $platz = 0; $punktgleicheMannschaften = []; $korrekturen = []; - + $bufferplatz = []; + foreach($teams AS $team){ + $bufferplatz[$team->team_id]['platz'] = $team->platz; if (($gesamtpunkte != $team->gesamtpunkte) OR ($anzahlSpiele != $team->anzahl_spiele)){ $gesamtpunkte = $team->gesamtpunkte; $anzahlSpiele = $team->anzahl_spiele; @@ -1851,10 +1852,54 @@ function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag) $korrekturen[$platz] = $punktgleicheMannschaften[$platz]; } } - if (!empty($korrekturen)){ foreach($korrekturen AS $key => $korrektur){ $teamsKorrektur = getTabelleSpieltag($veranstaltung,$spieltag,$korrektur,$key-1); + foreach($teamsKorrektur AS $teamKorrektur){ + $teamKorrektur->platz_alt = $bufferplatz[$teamKorrektur->team_id]['platz']; + } + + if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7){ + usort($teamsKorrektur, fn($a, $b) => + [(float)$b->begegnungspunkte, (int)$a->anzahl_spiele, (float)$b->spielpunkte_differenz, (float)$b->punkte_differenz, (int)$a->platz_alt] + <=> + [(float)$a->begegnungspunkte, (int)$b->anzahl_spiele, (float)$a->spielpunkte_differenz, (float)$a->punkte_differenz, (int)$b->platz_alt] + ); + } + else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8){ + usort($teamsKorrektur, fn($a, $b) => + [(float)$b->begegnungspunkte, (int)$a->anzahl_spiele, (float)$b->spielpunkte_quotient, (float)$b->punkte_quotient, (int)$a->platz_alt] + <=> + [(float)$a->begegnungspunkte, (int)$b->anzahl_spiele, (float)$a->spielpunkte_quotient, (float)$a->punkte_quotient, (int)$b->platz_alt] + ); + } + else if ($veranstaltung->tabellenwertung == 10){ + usort($teamsKorrektur, fn($a, $b) => + [(float)$b->spielpunkte_differenz, (float)$b->punkte_differenz, (int)$a->platz_alt] + <=> + [(float)$a->spielpunkte_differenz, (float)$a->punkte_differenz, (int)$b->platz_alt] + ); + } + else if ($veranstaltung->tabellenwertung == 11){ + usort($teamsKorrektur, fn($a, $b) => + [(float)$b->spielpunkte_quotient, (float)$b->punkte_quotient, (int)$a->platz_alt] + <=> + [(float)$a->spielpunkte_quotient, (float)$a->punkte_quotient, (int)$b->platz_alt] + ); + } + else { + usort($teamsKorrektur, fn($a, $b) => + [(float)$b->begegnungspunkte, (int)$a->anzahl_spiele, (int)$a->platz_alt] + <=> + [(float)$a->begegnungspunkte, (int)$b->anzahl_spiele, (int)$b->platz_alt] + ); + } + + $neuerPlatz = $key; + foreach ($teamsKorrektur as $teamKorrektur) { + $teamKorrektur->platz = $neuerPlatz++; + } + foreach($teamsKorrektur AS $teamKorrektur){ foreach($teams AS $team){ if ($team->team_id == $teamKorrektur->team_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 6b2fe1d..bfdebfd 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -1709,7 +1709,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie