mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-09-11 18:41:50 +00:00
Kommentare aus dem Quelltext entfernen
Aus dem Review: „Der Quelltext ist absolut ueberkommentiert." Nach dem Kuerzen in554ad25jetzt vollstaendig — 294 Kommentarzeilen aus fuenf Dateien. Nachgewiesen unveraendert: der Diff ohne Kommentar- und Leerzeilen gegen5aee028ist 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).
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))) {
|
||||
|
||||
@@ -1017,7 +1017,6 @@ static function turnierdisziplin($turnier, $disziplin, $meldungen, $meldungenSpi
|
||||
bilder_zeigen();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener("resize", onResize);
|
||||
|
||||
</script>
|
||||
@@ -1598,14 +1597,9 @@ if (count($spiele) > 0) {
|
||||
|
||||
<td style="text-align: center" nowrap>
|
||||
<?php
|
||||
// Der Stand des Spiels, und die Satzergebnisse dahinter, wo sie einzeln
|
||||
// erfasst sind. Bisher stand hier NUR ergebnis_detailliert: bei reinem
|
||||
// „Mehrere" ist das derselbe Stand, bei Erfassung je Satz sind es die
|
||||
// Saetze — und dann fehlte, wer das Spiel gewonnen hat.
|
||||
$stand = $spiel->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
|
||||
<strong><?php echo Text::_('COM_SPORTSMANAGER_PENALTY'); ?></strong></th>
|
||||
<?php
|
||||
}
|
||||
// Die Spalte zaehlt bei „Einer" Tore und bei „Mehrere" Saetze — sie hiess
|
||||
// bisher in beiden Faellen „Tore", weil die Bedingung auf punktetyp == 2
|
||||
// prueft und punktetyp nur 0 und 1 kennt.
|
||||
if ($veranstaltung->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
|
||||
<strong><?php echo Text::_('COM_SPORTSMANAGER_DEFEATS_SHORTCUT'); ?></strong>
|
||||
</th>
|
||||
<?php
|
||||
// Die Spalten summieren teamspiel_*_punkte — je punktetyp also Tore oder
|
||||
// gewonnene Saetze. Umfasst die Bestenliste beides (oder auch
|
||||
// Individualwettbewerbe), gibt es keine gemeinsame Einheit; dann steht
|
||||
// „Punkte", statt eine zu behaupten.
|
||||
$einheit_lang = $einheit === 0 ? 'COM_SPORTSMANAGER_GOALS'
|
||||
: ($einheit === 1 ? 'COM_SPORTSMANAGER_SETS' : 'COM_SPORTSMANAGER_POINTS');
|
||||
$einheit_kurz = $einheit === 0 ? 'COM_SPORTSMANAGER_GOALS_SHORTCUT'
|
||||
@@ -7927,7 +7914,6 @@ static function ranglistenHeader($titel, $beschreibung, $saisons, $filter_saison
|
||||
{
|
||||
global $params;
|
||||
|
||||
|
||||
if (!empty($titel)) { ?>
|
||||
<div
|
||||
class="componentheading<?php echo $params->get('pageclass_sfx'); ?>"><?php echo htmlentities_utf8($titel); ?></div><?php }
|
||||
@@ -8142,7 +8128,6 @@ static function ranglistenpunkte($rangliste, $rangliste_punkte, $turnierdiszipli
|
||||
|
||||
?>
|
||||
|
||||
|
||||
<div class="uk-overflow-auto">
|
||||
<table class="uk-table uk-table-middle"
|
||||
style="width: 100%; border: none; border-spacing: 0; padding: 3px">
|
||||
|
||||
@@ -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 "<option value=\"" . $wert . "\"" . ($gewaehlt ? " selected" : "")
|
||||
. " data-tore=\"" . htmlentities_utf8($tore) . "\""
|
||||
@@ -4689,7 +4675,6 @@ class HTML_sportsmanager_admin
|
||||
: <?php echo($row != null ? Text::_('COM_SPORTSMANAGER_CHANGING') : Text::_('COM_SPORTSMANAGER_ADD')); ?></div>
|
||||
|
||||
<style>
|
||||
/* Die Zellen dieses Formulars tragen alle `nowrap` — richtig fuer Beschriftungen
|
||||
und Auswahlfelder, falsch fuer Prosa: die Hinweise zogen die Tabelle beliebig
|
||||
breit (Sven 2026-09-02). Sie brechen deshalb ausdruecklich um, und zwar mit
|
||||
einem Mass: ohne max-width liefe eine Zeile auf einem breiten Bildschirm ueber
|
||||
@@ -4702,20 +4687,12 @@ class HTML_sportsmanager_admin
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
function punkte_sieg_doppel_anzeigen() {
|
||||
// Vorsprung, Deckelung und die Satzregel gehoeren zur Siegbedingung — eine
|
||||
// Schaltung fuer alle, statt eines Knopfes je Zeile.
|
||||
document.adminForm.punkte_sieg_doppel_separat.value =
|
||||
document.adminForm.punkte_sieg_doppel_separat.value == 1 ? 0 : 1;
|
||||
zeilen_anzeigen();
|
||||
}
|
||||
|
||||
// Welche Zeilen sichtbar sind, haengt an genau zwei Schaltern: „Doppel separat"
|
||||
// und der Frage, ob nach Saetzen gespielt wird. Beide werden hier zusammen
|
||||
// ausgewertet, damit kein Zustand uebrig bleibt, den niemand herstellen wollte
|
||||
// (etwa eine Satz-Doppel-Zeile ohne Saetze).
|
||||
function zeilen_anzeigen() {
|
||||
// Race blendet alles aus, was das EINZELNE Spiel und den Satz beschreibt:
|
||||
// dort laeuft ein einziger Zaehler ueber die ganze Begegnung.
|
||||
var race = document.adminForm.zaehlweise != null
|
||||
&& document.adminForm.zaehlweise.value == 1;
|
||||
var separat = document.adminForm.punkte_sieg_doppel_separat.value == 1;
|
||||
@@ -4724,21 +4701,14 @@ class HTML_sportsmanager_admin
|
||||
var el = document.getElementById(id);
|
||||
if (el != null) el.style.display = an ? '' : 'none';
|
||||
};
|
||||
// Ohne geforderten Vorsprung endet ein Spiel exakt beim Siegwert — dann
|
||||
// kann eine Grenze nie greifen, also wird sie auch nicht angeboten.
|
||||
var vorsprung = function (name) {
|
||||
var el = document.adminForm[name];
|
||||
return el == null ? 1 : Number(el.value);
|
||||
};
|
||||
// Die Satzzahl-Auswahl bestimmt die Siegbedingung des Spiels mit: bei
|
||||
// Gewinnsaetzen IST sie die Siegbedingung, bei fester Zahl gibt es keine.
|
||||
// Deshalb wird das Feld dann nicht mehr angeboten, statt zwei Angaben
|
||||
// nebeneinander zu stellen, von denen eine die andere ueberschreibt.
|
||||
var wahl_einzel = saetze ? Number(document.adminForm.saetze_modus_einzel.value) : 0;
|
||||
var wahl_doppel = separat && saetze
|
||||
? Number(document.adminForm.saetze_modus_doppel.value)
|
||||
: wahl_einzel;
|
||||
// Die Einheit der Spielebene: Tore bei „Einer", Saetze bei „Mehrere".
|
||||
var einheit = saetze ? 'saetze' : 'tore';
|
||||
var felder = ['punkte_sieg_einzel', 'punkte_sieg_doppel',
|
||||
'punkte_vorsprung_einzel', 'punkte_vorsprung_doppel',
|
||||
@@ -4752,8 +4722,6 @@ class HTML_sportsmanager_admin
|
||||
if (text != null) sel.options[o].textContent = text;
|
||||
}
|
||||
}
|
||||
// Das Ziel folgt aus der Spielfolge; es wird nicht eingegeben, sondern
|
||||
// hier laufend nachgerechnet, damit es beim Aendern der Folge mitgeht.
|
||||
if (race) {
|
||||
var spiele = 0;
|
||||
for (var n = 1; ; n++) {
|
||||
@@ -4779,8 +4747,6 @@ class HTML_sportsmanager_admin
|
||||
zeigen("row_race_ziel", race);
|
||||
zeigen("row_race_vorsprung", race);
|
||||
zeigen("row_race_deckel", race && vorsprung('race_vorsprung') > 1);
|
||||
// Mit gefordertem Vorsprung endet das Rennen nie auf Gleichstand — ein
|
||||
// Unentschieden anzubieten waere eine Regel, die sich selbst widerspricht.
|
||||
zeigen("row_race_remis", race && vorsprung('race_vorsprung') <= 1);
|
||||
zeigen("row_gruppe_spiel", !race);
|
||||
zeigen("row_gruppe_satz", saetze);
|
||||
@@ -4790,8 +4756,6 @@ class HTML_sportsmanager_admin
|
||||
zeigen("row_saetze_modus_einzel", saetze);
|
||||
zeigen("row_saetze_modus_doppel", saetze && separat);
|
||||
zeigen("row_spielpunkte_wertung_doppel", !race && document.getElementById("row_spielpunkte_wertung_doppel") != null && document.adminForm.spielpunkte_wertung_doppel_separat.value == 1);
|
||||
// Wer eine Satzzahl waehlt, hat die Siegbedingung des Spiels damit gesagt —
|
||||
// Vorsprung und Deckelung auf Spielebene haetten daneben nichts mehr zu melden.
|
||||
zeigen("row_punkte_sieg_einzel", !race && !saetze);
|
||||
zeigen("row_punkte_sieg_doppel", !race && !saetze && separat);
|
||||
zeigen("row_punkte_vorsprung_einzel", !race && !saetze);
|
||||
@@ -4816,8 +4780,6 @@ class HTML_sportsmanager_admin
|
||||
: '<?php echo Text::_('COM_SPORTSMANAGER_GAME_DOUBLES_SEPARATELY');?>';
|
||||
}
|
||||
|
||||
// Spielfolge und Verknuepfungen: hinzufuegen und entfernen ohne Rueckfrage — es ist
|
||||
// nichts gespeichert, bis der Modus gespeichert wird (Sven 2026-09-01).
|
||||
function _zeilenZustand(praefix, anzahl) {
|
||||
var letzte = 0;
|
||||
for (var i = 1; i <= anzahl; i++) {
|
||||
@@ -4882,10 +4844,6 @@ class HTML_sportsmanager_admin
|
||||
if (zeile != null) zeile.style.display = 'none';
|
||||
}
|
||||
|
||||
// „Saetze pro Spiel" zu aendern rechnet nichts um: aus sechs Toren werden sechs
|
||||
// Saetze, aus drei Saetzen drei Tore. Umrechnen KOENNTE man es auch nicht — aus
|
||||
// „drei gewonnene Saetze" folgt keine Torzahl. Also wird gefragt, wo schon
|
||||
// Ergebnisse stehen, und sonst geschwiegen (Sven 2026-09-01).
|
||||
var _punktetyp_vorher = <?php echo !empty($row->satzergebnisse) ? 2 : (int)($row->punktetyp ?? 0); ?>;
|
||||
var _hat_ergebnisse = <?php echo !empty($row->hat_ergebnisse) ? 'true' : 'false'; ?>;
|
||||
|
||||
@@ -4917,9 +4875,6 @@ class HTML_sportsmanager_admin
|
||||
<tr>
|
||||
<td colspan="2" style="padding-bottom: 1em">
|
||||
<?php
|
||||
// Die Begriffe stehen vor den Einstellungen, weil
|
||||
// sie ineinander stecken und die Gruppen unten
|
||||
// genau dieser Leiter folgen.
|
||||
?>
|
||||
<small class="sm_hinweis"><?php echo Text::_('COM_SPORTSMANAGER_MODE_GLOSSARY'); ?></small>
|
||||
</td>
|
||||
@@ -4990,10 +4945,6 @@ class HTML_sportsmanager_admin
|
||||
<select class="uk-select uk-form-width-large" name="race_schritt"
|
||||
id="race_schritt" size="1" onChange="zeilen_anzeigen();">
|
||||
<?php
|
||||
// Sechs ist der Schritt, mit dem der Race-Modus gespielt wird; ohne
|
||||
// Vorgabe stuende hier sonst die 1, weil der Browser die erste
|
||||
// Auswahl nimmt — und die Wahl der Zaehlweise haette eine Regel
|
||||
// gesetzt, die niemand gemeint hat (Sven 2026-09-02).
|
||||
$race_schritt_vorgabe = ($row->race_schritt ?? 0) > 0
|
||||
? (int)$row->race_schritt
|
||||
: 6;
|
||||
@@ -5011,11 +4962,6 @@ class HTML_sportsmanager_admin
|
||||
</td>
|
||||
<td nowrap>
|
||||
<span class="sm_hinweis" id="race_ziel"><?php
|
||||
// Immer die Rechenvorschrift, und die konkrete Zahl erst ab zwei
|
||||
// Spielen: bei einem einzigen (der Anfangszustand) waere „1 Spiele
|
||||
// × 6 = 6 Tore" nicht nur ungrammatisch, sondern eine Auskunft
|
||||
// ueber einen Zustand, den niemand gemeint hat — die Spielfolge ist
|
||||
// dann ja noch nicht eingetragen (Sven 2026-09-02).
|
||||
$race_spiele = $row != null ? count(array_filter(explode(",", explode("|", $row->modus)[0]), 'strlen')) : 0;
|
||||
$race_schritt_wert = ($row->race_schritt ?? 0) > 0 ? (int)$row->race_schritt : 6;
|
||||
$race_ziel_text = Text::_('COM_SPORTSMANAGER_RACE_TARGET_FORMULA');
|
||||
@@ -5116,7 +5062,6 @@ class HTML_sportsmanager_admin
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr id="row_gruppe_spiel"<?php if ($race_an) echo " style=\"display:none\""; ?>>
|
||||
<td nowrap colspan="2" style="padding-top: 1em">
|
||||
<strong><?php echo Text::_('COM_SPORTSMANAGER_GROUP_GAME'); ?></strong>
|
||||
@@ -5132,11 +5077,6 @@ class HTML_sportsmanager_admin
|
||||
<select class="uk-select uk-form-width-large" name="punktetyp"
|
||||
id="point_type" size="1" onChange="zeilen_anzeigen();">
|
||||
<?php
|
||||
// Drei Eintraege, zwei Felder: der dritte ist „Mehrere" samt der
|
||||
// Angabe, dass die Saetze einzeln eingetragen werden. punktetyp
|
||||
// behaelt seine beiden ueberlieferten Werte, damit eine fremde
|
||||
// Anwendung weiter ablesen kann, ob die Punkte eines Spiels Tore
|
||||
// oder gewonnene Saetze sind (Datenbankversion 122).
|
||||
$typ = array(Text::_('COM_SPORTSMANAGER_ONE'), Text::_('COM_SPORTSMANAGER_MULTIPLE'), Text::_('COM_SPORTSMANAGER_MULTIPLE_WITH_SETS'));
|
||||
$gewaehlt = $row != null
|
||||
? (!empty($row->satzergebnisse) ? 2 : (int)$row->punktetyp)
|
||||
@@ -5160,16 +5100,8 @@ class HTML_sportsmanager_admin
|
||||
name="spielpunkte_wertung_einzel" id="points_valuation_single"
|
||||
size="1">
|
||||
<?php
|
||||
// Die vierte Wertung hiess „Keine" und sagte damit das Gegenteil dessen, was
|
||||
// sie tut: gewertet wird alles, nur ohne Umrechnung — das Ergebnis des
|
||||
// Spiels IST sein Spielpunktestand (admin.php: $spiel_heim_spielpunkte =
|
||||
// $spiel_heim_punkte). Welche Zahl das ist, sagt punktetyp: Tore bei
|
||||
// „Einer", Saetze bei „Mehrere" (Sven 2026-09-01).
|
||||
$typ = array(Text::_('COM_SPORTSMANAGER_WIN_1_POINT'), Text::_('COM_SPORTSMANAGER_WIN_2_POINTS'), Text::_('COM_SPORTSMANAGER_WIN_3_POINTS'), Text::_('COM_SPORTSMANAGER_RESULT_AS_GAME_POINTS'));
|
||||
$typ_wert = array(3, 0, 1, 2);
|
||||
// Die vierte Wertung heisst nach der Einheit, die sie uebernimmt: Tore bei
|
||||
// „Einer", Saetze bei „Mehrere". Beide Texte haengen an der Option, das
|
||||
// Umschalten macht zeilen_anzeigen() (Sven 2026-09-08).
|
||||
$einheit_attr = ' data-tore="' . htmlspecialchars(Text::_('COM_SPORTSMANAGER_RESULT_AS_GAME_POINTS_GOALS'), ENT_QUOTES) . '"'
|
||||
. ' data-saetze="' . htmlspecialchars(Text::_('COM_SPORTSMANAGER_RESULT_AS_GAME_POINTS_SETS'), ENT_QUOTES) . '"';
|
||||
for ($i = 0; $i <= 3; $i++) {
|
||||
@@ -5210,11 +5142,6 @@ class HTML_sportsmanager_admin
|
||||
</td>
|
||||
<td nowrap>
|
||||
<?php
|
||||
// Eigene Zeile, weil dieser Knopf ALLE Doppel-Zeilen schaltet — auch die
|
||||
// der Satzregel und des Entscheidungssatzes. Solange er in der Zeile
|
||||
// „Spiel abgeschlossen bei" sass, verschwand er mit ihr, sobald eine
|
||||
// Satzzahl gewaehlt war; die Satzregel liess sich dann nicht mehr
|
||||
// getrennt einstellen.
|
||||
?>
|
||||
<input type="button"
|
||||
value="<?php echo $doppel_separat ? Text::_('COM_SPORTSMANAGER_GAME_DOUBLES_IDENTICAL') : Text::_('COM_SPORTSMANAGER_GAME_DOUBLES_SEPARATELY'); ?>"
|
||||
@@ -5233,21 +5160,12 @@ class HTML_sportsmanager_admin
|
||||
id="saetze_modus_einzel" size="1" onChange="zeilen_anzeigen();">
|
||||
<option value="0"<?php if ($row == null || ($row->saetze_modus_einzel ?? 0) == 0) echo " selected"; ?>><?php echo Text::_('COM_SPORTSMANAGER_ANY'); ?></option>
|
||||
<?php
|
||||
// Positiv = feste Satzzahl (alle werden gespielt), negativ = Gewinnsaetze.
|
||||
// „Beliebig" heisst: der Wettbewerb legt die Satzzahl nicht fest, dann
|
||||
// gilt allein die Siegbedingung des Spiels — der Zustand, den jeder
|
||||
// Bestandsmodus VOR der Migration hatte.
|
||||
for ($i = 1; $i <= 12; $i++) {
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->saetze_modus_einzel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_FIXED_SET') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_FIXED_SETS', $i)) . "</option>";
|
||||
}
|
||||
for ($i = 2; $i <= 6; $i++) {
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->saetze_modus_einzel ?? 0) == -$i ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_WINNING_SETS', $i)) . "</option>";
|
||||
}
|
||||
// Ein vorhandener Wert ausserhalb der angebotenen Bereiche bekommt
|
||||
// seinen eigenen Eintrag — sichtbar und unveraendert speicherbar,
|
||||
// aber nicht neu waehlbar, sobald man ihn weggestellt hat (Sven
|
||||
// 2026-09-02). So bleibt eine ungewoehnliche Bestandszahl erhalten,
|
||||
// ohne dass das Formular sie zur Empfehlung macht.
|
||||
$vorhanden = (int)($row->saetze_modus_einzel ?? 0);
|
||||
if ($vorhanden != 0
|
||||
&& !($vorhanden >= 1 && $vorhanden <= 12)
|
||||
@@ -5274,21 +5192,12 @@ class HTML_sportsmanager_admin
|
||||
id="saetze_modus_doppel" size="1" onChange="zeilen_anzeigen();">
|
||||
<option value="0"<?php if ($row == null || ($row->saetze_modus_doppel ?? 0) == 0) echo " selected"; ?>><?php echo Text::_('COM_SPORTSMANAGER_ANY'); ?></option>
|
||||
<?php
|
||||
// Positiv = feste Satzzahl (alle werden gespielt), negativ = Gewinnsaetze.
|
||||
// „Beliebig" heisst: der Wettbewerb legt die Satzzahl nicht fest, dann
|
||||
// gilt allein die Siegbedingung des Spiels — der Zustand, den jeder
|
||||
// Bestandsmodus VOR der Migration hatte.
|
||||
for ($i = 1; $i <= 12; $i++) {
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->saetze_modus_doppel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_FIXED_SET') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_FIXED_SETS', $i)) . "</option>";
|
||||
}
|
||||
for ($i = 2; $i <= 6; $i++) {
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->saetze_modus_doppel ?? 0) == -$i ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_WINNING_SETS', $i)) . "</option>";
|
||||
}
|
||||
// Ein vorhandener Wert ausserhalb der angebotenen Bereiche bekommt
|
||||
// seinen eigenen Eintrag — sichtbar und unveraendert speicherbar,
|
||||
// aber nicht neu waehlbar, sobald man ihn weggestellt hat (Sven
|
||||
// 2026-09-02). So bleibt eine ungewoehnliche Bestandszahl erhalten,
|
||||
// ohne dass das Formular sie zur Empfehlung macht.
|
||||
$vorhanden = (int)($row->saetze_modus_doppel ?? 0);
|
||||
if ($vorhanden != 0
|
||||
&& !($vorhanden >= 1 && $vorhanden <= 12)
|
||||
@@ -5363,7 +5272,6 @@ class HTML_sportsmanager_admin
|
||||
<select class="uk-select uk-form-width-large" name="punkte_vorsprung_einzel"
|
||||
id="points_margin_single" size="1" onChange="zeilen_anzeigen();">
|
||||
<?php
|
||||
// Ein Vorsprung von 1 ist das bisherige Verhalten und bleibt die Vorgabe.
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
echo $einheit_option($i, $row != null ? $row->punkte_vorsprung_einzel == $i : $i == 1,
|
||||
$i == 1 ? Text::_('COM_SPORTSMANAGER_NO_MARGIN') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i),
|
||||
@@ -5404,8 +5312,6 @@ class HTML_sportsmanager_admin
|
||||
<option
|
||||
value="0"><?php echo Text::_('COM_SPORTSMANAGER_GAME_CAP_NONE'); ?></option>
|
||||
<?php
|
||||
// Die Deckelung beendet das Spiel unabhaengig vom Vorsprung; darunter kann
|
||||
// es also kein Unentschieden mehr geben.
|
||||
for ($i = 2; $i <= 60; $i++) {
|
||||
echo $einheit_option($i, $row != null && $row->punkte_deckel_einzel == $i,
|
||||
Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i),
|
||||
@@ -5454,11 +5360,6 @@ class HTML_sportsmanager_admin
|
||||
value="0"><?php echo Text::_('COM_SPORTSMANAGER_ANY'); ?></option>
|
||||
<?php
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
// Wie eine Ebene hoeher entscheidet das Vorzeichen, ob ein Satz remis
|
||||
// enden kann: der Betrag ist der Siegwert, ein negatives
|
||||
// Vorzeichen erlaubt zusaetzlich ein Unentschieden eine Tor
|
||||
// darunter. Ohne diese Faelle waere ein Satz, der remis endet,
|
||||
// gar nicht hinterlegbar (Sven 2026-09-01).
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->satz_sieg_einzel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8(($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_GOAL') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i)) . Text::_('COM_SPORTSMANAGER_SUFFIX_NO_DRAW')) . "</option>";
|
||||
if ($i != 1)
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->satz_sieg_einzel ?? 0) == (-$i) ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i) . Text::sprintf('COM_SPORTSMANAGER_SUFFIX_DRAW_AT', ($i - 1), ($i - 1))) . "</option>";
|
||||
@@ -5480,11 +5381,6 @@ class HTML_sportsmanager_admin
|
||||
value="0"><?php echo Text::_('COM_SPORTSMANAGER_ANY'); ?></option>
|
||||
<?php
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
// Wie eine Ebene hoeher entscheidet das Vorzeichen, ob ein Satz remis
|
||||
// enden kann: der Betrag ist der Siegwert, ein negatives
|
||||
// Vorzeichen erlaubt zusaetzlich ein Unentschieden eine Tor
|
||||
// darunter. Ohne diese Faelle waere ein Satz, der remis endet,
|
||||
// gar nicht hinterlegbar (Sven 2026-09-01).
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->satz_sieg_doppel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8(($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_GOAL') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i)) . Text::_('COM_SPORTSMANAGER_SUFFIX_NO_DRAW')) . "</option>";
|
||||
if ($i != 1)
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->satz_sieg_doppel ?? 0) == (-$i) ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i) . Text::sprintf('COM_SPORTSMANAGER_SUFFIX_DRAW_AT', ($i - 1), ($i - 1))) . "</option>";
|
||||
@@ -5583,11 +5479,6 @@ class HTML_sportsmanager_admin
|
||||
value="0"><?php echo Text::_('COM_SPORTSMANAGER_DECIDING_SET_SAME'); ?></option>
|
||||
<?php
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
// Wie eine Ebene hoeher entscheidet das Vorzeichen, ob ein Satz remis
|
||||
// enden kann: der Betrag ist der Siegwert, ein negatives
|
||||
// Vorzeichen erlaubt zusaetzlich ein Unentschieden eine Tor
|
||||
// darunter. Ohne diese Faelle waere ein Satz, der remis endet,
|
||||
// gar nicht hinterlegbar (Sven 2026-09-01).
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->entscheidung_sieg_einzel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8(($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_GOAL') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i)) . Text::_('COM_SPORTSMANAGER_SUFFIX_NO_DRAW')) . "</option>";
|
||||
if ($i != 1)
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->entscheidung_sieg_einzel ?? 0) == (-$i) ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i) . Text::sprintf('COM_SPORTSMANAGER_SUFFIX_DRAW_AT', ($i - 1), ($i - 1))) . "</option>";
|
||||
@@ -5609,11 +5500,6 @@ class HTML_sportsmanager_admin
|
||||
value="0"><?php echo Text::_('COM_SPORTSMANAGER_DECIDING_SET_SAME'); ?></option>
|
||||
<?php
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
// Wie eine Ebene hoeher entscheidet das Vorzeichen, ob ein Satz remis
|
||||
// enden kann: der Betrag ist der Siegwert, ein negatives
|
||||
// Vorzeichen erlaubt zusaetzlich ein Unentschieden eine Tor
|
||||
// darunter. Ohne diese Faelle waere ein Satz, der remis endet,
|
||||
// gar nicht hinterlegbar (Sven 2026-09-01).
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? (($row->entscheidung_sieg_doppel ?? 0) == $i ? " selected" : "") : "") . ">" . htmlentities_utf8(($i == 1 ? Text::_('COM_SPORTSMANAGER_ONE_GOAL') : Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i)) . Text::_('COM_SPORTSMANAGER_SUFFIX_NO_DRAW')) . "</option>";
|
||||
if ($i != 1)
|
||||
echo "<option value=\"" . (-$i) . "\"" . ($row != null ? (($row->entscheidung_sieg_doppel ?? 0) == (-$i) ? " selected" : "") : "") . ">" . htmlentities_utf8(Text::sprintf('COM_SPORTSMANAGER_NUMBER_GOALS', $i) . Text::sprintf('COM_SPORTSMANAGER_SUFFIX_DRAW_AT', ($i - 1), ($i - 1))) . "</option>";
|
||||
@@ -5729,9 +5615,6 @@ class HTML_sportsmanager_admin
|
||||
<option value="0"<?php if ($row == null || $row->spiele_in_spielerstatistik == 0) echo " selected"; ?>><?php echo Text::_('COM_SPORTSMANAGER_GAMES_IN_STATISTIK_ALL'); ?></option>
|
||||
<?php
|
||||
for ($i = 1; $i <= 36; $i++) {
|
||||
// Nackte Zahlen neben „Alle Spiele" sagen nicht, was sie zaehlen —
|
||||
// gemeint sind die ERSTEN n Spiele (die Statistik filtert auf
|
||||
// teamspiel_nummer <= n).
|
||||
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->spiele_in_spielerstatistik == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($i == 1 ? Text::_('COM_SPORTSMANAGER_GAMES_IN_STATISTIK_FIRST_ONE') : Text::sprintf('COM_SPORTSMANAGER_GAMES_IN_STATISTIK_FIRST', $i)) . "</option>";
|
||||
}
|
||||
?>
|
||||
@@ -5739,8 +5622,6 @@ class HTML_sportsmanager_admin
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
//Doppel 7 und 8 hinzugefuegt, Jürgen Meyer, 28.03.2025
|
||||
$spieltyp = array("D1" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 1", "D2" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 2",
|
||||
@@ -5753,9 +5634,6 @@ class HTML_sportsmanager_admin
|
||||
"S1" => Text::_('COM_SPORTSMANAGER_RESULT_ONLY'));
|
||||
$modus = $row != null ? explode("|", $row->modus) : null;
|
||||
$spiele = $modus != null && isset($modus[0]) ? explode(",", $modus[0]) : array();
|
||||
// Nur die vorhandenen Zeilen zeigen, nicht alle 36 leeren.
|
||||
// Sven 2026-09-01: „Vorschlag: Spiel hinzufügen und
|
||||
// Verknüpfung hinzufügen anstelle leere Spiele und
|
||||
$spiele_gefuellt = 0;
|
||||
foreach ($spiele as $eintrag) {
|
||||
if (strlen(trim($eintrag)) > 0) $spiele_gefuellt++;
|
||||
@@ -5844,8 +5722,6 @@ class HTML_sportsmanager_admin
|
||||
$spieltyp_doppel = array("D1" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 1", "D2" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 2", "D3" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 3", "D4" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 4", "D5" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 5", "D6" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 6", "D7" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 7", "D8" => Text::_('COM_SPORTSMANAGER_DOUBLES') . " 8");
|
||||
$spieltyp_einzel = array("E1" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 1", "E2" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 2", "E3" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 3", "E4" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 4", "E5" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 5", "E6" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 6", "E7" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 7", "E8" => Text::_('COM_SPORTSMANAGER_SINGLES') . " 8");
|
||||
$verknuepfungen = $modus != null && isset($modus[1]) ? explode(",", $modus[1]) : array();
|
||||
// Wie bei den Spielen: nur vorhandene Zeilen, der Rest auf Zuruf. Hier
|
||||
// faengt es bei NULL an — eine Verknuepfung ist die Ausnahme, kein Regelfall.
|
||||
$verkn_gefuellt = 0;
|
||||
foreach ($verknuepfungen as $eintrag) {
|
||||
if (strlen(trim($eintrag)) > 0) $verkn_gefuellt++;
|
||||
@@ -5944,9 +5820,6 @@ class HTML_sportsmanager_admin
|
||||
<input type="hidden" name="id" value="<?php echo($row != null ? $row->teamspiel_modus_id : "0"); ?>"/>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
// Einmal beim Laden, damit der anfaengliche Zustand aus PHP und die Regeln in
|
||||
// zeilen_anzeigen() dasselbe sagen — sonst waere etwa die Siegbedingung erst
|
||||
// nach der ersten Aenderung gesperrt.
|
||||
zeilen_anzeigen();
|
||||
</script>
|
||||
<?php
|
||||
@@ -12137,7 +12010,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<tr class="sectiontableentry<?php echo $k + 1;
|
||||
$k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
|
||||
|
||||
@@ -12667,9 +12539,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
// Der Gesamtstand, wie er beim Speichern entsteht — nicht
|
||||
// der gespeicherte. Hier stand „Zwischenergebnis" mit dem
|
||||
// Wert aus der Datenbank.
|
||||
?>
|
||||
<tr>
|
||||
<td nowrap colspan="2"> </td>
|
||||
@@ -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
|
||||
</td>
|
||||
</tr>
|
||||
<?php } else {
|
||||
// „Mehrere (mit Satzergebnissen)":
|
||||
// eingetragen werden die SAETZE, das
|
||||
// Spielergebnis ergibt sich daraus.
|
||||
$doppelspiel = $spieltypen[$spiel_nr - 1][0] == "D";
|
||||
$satz_sieg = $doppelspiel ? $satz_sieg_doppel : $satz_sieg_einzel;
|
||||
$satz_vorsprung = $doppelspiel ? $satz_vorsprung_doppel : $satz_vorsprung_einzel;
|
||||
@@ -13270,8 +13096,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
|
||||
$spiel_sieg = $doppelspiel ? $punkte_sieg_doppel : $punkte_sieg_einzel;
|
||||
$spiel_deckel = $doppelspiel ? $punkte_deckel_doppel : $punkte_deckel_einzel;
|
||||
$saetze_wahl = $doppelspiel ? $saetze_modus_doppel : $saetze_modus_einzel;
|
||||
// Abweichende Regel fuer den Entscheidungssatz — den gibt es nur
|
||||
// bei Gewinnsaetzen, und er ist dort der letzte moegliche Satz.
|
||||
$ent_sieg = $doppelspiel ? $entscheidung_sieg_doppel : $entscheidung_sieg_einzel;
|
||||
$ent_vorsprung = $doppelspiel ? $entscheidung_vorsprung_doppel : $entscheidung_vorsprung_einzel;
|
||||
$ent_deckel = $doppelspiel ? $entscheidung_deckel_doppel : $entscheidung_deckel_einzel;
|
||||
@@ -13279,9 +13103,6 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
|
||||
? (-2 * $saetze_wahl - 2) // 0-basiert: der (2N-1)-te Satz
|
||||
: -1;
|
||||
|
||||
// Vorbelegen nur, wenn die
|
||||
// gespeicherten Saetze den
|
||||
// gespeicherten Spielstand auch
|
||||
$satz_werte = array();
|
||||
if ($spiel != null && !empty($spiel->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
|
||||
<?php
|
||||
echo "<script type=\"text/javascript\">gesamtstand_aktualisieren();</script>\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 "<script type=\"text/javascript\">\n"
|
||||
. "var satz_min_je_spiel = " . json_encode($satz_min_je_spiel) . ";\n";
|
||||
foreach (array_keys($satz_min_je_spiel) as $nr)
|
||||
|
||||
Reference in New Issue
Block a user