From 7f1bedc41ebf804b82629a82e4787b09c28a0819 Mon Sep 17 00:00:00 2001 From: svennickel Date: Tue, 8 Sep 2026 18:17:24 +0200 Subject: [PATCH] Kommentare aus dem Quelltext entfernen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aus dem Review: „Der Quelltext ist absolut ueberkommentiert." Nach dem Kuerzen in 554ad25 jetzt vollstaendig — 294 Kommentarzeilen aus fuenf Dateien. Nachgewiesen unveraendert: der Diff ohne Kommentar- und Leerzeilen gegen 5aee028 ist vor und nach dieser Aenderung derselbe (gleiche Pruefsumme). Es ist also ausschliesslich Kommentar entfernt worden, keine Zeile Programmtext. Entfernt wurden nur die von diesem Zweig HINZUGEFUEGTEN Kommentare; jeder Kommentar, der im alten Stand schon stand, bleibt unangetastet (auch dort, wo Formularzeilen verschoben wurden). --- .../components/com_sportsmanager/admin.php | 80 -------- .../com_sportsmanager/database/update.php | 22 -- .../com_sportsmanager/sportsmanager.php | 18 -- .../views/sportsmanager/view.html.php | 15 -- .../views/sportsmanager/view_admin.php | 191 ------------------ 5 files changed, 326 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 52a8c81..19c748f 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -2683,7 +2683,6 @@ function adminImportSpieler(): void if (!ini_get('safe_mode')) set_time_limit(300); - if (!$beschraenkter_zugriff || $ansprechpartner_importieren != 1) $persoenliche_daten = $jInput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" else @@ -3825,7 +3824,6 @@ function adminVereineZusammenlegenForm(): void $spieler_id = $row->spieler_id; } - $query = "UPDATE #__sportsmanager_team" . "\n SET verein_id = $verein_beizubehalten_id" . "\n WHERE verein_id = $verein_zu_entfernen_id"; @@ -4553,10 +4551,6 @@ function adminEditTeamspielmodus(): void $row = $rows[0]; } - // Ob unter diesem Spielplan schon Ergebnisse stehen. „Saetze pro Spiel" zu aendern - // rechnet naemlich nichts um — aus sechs Toren werden sechs Saetze, und aus drei - // Saetzen drei Tore. Das laesst sich auch nicht umrechnen (aus „drei gewonnene - // Saetze" folgt keine Torzahl), also wird davor gewarnt statt gehandelt. if ($row != null) { $query = "SELECT COUNT(*) AS anzahl" . "\n FROM #__sportsmanager_teamspiel AS t" @@ -4581,11 +4575,6 @@ function adminEditTeamspielmodus(): void $id = $jInput->get('id', 0, 'INT'); $bezeichnung = $db->escape(trim($jInput->get('bezeichnung', '', 'RAW'))); - // Die Auswahl „Saetze pro Spiel" hat drei Eintraege, die Datenbank zwei Felder: der - // dritte Eintrag ist „Mehrere" mit der zusaetzlichen Angabe, dass die Saetze einzeln - // eingetragen werden. punktetyp behaelt damit seine beiden ueberlieferten Werte — es - // ist das Feld, an dem jede fremde Anwendung ablesen muss, ob die Punkte eines Spiels - // Tore oder gewonnene Saetze sind (siehe Datenbankversion 126). $punktetyp = $jInput->get('punktetyp', 0, 'INT'); $satzergebnisse = $punktetyp == 2 ? 1 : 0; if ($punktetyp == 2) @@ -4593,9 +4582,6 @@ function adminEditTeamspielmodus(): void $punkte_sieg_einzel = $jInput->get('punkte_sieg_einzel', 0, 'INT'); $punkte_sieg_doppel_separat = $jInput->get('punkte_sieg_doppel_separat', 0, 'INT'); $punkte_sieg_doppel = $punkte_sieg_doppel_separat ? $jInput->get('punkte_sieg_doppel', 0, 'INT') : $punkte_sieg_einzel; - // Vorsprung (mindestens 1 Tor, sonst waere kein Spiel je entschieden) und Deckelung - // (0 = keine). Beide folgen derselben "Doppel separat"-Schaltung wie die Siegbedingung, - // zu der sie gehoeren. $punkte_vorsprung_einzel = max(1, $jInput->get('punkte_vorsprung_einzel', 1, 'INT')); $punkte_vorsprung_doppel = $punkte_sieg_doppel_separat ? max(1, $jInput->get('punkte_vorsprung_doppel', 1, 'INT')) @@ -4604,23 +4590,14 @@ function adminEditTeamspielmodus(): void $punkte_deckel_doppel = $punkte_sieg_doppel_separat ? max(0, $jInput->get('punkte_deckel_doppel', 0, 'INT')) : $punkte_deckel_einzel; - // Eine Deckelung unterhalb der Siegbedingung wuerde das Spiel vor seinem eigenen Ziel - // beenden — das ist keine Konfiguration, sondern ein Zahlendreher. Dann gilt sie nicht. if ($punkte_deckel_einzel != 0 && $punkte_deckel_einzel < abs($punkte_sieg_einzel)) $punkte_deckel_einzel = 0; if ($punkte_deckel_doppel != 0 && $punkte_deckel_doppel < abs($punkte_sieg_doppel)) $punkte_deckel_doppel = 0; - // Vorsprung und Unentschieden schliessen sich aus: das negative Vorzeichen von - // punkte_sieg_* bedeutet „Remis bei Betrag - 1", und genau dieser Stand ist bei zwei - // Toren Vorsprung kein Endstand, sondern ein laufendes Spiel (5:5 bei Sieg 6). Wird ein - // Vorsprung gefordert, wird deshalb die Variante ohne Unentschieden gespeichert — sonst - // stuende in der Konfiguration zweierlei, das sich widerspricht. if ($punkte_vorsprung_einzel > 1 && $punkte_sieg_einzel < 0) $punkte_sieg_einzel = abs($punkte_sieg_einzel); if ($punkte_vorsprung_doppel > 1 && $punkte_sieg_doppel < 0) $punkte_sieg_doppel = abs($punkte_sieg_doppel); - // Ohne Siegbedingung („Beliebig") gibt es nichts, worauf sich Vorsprung oder Deckelung - // beziehen koennten. if ($punkte_vorsprung_einzel <= 1) $punkte_deckel_einzel = 0; if ($punkte_vorsprung_doppel <= 1) $punkte_deckel_doppel = 0; if ($punkte_sieg_einzel == 0) { @@ -4631,11 +4608,6 @@ function adminEditTeamspielmodus(): void $punkte_vorsprung_doppel = 1; $punkte_deckel_doppel = 0; } - // Zweite Ebene: die Regel INNERHALB eines Satzes. Sie ergibt nur dort einen Sinn, wo ein - // Spiel ueberhaupt aus Saetzen besteht — bei „Einer" ist das Spiel der Satz, und die - // Regel steht bereits in punkte_sieg_*. 0 heisst „nicht hinterlegt". - // Vorzeichenbehaftet wie punkte_sieg_*: der Betrag ist der Siegwert, ein negatives - // Vorzeichen erlaubt zusaetzlich ein Unentschieden ein Tor darunter. $satz_sieg_einzel = $jInput->get('satz_sieg_einzel', 0, 'INT'); $satz_sieg_doppel = $punkte_sieg_doppel_separat ? $jInput->get('satz_sieg_doppel', 0, 'INT') @@ -4665,9 +4637,6 @@ function adminEditTeamspielmodus(): void $satz_vorsprung_doppel = 1; $satz_deckel_doppel = 0; } - // Wie eine Ebene hoeher: eine Grenze unter dem Siegwert ist ein Zahlendreher, und ein - // gefordertes Mindestvorsprung schliesst das Unentschieden aus — bei zwei Toren - // Vorsprung ist ein 5:5 bei „Sieg 6, Remis 5" kein Endstand, sondern ein laufender Satz. if ($satz_vorsprung_einzel > 1 && $satz_sieg_einzel < 0) $satz_sieg_einzel = abs($satz_sieg_einzel); if ($satz_vorsprung_doppel > 1 && $satz_sieg_doppel < 0) @@ -4678,15 +4647,10 @@ function adminEditTeamspielmodus(): void $satz_deckel_einzel = 0; if ($satz_deckel_doppel != 0 && $satz_deckel_doppel < abs($satz_sieg_doppel)) $satz_deckel_doppel = 0; - // Wie viele Saetze ein Spiel hat. Eine Auswahl, zwei Familien: eine feste Zahl (alle - // werden gespielt, positiv) oder Gewinnsaetze (best of 2N-1, negativ). 0 = wie bisher. $saetze_modus_einzel = $jInput->get('saetze_modus_einzel', 0, 'INT'); $saetze_modus_doppel = $punkte_sieg_doppel_separat ? $jInput->get('saetze_modus_doppel', 0, 'INT') : $saetze_modus_einzel; - // Abweichende Regel fuer den Entscheidungssatz. Den gibt es nur bei Gewinnsaetzen: er - // ist der Satz, der nach N-1 zu N-1 noch aussteht. Bei fester Satzzahl gaebe es keinen, - // und ohne Angabe zur Satzzahl waere nicht bestimmbar, welcher es waere. $entscheidung_sieg_einzel = $jInput->get('entscheidung_sieg_einzel', 0, 'INT'); $entscheidung_sieg_doppel = $punkte_sieg_doppel_separat ? $jInput->get('entscheidung_sieg_doppel', 0, 'INT') @@ -4703,10 +4667,6 @@ function adminEditTeamspielmodus(): void $saetze_modus_einzel = 0; $saetze_modus_doppel = 0; } - // Die Satzzahl wird ZUSAETZLICH nach punkte_sieg_* gespiegelt, damit eine aeltere - // Programmfassung dieselbe wahre Aussage liest: N Gewinnsaetze als N, eine feste - // Satzzahl als den Stand, bei dem sie entschieden ist. Umkehrung der Ueberfuehrung - // in update.php, also verlustfrei. $sieg_aus_satzzahl = function ($modus) { if ($modus < 0) return -$modus; // N Gewinnsaetze if ($modus == 0) return null; // keine Angabe @@ -4726,8 +4686,6 @@ function adminEditTeamspielmodus(): void $punkte_vorsprung_doppel = 1; $punkte_deckel_doppel = 0; } - // Ohne Gewinnsaetze gibt es keinen Entscheidungssatz, und ohne eigene Siegbedingung - // keine Abweichung — dann bleiben die Felder auf ihren neutralen Werten. if ($saetze_modus_einzel >= 0) $entscheidung_sieg_einzel = 0; if ($saetze_modus_doppel >= 0) $entscheidung_sieg_doppel = 0; if ($entscheidung_sieg_einzel == 0) { @@ -4748,11 +4706,6 @@ function adminEditTeamspielmodus(): void $entscheidung_deckel_einzel = 0; if ($entscheidung_deckel_doppel != 0 && $entscheidung_deckel_doppel < abs($entscheidung_sieg_doppel)) $entscheidung_deckel_doppel = 0; - // Race-Modus: der Stand laeuft ueber die Begegnung durch. - // - // Das Ziel wird NICHT eingegeben — es ergibt sich aus der Spielfolge (Anzahl Spiele mal - // Schritt) und stuende sonst als zweite Wahrheit neben ihr. Mindestvorsprung, Grenze - // und Unentschieden gelten allein fuer das letzte Spiel, also fuer das Ziel. $zaehlweise = $jInput->get('zaehlweise', 0, 'INT') != 0 ? 1 : 0; $race_schritt = max(0, $jInput->get('race_schritt', 0, 'INT')); $race_vorsprung = max(1, $jInput->get('race_vorsprung', 1, 'INT')); @@ -4812,9 +4765,6 @@ function adminEditTeamspielmodus(): void if (strlen($verknuepfungen) > 0) $modus .= "|" . $verknuepfungen; - // Erst hier, weil das Ziel die Anzahl der Spiele braucht: Race setzt „ein Satz je Spiel" - // und „Spielergebnis als Spielpunkte" voraus, und das Ziel wird in die Altfelder gespiegelt - // — dieselbe wahre Aussage, die dort seit jeher steht („das Spiel ist bei N Toren if ($zaehlweise == 1) { $spiele_anzahl = count(array_filter(explode(",", explode("|", $modus)[0]), 'strlen')); $race_ziel = $spiele_anzahl * $race_schritt; @@ -4843,11 +4793,8 @@ function adminEditTeamspielmodus(): void $punkte_vorsprung_doppel = 1; $punkte_deckel_einzel = 0; $punkte_deckel_doppel = 0; - // Eine Grenze unter dem Ziel waere ein Zahlendreher — und ohne geforderten - // Vorsprung endet das Rennen ohnehin exakt am Ziel. if ($race_vorsprung <= 1 || ($race_deckel != 0 && $race_deckel < $race_ziel)) $race_deckel = 0; - // Vorsprung und Unentschieden schliessen sich aus, wie eine Ebene tiefer auch. if ($race_vorsprung > 1 && $race_remis) { $race_remis = 0; $punkte_sieg_einzel = $race_ziel; @@ -5548,7 +5495,6 @@ function adminSpielverlegungMailen(): void $spielverlegung->genehmigt_von = ""; } - $query = "SELECT nachname, vorname, email" . "\n FROM #__sportsmanager_vereinsansprechpartner" . "\n WHERE verein_id IN ('$spielverlegung->heim_verein_id', '$spielverlegung->gast_verein_id')" @@ -7203,7 +7149,6 @@ function adminEditSaison(): void die($db->stderr(true)); } - redirectSportsManagerURL('&task=admin_saisons'); } @@ -10988,16 +10933,6 @@ function adminEditBegegnungSpielplan($bestaetigen): void } -// Kann ein Spiel dieses Satzmodus ueberhaupt unentschieden enden? -// -// Gleichstand ist nicht immer ein Unentschieden. Wo eine Zahl von GEWINNSAETZEN gilt, hat ein -// Spiel mit gleichem Satzstand noch keinen Sieger — es ist unfertig, und dafuer gibt es keinen -// Punkt. Ohne Angabe zur Satzzahl bleibt es beim bisherigen Verhalten. -// -// Steht bewusst auf Dateiebene und nicht als Closure im Speicher-Loop: die Spielpunkte werden -// an ZWEI Stellen berechnet — hier beim Speichern eines Spielberichts und in -// begegnungenAktualisieren() bei einer Modus-/Wettbewerbsaenderung. Dort fehlte die Regel, -// sodass beide Wege demselben Spiel verschiedene Spielpunkte gaben (gefunden 2026-09-08). function remisMoeglich($saetze_modus): bool { if ($saetze_modus == 0) return true; // keine Angabe @@ -11055,7 +10990,6 @@ function adminSaveBegegnungSpielplan(): void redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungId . '#id' . $id, Text::_('COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED')); } - $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" . "\n FROM #__sportsmanager_begegnung" @@ -11217,8 +11151,6 @@ function adminSaveBegegnungSpielplan(): void } else { $spiel_heim_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte_detailliert', array(), 'ARRAY'); $spiel_gast_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte_detailliert', array(), 'ARRAY'); - // Durchweg leere Satzfelder sind keine Aussage ueber Saetze, sondern „hier wurde - // nichts eingetragen" — sonst loescht blosses Oeffnen und Speichern den Altbestand. $satzfelder_leer = true; foreach ($spiel_heim_punkte_detailliert as $wert) { if ($wert !== '' && $wert !== null) { @@ -11241,9 +11173,6 @@ function adminSaveBegegnungSpielplan(): void if (empty($spiel_heim_punkte_detailliert)) { $spiel_heim_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte', 0, 'INT'); $spiel_gast_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte', 0, 'INT'); - // Wo der Wettbewerb Ergebnisse JE SATZ fuehrt, bleibt ergebnis_detailliert bei einer - // Meldung ohne Satzfelder LEER: das eine Paar bedeutet dort Saetze, und wer es als - // Tore liest, rechnet 1:0 statt 3:1. Der Satzstand steht in teamspiel_*_punkte. $ergebnis_detailliert = ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) || !empty($teamspiel_modus->satzergebnisse) ? '' @@ -11303,8 +11232,6 @@ function adminSaveBegegnungSpielplan(): void $spiel_gast_spieler_2_id = $t; } - // Echte Satzergebnisse nicht durch ihren eigenen Spiegel ersetzen: bringt ein Aufruf - // keine Satzfelder mit und stehen im Bestand mehrere Paare, bleibt der Detailtext. if (isset($spiel_heim_punkte_detailliert) && empty($spiel_heim_punkte_detailliert) && isset($spiele_nummern[$spiel_nr])) { $bestand = $spiele_nummern[$spiel_nr]; @@ -12049,7 +11976,6 @@ function GruppenspieleMatrix($anzahlteams): array die("This case is invalid: Nr of teams " . $anzahlteams); } - //Spieltag_Nr;Spiel_Nr;Heim14;Gast14;Heim12;Gast12;Heim10;Gast10;Heim8;Gast8;Heim6;Gast6;Heim4;Gast4 //Folgende Zeilen dürfen nicht eingrückt werden. $str_Setzliste_Matrix = @@ -12333,7 +12259,6 @@ function adminBegegnungenGenerierenForm(): void $Begegnung[$Zeile]['spiel_nr'] = $spielnr; $Zeile++; - if ($runden == 2) { $weiterer_spieltag = $spieltag + $spieltage; @@ -13550,7 +13475,6 @@ function sportsmanagerExportErgaenzeSpielberichte($db, int $veranstaltungId, arr $spielmodus = loadObjectList($db, $query); $Anzahl_Saetze = count(explode(",", $spielmodus[0]->modus)); - foreach ($rows as $value) { $value->vorgeschlagen_um = ""; @@ -14743,7 +14667,6 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void } } - #[NoReturn] function adminImportTurnierdisziplinMeldungenSpiele(): void { $db = getDatabase(); @@ -15956,8 +15879,6 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void } } - - foreach (array(1, 2, 3, 10) as $rundenstufe) { $query = "SELECT runde, COUNT(*) AS spiele" . "\n FROM #__sportsmanager_turnierspiel" @@ -19019,7 +18940,6 @@ function adminEditTermineLand($admin_uebersicht): void $land = $db->escape(trim($jInput->get('land', '', 'RAW'))); $termine_umbenennen = $jInput->get('termine_umbenennen', 0, 'INT'); - if ($termine_umbenennen) { $query = "SELECT * FROM #__sportsmanager_termin_land WHERE termin_land_id = $id"; $rows = loadObjectList($db, $query); diff --git a/src/structure/components/com_sportsmanager/database/update.php b/src/structure/components/com_sportsmanager/database/update.php index bc142e2..34cbd75 100644 --- a/src/structure/components/com_sportsmanager/database/update.php +++ b/src/structure/components/com_sportsmanager/database/update.php @@ -5789,22 +5789,6 @@ function updateDatabase(): void if ($datenbank_version < 122) { - // Siegbedingungen vollstaendig abbilden (Issue #304). Muss der LETZTE Block der - // Kette bleiben, sonst bleibt die kleinere Versionsnummer stehen. - // - // Wertebereiche der neuen Spalten: - // satz_sieg_* 0 = nicht hinterlegt; sonst Betrag = Siegwert, negativ - // erlaubt ein Remis ein Tor darunter (wie punkte_sieg_*) - // saetze_modus_* 0 = wie bisher, N > 0 = feste Satzzahl, -N = N Gewinnsaetze - // entscheidung_* 0 = keine Abweichung vom satz_*-Wert - // zaehlweise 0 = je Spiel, 1 = Race (Stand laeuft durch die Begegnung) - // - // satzergebnisse ist eine EIGENE Spalte und kein dritter punktetyp-Wert: punktetyp - // ist das Feld, aus dem fremde Anwendungen ablesen, ob die Punkte eines Spiels Tore - // oder Saetze sind, und kennt seit jeher zwei Werte. - // - // Alle Vorgabewerte beschreiben das heutige Verhalten; keine bestehende Spalte wird - // angetastet. $columns = $db->getTableColumns('#__sportsmanager_teamspiel_modus'); if (!array_key_exists('satzergebnisse', $columns)) { $query = "ALTER TABLE `#__sportsmanager_teamspiel_modus`" @@ -5838,12 +5822,6 @@ function updateDatabase(): void } } - // Bestehende „Mehrere"-Modi in die Satzzahl ueberfuehren — die Umkehrung der - // Spiegelung, die der Editor beim Speichern vornimmt: - // punkte_sieg_* 1 -> ein fester Satz - // N -> N Gewinnsaetze (haeufigere der beiden Lesarten) - // -N -> feste Satzzahl 2(N-1) (Remis setzt alle Saetze voraus) - // 0 -> bleibt 0 („Beliebig") $query = "UPDATE #__sportsmanager_teamspiel_modus" . "\n SET saetze_modus_einzel = CASE" . "\n WHEN punktetyp = 0 THEN 0" diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 303a2b3..e7dfaef 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -1773,7 +1773,6 @@ function veranstaltung(): void // Anzeigen HTML_sportsmanager::veranstaltungHeaderAlone($veranstaltung, $vorherige_veranstaltung_id, $naechste_veranstaltung_id, $showSeasons, $saisons, $filter_saison_id); - if (!in_array($veranstaltung->tabellenwertung, [0, -1, -3, -4])) tabelle($veranstaltung, $spieltag, true); @@ -2338,9 +2337,6 @@ function getTabelleSpieltag($veranstaltung,$spieltag,$mannschaften = "",$offset_ jexit(); } - - - function erstelleSetzliste($teams): array { $seedingPairs[4] = [[1, 4], [2, 3]]; @@ -2350,7 +2346,6 @@ function erstelleSetzliste($teams): array $seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13], [3, 14], [6, 11], [7, 10], [2, 15]]; - $seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25], [5, 28], [12, 21], [13, 20], [4, 29], [3, 30], [14, 19], [11, 22], [6, 27], @@ -2374,8 +2369,6 @@ function erstelleSetzliste($teams): array [7,122], [58,71], [39,90], [26,103], [23,106], [42,87], [55,74], [10,119], [15,114], [50,79], [47,82], [18,111], [31,98], [34,95], [63,66], [2,127]]; - - $matches = []; // Teams durchschütteln @@ -2439,7 +2432,6 @@ function getSetzliste($anzahlRunden) $seedingPairs[16] = [[1, 16], [8, 9], [5, 12], [4, 13], [3, 14], [6, 11], [7, 10], [2, 15]]; - $seedingPairs[32] = [[1, 32], [16, 17], [9, 24], [8, 25], [5, 28], [12, 21], [13, 20], [4, 29], [3, 30], [14, 19], [11, 22], [6, 27], @@ -2577,7 +2569,6 @@ function turnierbaumAnzeigen($veranstaltung): void } } - //Alle Begegnungen aus Datenbank $query = "SELECT t4.bezeichnung AS Liga, t1.zeitpunkt AS Spielstart," . "\n if(t2.teamname_kurz <> '',t2.teamname_kurz, t2.teamname) AS Heim," @@ -3495,7 +3486,6 @@ function mannschaften($ansicht_vereinigt): void $jInput = Factory::getContainer()->get(SiteApplication::class)->input; $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'); @@ -3519,7 +3509,6 @@ function mannschaften($ansicht_vereinigt): void $filter_saison_id = $saisons[0]->saison_id; } - if (!isJson()) { HTML_sportsmanager::teamsHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); } @@ -3576,7 +3565,6 @@ function mannschaften($ansicht_vereinigt): void } - function mannschaftDetails($ansicht_vereinigt, $unabhaengige_ansicht = false): void { $db = getDatabase(); @@ -4422,7 +4410,6 @@ function verbandsorganeDetails($uebergabe_id = 0): void global $params; - $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : $app->getIdentity()->id); if ($user_id > 0) $erweiterte_anzeige = true; @@ -7788,10 +7775,6 @@ 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(); @@ -7804,7 +7787,6 @@ function spielerstatistikEinheit($bestenliste_id): ?int 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))) { 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 a0744bf..cda00a2 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -1017,7 +1017,6 @@ static function turnierdisziplin($turnier, $disziplin, $meldungen, $meldungenSpi bilder_zeigen(); } - window.addEventListener("resize", onResize); @@ -1598,14 +1597,9 @@ if (count($spiele) > 0) { 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 { @@ -1802,9 +1796,6 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie tabellenwertung != 3 && $veranstaltung->tabellenwertung != 6 && $veranstaltung->tabellenwertung != 9 && $veranstaltung->tabellenwertung != 23 && $veranstaltung->tabellenwertung != 26 && $veranstaltung->tabellenwertung != 29) { if ($alleine_angezeigt && $praesentation == 0) { ?> @@ -6949,10 +6940,6 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a
-
diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index 03692ed..1e04b18 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -4642,11 +4642,6 @@ class HTML_sportsmanager_admin static function adminEditTeamspielmodus($row): void { global $params; - // „Doppel separat" war bisher allein an punkte_sieg_* abzulesen. Seit Vorsprung, - // Deckelung und der Satzregel dazugehoeren, reicht das nicht mehr: zwei Modi mit - // gleicher Siegbedingung, aber verschiedenem Vorsprung im Doppel haetten ihre - // Doppel-Zeilen sonst versteckt — und beim naechsten Speichern waere der - // abweichende Wert stillschweigend ueberschrieben worden. $doppel_separat = !empty($row) && ( $row->punkte_sieg_einzel != $row->punkte_sieg_doppel || ($row->punkte_vorsprung_einzel ?? 1) != ($row->punkte_vorsprung_doppel ?? 1) @@ -4658,22 +4653,13 @@ class HTML_sportsmanager_admin || ($row->entscheidung_sieg_einzel ?? 0) != ($row->entscheidung_sieg_doppel ?? 0) || ($row->entscheidung_vorsprung_einzel ?? 1) != ($row->entscheidung_vorsprung_doppel ?? 1) || ($row->entscheidung_deckel_einzel ?? 0) != ($row->entscheidung_deckel_doppel ?? 0)); - // Die Satzregel gibt es nur, wo ein Spiel aus Saetzen besteht. $saetze_moeglich = !empty($row) && $row->punktetyp != 0; - // Einen Entscheidungssatz gibt es nur bei Gewinnsaetzen: er ist der Satz, der nach - // N-1 zu N-1 noch aussteht. Bei fester Satzzahl gibt es keinen. $entscheidung_moeglich = $saetze_moeglich && ($row->saetze_modus_einzel ?? 0) < 0; $entscheidung_moeglich_doppel = $doppel_separat && !empty($row) && $row->punktetyp != 0 && ($row->saetze_modus_doppel ?? 0) < 0; - // Wer die Satzzahl waehlt, legt damit die Siegbedingung des Spiels fest — Vorsprung und - // Deckelung auf Spielebene haetten daneben nichts mehr zu sagen. $eigene_spielregel_verborgen = $saetze_moeglich; $eigene_spielregel_verborgen_doppel = $saetze_moeglich; - // Im Race-Modus laeuft der Stand ueber die Begegnung durch; die Regeln des - // einzelnen Spiels und des Satzes gibt es dort nicht. $race_an = !empty($row) && ($row->zaehlweise ?? 0) != 0; - // Die Einheit der Spielebene haengt an punktetyp: Tore bei „Einer", gewonnene - // Saetze bei „Mehrere". Vorher stand in beiden Faellen „Punkte". $einheit_option = function ($wert, $gewaehlt, $tore, $saetze) use ($saetze_moeglich) { return " @@ -12667,9 +12539,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void @@ -12734,8 +12603,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $punkte_sieg_doppel = abs($teamspiel_modus->punkte_sieg_doppel); $punkte_unentschieden_einzel = $teamspiel_modus->punkte_sieg_einzel < 0 ? abs($teamspiel_modus->punkte_sieg_einzel + 1) : 0; $punkte_unentschieden_doppel = $teamspiel_modus->punkte_sieg_doppel < 0 ? abs($teamspiel_modus->punkte_sieg_doppel + 1) : 0; - // Vorsprung und Unentschieden schliessen sich aus (siehe punkte_gegner). Alte - // Daten koennen beides gesetzt haben, wenn ein Vorsprung nachtraeglich kam. if (max(1, (int)($teamspiel_modus->punkte_vorsprung_einzel ?? 1)) > 1) $punkte_unentschieden_einzel = 0; if (max(1, (int)($teamspiel_modus->punkte_vorsprung_doppel ?? 1)) > 1) @@ -12744,16 +12611,9 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $punkte_vorsprung_doppel = max(1, (int)($teamspiel_modus->punkte_vorsprung_doppel ?? 1)); $punkte_deckel_einzel = max(0, (int)($teamspiel_modus->punkte_deckel_einzel ?? 0)); $punkte_deckel_doppel = max(0, (int)($teamspiel_modus->punkte_deckel_doppel ?? 0)); - // Zweite Ebene: die Regel im einzelnen Satz. Eingetragen - // werden einzelne Saetze nur bei „Mehrere mit - // Satzergebnissen" — nur dort greift sie also. $heim_hat_spieler = !empty($heim_spieler); $gast_hat_spieler = !empty($gast_spieler); $satzweise = ($teamspiel_modus->satzergebnisse ?? 0) != 0; - // Race: der Stand laeuft durch, jedes Spiel hat sein eigenes Etappenziel - // (Spiel N endet bei N mal Schritt). Mindestvorsprung, Grenze und ein - // moegliches Unentschieden gelten nur fuer das letzte Spiel — also fuer - // das Ziel selbst. $race_an = ($teamspiel_modus->zaehlweise ?? 0) != 0 && ($teamspiel_modus->race_schritt ?? 0) > 0; $race_schritt = max(0, (int)($teamspiel_modus->race_schritt ?? 0)); @@ -12764,8 +12624,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $race_remis = ($teamspiel_modus->race_remis ?? 0) != 0 && $race_vorsprung <= 1 ? $race_ziel - 1 : 0; - // Je Spiel die Zahl der von Anfang an sichtbaren Satzzeilen; wird in der - // Spiel-Schleife gefuellt und nach dem Formular an JavaScript uebergeben. $satz_min_je_spiel = array(); $satz_sieg_einzel = (int)($teamspiel_modus->satz_sieg_einzel ?? 0); $satz_sieg_doppel = (int)($teamspiel_modus->satz_sieg_doppel ?? 0); @@ -12773,21 +12631,16 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $satz_vorsprung_doppel = max(1, (int)($teamspiel_modus->satz_vorsprung_doppel ?? 1)); $satz_deckel_einzel = max(0, (int)($teamspiel_modus->satz_deckel_einzel ?? 0)); $satz_deckel_doppel = max(0, (int)($teamspiel_modus->satz_deckel_doppel ?? 0)); - // Satzzahl: positiv = feste Zahl, negativ = Gewinnsaetze, 0 = keine Angabe. $saetze_modus_einzel = (int)($teamspiel_modus->saetze_modus_einzel ?? 0); $saetze_modus_doppel = (int)($teamspiel_modus->saetze_modus_doppel ?? 0); - // Abweichende Regel fuer den Entscheidungssatz; 0 = keine. $entscheidung_sieg_einzel = (int)($teamspiel_modus->entscheidung_sieg_einzel ?? 0); $entscheidung_sieg_doppel = (int)($teamspiel_modus->entscheidung_sieg_doppel ?? 0); $entscheidung_vorsprung_einzel = max(1, (int)($teamspiel_modus->entscheidung_vorsprung_einzel ?? 1)); $entscheidung_vorsprung_doppel = max(1, (int)($teamspiel_modus->entscheidung_vorsprung_doppel ?? 1)); $entscheidung_deckel_einzel = max(0, (int)($teamspiel_modus->entscheidung_deckel_einzel ?? 0)); $entscheidung_deckel_doppel = max(0, (int)($teamspiel_modus->entscheidung_deckel_doppel ?? 0)); - // punkte_gegner brauchen beide Ebenen — das Spiel und der Satz. if ($handheld != "yes" && ($race_an || $punkte_sieg_einzel != 0 || $punkte_sieg_doppel != 0 || ($satzweise && ($satz_sieg_einzel != 0 || $satz_sieg_doppel != 0)))) { - // Der Gegenwert zu einem eingegebenen Stand: was die andere Seite hoechstens haben - // kann, wenn dieser Stand das Spiel beendet. echo "function punkte_gegner(eingabe, sieg, vorsprung, deckel, unentschieden) {\n" . " var v = Number(eingabe);\n" . " if (unentschieden != 0 && v == unentschieden)\n" @@ -12803,7 +12656,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . "}\n"; if ($race_an) echo "function race_gegner(nr, feld, schritt, letztes, vorsprung, deckel, remis, seite) {\n" - // Was beide Seiten aus den vorherigen Spielen schon haben. . " var vorEigen = 0, vorAnder = 0;\n" . " for (var i = 1; i < nr; i++) {\n" . " var h = document.adminForm['spiel_' + i + '_heim_punkte'];\n" @@ -12816,8 +12668,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " var ziel = nr * schritt;\n" . " var eigenLaufend = vorEigen + Number(feld.value);\n" . " var anderLaufend;\n" - // Nur das letzte Spiel kennt Vorsprung, Grenze und Remis — und die - // gelten fuer den laufenden Stand, nicht fuer die Differenz. . " if (letztes) {\n" . " anderLaufend = punkte_gegner(eigenLaufend, ziel, vorsprung, deckel, remis);\n" . " if (anderLaufend === '') return '';\n" @@ -12828,8 +12678,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " var differenz = anderLaufend - vorAnder;\n" . " return differenz < 0 ? '' : differenz;\n" . "}\n"; - // Bei satzweiser Eingabe gibt es keine anfassbaren Summenfelder; dort - // ergaenzt saetze_changed() den Gegenwert, und zwar innerhalb des Satzes. if (!$satzweise) { echo "function punkte_changed(form) {\n" . " if (form.value == '')\n" @@ -12837,11 +12685,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " switch(form.name) {\n"; $n = count($spieltypen); for ($i = 1; $i <= $n; $i++) { - // Bei Race gilt die Etappe fuer den LAUFENDEN Stand, eingetragen wird - // aber die Differenz dieses Spiels — so fuehrt der Sports Manager es - // seit jeher (gemessen 2026-09-01 an 91 Bundesliga-Begegnungen: die - // Summe der Spielwerte IST der Begegnungsstand). Die Ergaenzung muss - // deshalb abziehen, was bis hierher schon auf dem Konto steht. if ($race_an) { $letztes = $i == $race_letztes ? 1 : 0; $args = $i . ", form, " . $race_schritt . ", " . $letztes . ", " @@ -12878,8 +12721,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . "}\n"; } } - // Der Gesamtstand: die Spielpunkte, wie sie Liste, Mannschaftsseite und Kopfzeile - // zeigen — gerechnet mit derselben Arithmetik wie beim Speichern. echo "function gesamtstand_aktualisieren() {\n" . " var sh = 0, sg = 0, h, g;\n"; for ($i = 1; $i <= count($spieltypen); $i++) { @@ -12903,11 +12744,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " if (feld != null) feld.textContent = sh + ':' + sg;\n" . "}\n"; if ($satzweise) { - // Ein Satz ist eingetragen, also: den Gegenwert IM SATZ ergaenzen, die - // gewonnenen Saetze neu zaehlen und in die versteckten Summenfelder - // schreiben. Gezaehlt wird nach derselben Regel wie auf dem Server - // (adminSaveBegegnungSpielplan): ein Satz zaehlt fuer die Seite mit den - // meisten Toren, ein 0:0 zaehlt fuer niemanden. echo "function saetze_changed(nr, feld, sieg, vorsprung, deckel, unentschieden) {\n" . " var heim = document.getElementsByName('spiel_' + nr + '_heim_punkte_detailliert[]');\n" . " var gast = document.getElementsByName('spiel_' + nr + '_gast_punkte_detailliert[]');\n" @@ -12934,9 +12770,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " satzzeilen_anzeigen(nr);\n" . " gesamtstand_aktualisieren();\n" . "}\n" - // Gestaffelt zeigen: sichtbar ist die Mindestzahl, - // und dahinter genau eine leere Zeile — nicht die - // volle Hoechstzahl. . "function satzzeilen_anzeigen(nr) {\n" . " var min = satz_min_je_spiel[nr];\n" . " if (min == null) return;\n" @@ -13076,10 +12909,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void . " var punkte_gast;\n"; $n = count($spieltypen); for ($i = 1; $i <= $n; $i++) { - // Geprueft wird nur, was es auch gibt: hat eine Mannschaft keine - // hinterlegten Spieler, steht dort kein Auswahlfeld — und eine - // Forderung nach Namen, die niemand erfuellen kann, wuerde das - // Melden verhindern statt es zu ordnen. if (!$heim_hat_spieler && !$gast_hat_spieler) continue; if ($spielernamen == 1) { @@ -13260,9 +13089,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void ergebnis_detailliert)) { $gelesen = array(); @@ -13305,9 +13126,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $satz_werte = $gelesen; } - // Wie viele Satzzeilen angeboten - // werden: die Deckelung des SPIELS ist - // die Hoechstzahl der Saetze; fehlt $satz_zeilen = $saetze_wahl > 0 ? $saetze_wahl : ($saetze_wahl < 0 @@ -13317,16 +13135,12 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void : ($spiel_sieg != 0 ? 2 * $spiel_sieg - 1 : 5))); $satz_zeilen = min(15, max(1, $satz_zeilen)); $satz_zeilen = max($satz_zeilen, count($satz_werte)); - // Wie viele Zeilen sichtbar sind. Alle stehen im Dokument, weil das Speichern - // spiel_1, spiel_2 ... der Reihe nach liest und beim ersten leeren Paar abbricht. $satz_min = $saetze_wahl > 0 ? $satz_zeilen : ($saetze_wahl < 0 ? -$saetze_wahl : ($spiel_sieg != 0 ? $spiel_sieg : 1)); $satz_min = min($satz_zeilen, max(1, $satz_min)); - // Was gespeichert ist, bleibt sichtbar — samt einer leeren - // Zeile dahinter, damit fortsetzen ohne Umweg geht. $satz_min = max($satz_min, min($satz_zeilen, count($satz_werte) + 1)); $satz_min_je_spiel[$spiel_nr] = $satz_min; for ($satz = 0; $satz < $satz_zeilen; $satz++) { @@ -13336,8 +13150,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void $zeilen_sieg = $ist_entscheidung ? $ent_sieg : $satz_sieg; $zeilen_vorsprung = $ist_entscheidung ? $ent_vorsprung : $satz_vorsprung; $zeilen_deckel = $ist_entscheidung ? $ent_deckel : $satz_deckel; - // Der Siegwert ist vorzeichenbehaftet (negativ = Remis - // moeglich); fuer Auswahl und Ergaenzung zaehlt der Betrag. $zeilen_sieg_betrag = abs($zeilen_sieg); $zeilen_remis = $zeilen_sieg < 0 && $zeilen_vorsprung <= 1 ? abs($zeilen_sieg + 1) @@ -13471,9 +13283,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void gesamtstand_aktualisieren();\n"; if ($satzweise && !empty($satz_min_je_spiel)) { - // Erst hier, weil die Mindestzahlen in der Spiel-Schleife entstehen. Der Aufruf - // beim Laden bringt Anfangszustand und Regel auf denselben Stand — ein bereits - // gespeichertes Fuenf-Satz-Spiel zeigt so alle fuenf Zeilen, ein leeres drei. echo "