Compare commits

...

27 Commits

Author SHA1 Message Date
Marvin Flock c3dff8bcbd fix: change IN_PROGRESS to RUNNING 2026-05-17 15:57:46 +02:00
Marvin Flock 77f8b82a25 feat: add sportshub export functionality 2026-05-15 23:09:49 +02:00
MarvinF 2a307b0987 Merge branch 'sportsmanager2-stage' into sportsmanager2-dev 2026-05-13 00:03:28 +02:00
MarvinF e8e6f7046d Merge pull request #283 from Deutscher-Tischfussballbund/sportsmanager2-issue282
add club mailing functionality to admin area
2026-05-13 00:02:35 +02:00
Marvin Flock 20ab5a44a9 fix: add table headers 2026-05-13 00:00:34 +02:00
Jürgen Meyer a5357e4a51 mailto Funktion bei Mannschaften in admin-Bereich Veranstaltung 2026-04-28 11:46:22 +02:00
Jürgen Meyer 68e16a3adb mailto Funktion bei Vereine in admin-Bereich 2026-04-28 09:45:29 +02:00
MarvinF cfc821f8ff Merge branch 'sportsmanager2-prod' into sportsmanager2-stage 2026-04-14 19:09:46 +02:00
MarvinF 582829331c Merge pull request #280 from Deutscher-Tischfussballbund/sportsmanager2-dev
dev to stage
2026-04-14 19:08:39 +02:00
MarvinF d8ccd08843 Merge branch 'sportsmanager2-stage' into sportsmanager2-dev 2026-04-14 19:08:15 +02:00
MarvinF 57e92da771 Merge pull request #279 from Deutscher-Tischfussballbund/sportsmanager2-issue274-neu
Enhancing Playerstatistics (Performance Index, Club Membership and more)
2026-04-14 19:06:45 +02:00
Marvin Flock 7f85888a26 fix: add table fix 2026-04-14 19:02:38 +02:00
Marvin Flock 13ad52f221 fix: add small fixes 2026-04-14 18:50:05 +02:00
Jürgen Meyer a44564a40e Anzeige naegative Satzpunkte in Ligatabelle 2026-04-09 11:11:37 +02:00
Jürgen Meyer ee4e817ad4 Aktualisierung Spielerstatistiken 2026-04-06 08:10:55 +02:00
jmeyer26 8a7ff6c234 Merge branch 'sportsmanager2-dev' into sportsmanager2-issue274-neu 2026-04-06 07:41:01 +02:00
Jürgen Meyer 8fb4ed1cdd Filter Mannschaften in Spielerstatistik 2026-04-06 07:33:33 +02:00
Jürgen Meyer a2243d9ccf Teams und Filter Spiele in Wertung hinzugefügt. 2026-04-06 05:53:13 +02:00
MarvinF 308fbae4e5 Merge pull request #277 from Deutscher-Tischfussballbund/sportsmanager2-issue275
Display Teamlogo in Hall of Fame
2026-04-05 19:10:55 +02:00
MarvinF d6d2a04ceb Merge branch 'sportsmanager2-dev' into sportsmanager2-issue275 2026-04-05 19:10:32 +02:00
MarvinF d7d6751b70 Merge pull request #278 from Deutscher-Tischfussballbund/sportsmanager2-issue276
Optimization of direct comparison
2026-04-05 19:07:34 +02:00
Jürgen Meyer b112b4dc31 Effizienzindex und Punkteschnitt zu Spielerstatistoken hinzugefügt. 2026-04-04 12:42:07 +02:00
jmeyer26 ac416c1822 Fehler Vergleich Satzpunkte korrigiert 2026-04-03 07:37:32 +02:00
Jürgen Meyer c92774b27d Spielerstatistik Race Permormance Index hinzugefügt 2026-04-02 18:48:43 +02:00
Jürgen Meyer b33a7e6a25 Unnötige Variablen gelöscht 2026-04-02 11:59:39 +02:00
Jürgen Meyer f86815dae5 Auswahl Direkter Vergleich nach Punkte, Satzpunkte, Tore 2026-04-02 11:56:51 +02:00
Jürgen Meyer 43a03bbb09 Hall of Fame - Zuordnung Mannschaftswappen über Teamname 2026-04-01 15:51:23 +02:00
9 changed files with 1581 additions and 371 deletions
@@ -953,6 +953,14 @@ function adminEinstellungen(): void
redirectSportsManagerURL('&task=admin_uebersicht'); redirectSportsManagerURL('&task=admin_uebersicht');
} }
function adminSportshub(): void
{
ini_set('memory_limit', '1024M');
$db = getDatabase(true);
$exporter = new SMExporter($db);
$exporter->run();
}
function adminDatenbank(): void function adminDatenbank(): void
{ {
$db = getDatabase(true); $db = getDatabase(true);
@@ -3474,6 +3482,8 @@ function adminVereine(): void
if (!benutzerZugriff("vereine_aendern")) if (!benutzerZugriff("vereine_aendern"))
keinZugriff(true); keinZugriff(true);
$ansprechpartner = [];
$query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten"; $query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten";
$organisationAnzeigen = loadResult($db, $query) > 1; $organisationAnzeigen = loadResult($db, $query) > 1;
@@ -3483,7 +3493,21 @@ function adminVereine(): void
. "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"
. "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, ausgetreten, vereinsname"; . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, ausgetreten, vereinsname";
$vereine = loadObjectList($db, $query); $vereine = loadObjectList($db, $query);
HTML_sportsmanager_admin::adminVereine($vereine, $organisationAnzeigen);
$query = "SELECT #__sportsmanager_verein.verein_id, email FROM #__sportsmanager_vereinsansprechpartner"
. "\n LEFT join #__sportsmanager_verein ON #__sportsmanager_vereinsansprechpartner.verein_id = #__sportsmanager_verein.verein_id"
. "\n WHERE #__sportsmanager_verein.ausgetreten = 0"
. "\n AND email IS NOT NULL AND email <> '';";
$ergebnisse = loadObjectList($db, $query);
if (!empty($ergebnisse)){
foreach($ergebnisse as $value){
if (empty($ansprechpartner[$value->verein_id]) OR !in_array($value->email, $ansprechpartner[$value->verein_id]))
$ansprechpartner[$value->verein_id][] = $value->email;
}
}
HTML_sportsmanager_admin::adminVereine($vereine, $organisationAnzeigen, $ansprechpartner);
} }
function adminEditVerein(): void function adminEditVerein(): void
@@ -4525,6 +4549,7 @@ function adminEditTeamspielmodus(): void
$punkte_sieg_doppel_separat = $jInput->get('punkte_sieg_doppel_separat', 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; $punkte_sieg_doppel = $punkte_sieg_doppel_separat ? $jInput->get('punkte_sieg_doppel', 0, 'INT') : $punkte_sieg_einzel;
$heimtausch = $jInput->get('heimtausch', 0, 'INT'); $heimtausch = $jInput->get('heimtausch', 0, 'INT');
$spiele_in_spielerstatistik = $jInput->get('spiele_in_spielerstatistik', 0, 'INT');
$status = $jInput->get('status', 0, 'INT'); $status = $jInput->get('status', 0, 'INT');
$spielpunkte_wertung_einzel = $jInput->get('spielpunkte_wertung_einzel', 0, 'INT'); $spielpunkte_wertung_einzel = $jInput->get('spielpunkte_wertung_einzel', 0, 'INT');
$spielpunkte_wertung_doppel_separat = $jInput->get('spielpunkte_wertung_doppel_separat', 0, 'INT'); $spielpunkte_wertung_doppel_separat = $jInput->get('spielpunkte_wertung_doppel_separat', 0, 'INT');
@@ -4572,7 +4597,11 @@ function adminEditTeamspielmodus(): void
$modus = $db->escape($modus); $modus = $db->escape($modus);
if ($id == 0) { if ($id == 0) {
$query = "INSERT INTO #__sportsmanager_teamspiel_modus (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, spielpunkte_bedingung, spielernamen, heimtausch, modus, status) VALUES ('$bezeichnung', '$punktetyp', '$punkte_sieg_einzel', '$punkte_sieg_doppel', '$spielpunkte_wertung_einzel', '$spielpunkte_wertung_doppel', '$spielpunkte_bedingung', '$spielernamen', '$heimtausch', '$modus', '$status');"; $query = "INSERT INTO #__sportsmanager_teamspiel_modus"
. "\n (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel,"
. "\n spielpunkte_bedingung, spielernamen, heimtausch, modus, spiele_in_spielerstatistik, status)"
. "\n VALUES ('$bezeichnung', '$punktetyp', '$punkte_sieg_einzel', '$punkte_sieg_doppel', '$spielpunkte_wertung_einzel',"
. "\n '$spielpunkte_wertung_doppel', '$spielpunkte_bedingung', '$spielernamen', '$heimtausch', '$modus', '$spiele_in_spielerstatistik', '$status');";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
die($db->stderr(true)); die($db->stderr(true));
@@ -4590,6 +4619,7 @@ function adminEditTeamspielmodus(): void
. "\n spielernamen = '$spielernamen'," . "\n spielernamen = '$spielernamen',"
. "\n heimtausch = '$heimtausch'," . "\n heimtausch = '$heimtausch',"
. "\n modus = '$modus'," . "\n modus = '$modus',"
. "\n spiele_in_spielerstatistik = '$spiele_in_spielerstatistik',"
. "\n status = '$status'" . "\n status = '$status'"
. "\n WHERE teamspiel_modus_id = $id"; . "\n WHERE teamspiel_modus_id = $id";
$db->setQuery($query); $db->setQuery($query);
@@ -7788,6 +7818,7 @@ function adminHalloffameMitglieder(): void
if ($halloffame->spielform == 1){ if ($halloffame->spielform == 1){
foreach ($rows as $row) { foreach ($rows as $row) {
$index_vereinid = "verein_id_" . $row->platz; $index_vereinid = "verein_id_" . $row->platz;
$index_teamid = "team_id_" . $row->platz;
$index_team = "teamname_" . $row->platz; $index_team = "teamname_" . $row->platz;
if (!isset($mitglieder[$row->jahr])) { if (!isset($mitglieder[$row->jahr])) {
$mitglieder[$row->jahr] = new stdClass(); $mitglieder[$row->jahr] = new stdClass();
@@ -7799,6 +7830,14 @@ function adminHalloffameMitglieder(): void
$halloffame->platz2_zeigen = 1; $halloffame->platz2_zeigen = 1;
if ($row->platz == 3 && !empty($row->teamname)) if ($row->platz == 3 && !empty($row->teamname))
$halloffame->platz3_zeigen = 1; $halloffame->platz3_zeigen = 1;
//Suche team_id wenn keine verein_id vorhanden
if (empty($row->verein_id)){
$query = "SELECT team_id FROM #__sportsmanager_team WHERE teamname LIKE '$row->teamname%' ORDER BY team_id DESC LIMIT 1;";
$mitglieder[$row->jahr]->$index_teamid = loadResult($db, $query);
} else {
$mitglieder[$row->jahr]->$index_teamid = "";
}
} }
} }
if ($halloffame->spielform == 2 || $halloffame->spielform == 3){ if ($halloffame->spielform == 2 || $halloffame->spielform == 3){
@@ -8559,6 +8598,8 @@ function adminMannschaften(): void
if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId)) if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungId))
keinZugriff(true); keinZugriff(true);
$ansprechpartner = [];
$query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId"; $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungId";
$rows = loadObjectList($db, $query); $rows = loadObjectList($db, $query);
if (count($rows) < 1) die("Wrong id!"); if (count($rows) < 1) die("Wrong id!");
@@ -8583,7 +8624,36 @@ function adminMannschaften(): void
. "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId" . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId"
. "\n ORDER BY teamname"; . "\n ORDER BY teamname";
$rows = loadObjectList($db, $query); $rows = loadObjectList($db, $query);
HTML_sportsmanager_admin::adminMannschaften($veranstaltung, $rows);
//Ansprechpartner Teams
$query = "SELECT #__sportsmanager_team.team_id, email FROM #__sportsmanager_teamansprechpartner"
. "\n LEFT JOIN #__sportsmanager_team ON #__sportsmanager_teamansprechpartner.team_id = #__sportsmanager_team.team_id"
. "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId"
. "\n AND email IS NOT NULL AND email <> '';";
$ergebnisse = loadObjectList($db, $query);
if (!empty($ergebnisse)){
foreach($ergebnisse as $value){
if (empty($ansprechpartner[$value->team_id]) OR !in_array($value->email, $ansprechpartner[$value->team_id]))
$ansprechpartner[$value->team_id][] = $value->email;
}
}
//Ansprechpartner Vereine
$query = "SELECT #__sportsmanager_team.team_id, #__sportsmanager_vereinsansprechpartner.email"
. "\n FROM #__sportsmanager_team"
. "\n LEFT JOIN #__sportsmanager_verein ON #__sportsmanager_team.verein_id = #__sportsmanager_verein.verein_id"
. "\n LEFT JOIN #__sportsmanager_vereinsansprechpartner ON #__sportsmanager_verein.verein_id = #__sportsmanager_vereinsansprechpartner.verein_id"
. "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungId"
. "\n AND #__sportsmanager_vereinsansprechpartner.email IS NOT NULL AND #__sportsmanager_vereinsansprechpartner.email <> '';";
$ergebnisse = loadObjectList($db, $query);
if (!empty($ergebnisse)){
foreach($ergebnisse as $value){
if (empty($ansprechpartner[$value->team_id]) OR !in_array($value->email, $ansprechpartner[$value->team_id]))
$ansprechpartner[$value->team_id][] = $value->email;
}
}
HTML_sportsmanager_admin::adminMannschaften($veranstaltung, $rows, $ansprechpartner);
} }
function adminEditMannschaft(): void function adminEditMannschaft(): void
@@ -14190,7 +14260,7 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void
HTML_sportsmanager_admin::adminImportTurnierdisziplinMeldungenSpieleForm($row, $veranstalter); HTML_sportsmanager_admin::adminImportTurnierdisziplinMeldungenSpieleForm($row, $veranstalter);
} }
#[NoReturn] function adminLoeschenTurnierdisziplinMeldungenSpiele($id): void function adminLoeschenTurnierdisziplinMeldungenSpiele($id): void
{ {
$db = getDatabase(); $db = getDatabase();
global $_FILES; global $_FILES;
@@ -5708,6 +5708,39 @@ function updateDatabase(): void
} }
} }
if ($datenbank_version < 120) {
$columns = $db->getTableColumns('#__sportsmanager_teamspiel_modus');
if (!array_key_exists('spiele_in_spielerstatistik', $columns)){
$query = "ALTER TABLE `#__sportsmanager_teamspiel_modus`"
. "\n ADD `spiele_in_spielerstatistik` INT(4) NOT NULL DEFAULT '0' AFTER `heimtausch`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$columns = $db->getTableColumns('#__sportsmanager_bestenliste_punkte');
if (!array_key_exists('team_id', $columns)){
$query = "ALTER TABLE `#__sportsmanager_bestenliste_punkte`"
. "\n ADD `team_id` INT(11) NULL DEFAULT NULL AFTER `spieler_2_id`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$spielerstatistik_aktualisieren = true;
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '120'"
. "\n WHERE name = 'datenbank_version'";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
if ($termin_aktionen_email_setzen) { if ($termin_aktionen_email_setzen) {
$query = "SELECT aktion_user_id, termin_aktion_id" $query = "SELECT aktion_user_id, termin_aktion_id"
. "\n FROM #__sportsmanager_termin_aktion"; . "\n FROM #__sportsmanager_termin_aktion";
@@ -43,6 +43,7 @@ require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/vie
require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_ticker.php'; require_once JPATH_SITE . '/components/com_sportsmanager/views/sportsmanager/view_ticker.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php'; require_once JPATH_SITE . '/components/com_sportsmanager/util/image.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/email.php'; require_once JPATH_SITE . '/components/com_sportsmanager/util/email.php';
require_once JPATH_SITE . '/components/com_sportsmanager/util/export.php';
require_once JPATH_SITE . '/components/com_sportsmanager/database/update.php'; // will also include init.php and util.php require_once JPATH_SITE . '/components/com_sportsmanager/database/update.php'; // will also include init.php and util.php
initDatabase(); initDatabase();
@@ -83,6 +84,9 @@ if ($task == "spielerbild") {
case 'admin_einstellungen_save': case 'admin_einstellungen_save':
adminSaveEinstellungen(); adminSaveEinstellungen();
break; break;
case 'admin_sportshub':
adminSportshub();
break;
case 'admin_datenbank': case 'admin_datenbank':
adminDatenbank(); adminDatenbank();
break; break;
@@ -1805,7 +1809,7 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
$teams = getTabelleAktuellerSpieltag($veranstaltung); $teams = getTabelleAktuellerSpieltag($veranstaltung);
} else { } else {
$teams = getTabelleSpieltag($veranstaltung,$spieltag); $teams = getTabelleSpieltag($veranstaltung,$spieltag);
if ($veranstaltung->direktervergleich && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){ if ($veranstaltung->direktervergleich > 0 && $spieltag >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag); $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag);
} }
} }
@@ -1833,17 +1837,40 @@ function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation =
function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag) function getTabelleDirekterVergleich($teams,$veranstaltung,$spieltag)
{ {
$gesamtpunkte = 1000; $gesamtpunkte = 1000;
$anzahlSpiele = 1000; $anzahl_spiele = 1000;
$punkte_differenz = 1000;
$punkte_quotient = 1000.0000;
$spielpunkte_differenz = 1000;
$spielpunkte_quotient = 1000.0000;
$platz = 0; $platz = 0;
$punktgleicheMannschaften = []; $punktgleicheMannschaften = [];
$korrekturen = []; $korrekturen = [];
$bufferplatz = []; $bufferplatz = [];
foreach($teams AS $team){ foreach($teams AS $team){
$bufferplatz[$team->team_id]['platz'] = $team->platz; $bufferplatz[$team->team_id]['platz'] = $team->platz;
if (($gesamtpunkte != $team->gesamtpunkte) OR ($anzahlSpiele != $team->anzahl_spiele)){ $unterschied = false;
if (($gesamtpunkte != $team->gesamtpunkte) || ($anzahl_spiele != $team->anzahl_spiele))
$unterschied = true;
if ($veranstaltung->direktervergleich >= 2 && in_array($veranstaltung->tabellenwertung, [1,4,7,10]) && $spielpunkte_differenz != $team->spielpunkte_differenz)
$unterschied = true;
if ($veranstaltung->direktervergleich >= 2 && in_array($veranstaltung->tabellenwertung, [2,5,8,11]) && $spielpunkte_quotient != $team->spielpunkte_quotient)
$unterschied = true;
if ($veranstaltung->direktervergleich == 3 && in_array($veranstaltung->tabellenwertung, [1,4,7,10]) && $punkte_differenz != $team->punkte_differenz)
$unterschied = true;
if ($veranstaltung->direktervergleich == 3 && in_array($veranstaltung->tabellenwertung, [2,5,8,11]) && $punkte_quotient != $team->punkte_quotient)
$unterschied = true;
if ($unterschied)
{
$gesamtpunkte = $team->gesamtpunkte; $gesamtpunkte = $team->gesamtpunkte;
$anzahlSpiele = $team->anzahl_spiele; $anzahl_spiele = $team->anzahl_spiele;
$punkte_differenz = $team->punkte_differenz;
$punkte_quotient = $team->punkte_quotient;
$spielpunkte_differenz = $team->spielpunkte_differenz;
$spielpunkte_quotient = $team->spielpunkte_quotient;
$platz = $team->platz; $platz = $team->platz;
$punktgleicheMannschaften[$platz] = $team->team_id; $punktgleicheMannschaften[$platz] = $team->team_id;
} }
@@ -4484,6 +4511,7 @@ function halloffameDetails($uebergabe_id = 0): void
if ($halloffame->spielform == 1){ if ($halloffame->spielform == 1){
foreach ($rows as $row) { foreach ($rows as $row) {
$index_vereinid = "verein_id_" . $row->platz; $index_vereinid = "verein_id_" . $row->platz;
$index_teamid = "team_id_" . $row->platz;
$index_team = "teamname_" . $row->platz; $index_team = "teamname_" . $row->platz;
if (!isset($mitglieder[$row->jahr])) { if (!isset($mitglieder[$row->jahr])) {
$mitglieder[$row->jahr] = new stdClass(); $mitglieder[$row->jahr] = new stdClass();
@@ -4495,6 +4523,14 @@ function halloffameDetails($uebergabe_id = 0): void
$halloffame->platz2_zeigen = 1; $halloffame->platz2_zeigen = 1;
if ($row->platz == 3 && !empty($row->teamname)) if ($row->platz == 3 && !empty($row->teamname))
$halloffame->platz3_zeigen = 1; $halloffame->platz3_zeigen = 1;
//Suche team_id wenn keine verein_id vorhanden
if (empty($row->verein_id)){
$query = "SELECT team_id FROM #__sportsmanager_team WHERE teamname LIKE '$row->teamname%' ORDER BY team_id DESC LIMIT 1;";
$mitglieder[$row->jahr]->$index_teamid = loadResult($db, $query);
} else {
$mitglieder[$row->jahr]->$index_teamid = "";
}
} }
} }
if ($halloffame->spielform == 2 || $halloffame->spielform == 3){ if ($halloffame->spielform == 2 || $halloffame->spielform == 3){
@@ -5270,7 +5306,7 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
} }
// Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind. // Direkter Vergleich, wenn mindestens die Hälfte der Spieltage gespielt sind.
if ($veranstaltung->direktervergleich && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){ if ($veranstaltung->direktervergleich > 0 && $anzahl_spieltage_gespielt >= $anzahl_spieltage_komplett/2 && $anzahl_spieltage_komplett >= 3){
$teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag); $teams = getTabelleDirekterVergleich($teams,$veranstaltung,$aktueller_spieltag);
} }
@@ -5284,7 +5320,10 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
$buchholz1_wert = 0; $buchholz1_wert = 0;
$buchholz2_wert = 0; $buchholz2_wert = 0;
foreach ($teams as $team) { foreach ($teams as $team) {
if ($platz == 1 || (($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte) || (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz)) || (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11 || $veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient)) || (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert))) if ($platz == 1 || (($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte)
|| (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz))
|| (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11 || $veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient))
|| (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert)))
$tatsaechlicher_platz = $platz; $tatsaechlicher_platz = $platz;
$query = "UPDATE #__sportsmanager_team" $query = "UPDATE #__sportsmanager_team"
. "\n SET platz = $tatsaechlicher_platz"; . "\n SET platz = $tatsaechlicher_platz";
@@ -5825,16 +5864,22 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
$punkte = array(); $punkte = array();
foreach ($veranstaltungen as $veranstaltung) { foreach ($veranstaltungen as $veranstaltung) {
$query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte" $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, heim_team_id, gast_team_id,"
. "\n teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte"
. "\n FROM #__sportsmanager_begegnung" . "\n FROM #__sportsmanager_begegnung"
. "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = #__sportsmanager_team.team_id" . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = #__sportsmanager_team.team_id"
. "\n LEFT JOIN #__sportsmanager_teamspiel ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_teamspiel.begegnung_id" . "\n LEFT JOIN #__sportsmanager_teamspiel ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_teamspiel.begegnung_id"
. "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id"
. "\n WHERE ISNULL(unbestaetigtes_ergebnis_id) AND veranstaltung_id = $veranstaltung->veranstaltung_id"; . "\n LEFT JOIN #__sportsmanager_veranstaltung ON #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_teamspiel_modus ON #__sportsmanager_veranstaltung.modus_id = #__sportsmanager_teamspiel_modus.teamspiel_modus_id"
. "\n WHERE ISNULL(unbestaetigtes_ergebnis_id) AND #__sportsmanager_veranstaltung.veranstaltung_id = $veranstaltung->veranstaltung_id"
. "\n AND (#__sportsmanager_teamspiel_modus.spiele_in_spielerstatistik <= 0"
. "\n OR teamspiel_nummer <= #__sportsmanager_teamspiel_modus.spiele_in_spielerstatistik)";
if ($spielerstatistik->typ == 1) if ($spielerstatistik->typ == 1)
$query .= "\n AND ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id)"; $query .= "\n AND ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id)";
else if ($spielerstatistik->typ == 2 || $spielerstatistik->typ == 3) else if ($spielerstatistik->typ == 2 || $spielerstatistik->typ == 3)
$query .= "\n AND NOT (ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id))"; $query .= "\n AND NOT (ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id))";
$query .= "\n ORDER BY #__sportsmanager_begegnung.zeitpunkt ASC;";
$begegnungen = loadObjectList($db, $query); $begegnungen = loadObjectList($db, $query);
foreach ($begegnungen as $begegnung) { foreach ($begegnungen as $begegnung) {
@@ -5868,6 +5913,8 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
$gast_punkte = $begegnung->teamspiel_gast_punkte; $gast_punkte = $begegnung->teamspiel_gast_punkte;
$heim_spielpunkte = $begegnung->teamspiel_heim_spielpunkte; $heim_spielpunkte = $begegnung->teamspiel_heim_spielpunkte;
$gast_spielpunkte = $begegnung->teamspiel_gast_spielpunkte; $gast_spielpunkte = $begegnung->teamspiel_gast_spielpunkte;
$heim_team_id = $begegnung->heim_team_id;
$gast_team_id = $begegnung->gast_team_id;
$ergebnis = $heim_punkte > $gast_punkte ? 1 : ($heim_punkte < $gast_punkte ? 2 : 0); $ergebnis = $heim_punkte > $gast_punkte ? 1 : ($heim_punkte < $gast_punkte ? 2 : 0);
$heim_saetze = $ergebnis == 1 ? 1 : 0; $heim_saetze = $ergebnis == 1 ? 1 : 0;
$unentschieden_saetze = $ergebnis == 0 ? 1 : 0; $unentschieden_saetze = $ergebnis == 0 ? 1 : 0;
@@ -5888,6 +5935,10 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
$punkte[$spieler_id]["sv"] = 0; $punkte[$spieler_id]["sv"] = 0;
$punkte[$spieler_id]["pg"] = 0; $punkte[$spieler_id]["pg"] = 0;
$punkte[$spieler_id]["pv"] = 0; $punkte[$spieler_id]["pv"] = 0;
if ($typ == "H")
$punkte[$spieler_id]["team_id"] = $heim_team_id;
else
$punkte[$spieler_id]["team_id"] = $gast_team_id;
} }
if (($ergebnis == 1 && $typ == "H") || ($ergebnis == 2 && $typ != "H")) if (($ergebnis == 1 && $typ == "H") || ($ergebnis == 2 && $typ != "H"))
$punkte[$spieler_id]["s"] += 1; $punkte[$spieler_id]["s"] += 1;
@@ -6014,6 +6065,11 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
$spieler_punkte_saetze_verloren = $spieler_punkte["sv"]; $spieler_punkte_saetze_verloren = $spieler_punkte["sv"];
$spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"]; $spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"];
$spieler_punkte_punkte_verloren = $spieler_punkte["pv"]; $spieler_punkte_punkte_verloren = $spieler_punkte["pv"];
if (!empty($spieler_punkte["team_id"]))
$spieler_team_id = $spieler_punkte["team_id"];
else
$spieler_team_id = "NULL";
$query = "UPDATE #__sportsmanager_bestenliste_punkte" $query = "UPDATE #__sportsmanager_bestenliste_punkte"
. "\n SET siege = $spieler_punkte_siege," . "\n SET siege = $spieler_punkte_siege,"
. "\n unentschieden = $spieler_punkte_unentschieden," . "\n unentschieden = $spieler_punkte_unentschieden,"
@@ -6024,7 +6080,8 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
. "\n saetze_unentschieden = $spieler_punkte_saetze_unentschieden," . "\n saetze_unentschieden = $spieler_punkte_saetze_unentschieden,"
. "\n saetze_verloren = $spieler_punkte_saetze_verloren," . "\n saetze_verloren = $spieler_punkte_saetze_verloren,"
. "\n punkte_gewonnen = $spieler_punkte_punkte_gewonnen," . "\n punkte_gewonnen = $spieler_punkte_punkte_gewonnen,"
. "\n punkte_verloren = $spieler_punkte_punkte_verloren" . "\n punkte_verloren = $spieler_punkte_punkte_verloren,"
. "\n team_id = $spieler_team_id"
. "\n WHERE bestenliste_punkte_id = $row->bestenliste_punkte_id;"; . "\n WHERE bestenliste_punkte_id = $row->bestenliste_punkte_id;";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -6051,6 +6108,10 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
$spieler_punkte_saetze_verloren = $spieler_punkte["sv"]; $spieler_punkte_saetze_verloren = $spieler_punkte["sv"];
$spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"]; $spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"];
$spieler_punkte_punkte_verloren = $spieler_punkte["pv"]; $spieler_punkte_punkte_verloren = $spieler_punkte["pv"];
if (!empty($spieler_punkte["team_id"]))
$spieler_team_id = $spieler_punkte["team_id"];
else
$spieler_team_id = "NULL";
$query = "INSERT #__sportsmanager_bestenliste_punkte" $query = "INSERT #__sportsmanager_bestenliste_punkte"
. "\n SET siege = $spieler_punkte_siege," . "\n SET siege = $spieler_punkte_siege,"
. "\n unentschieden = $spieler_punkte_unentschieden," . "\n unentschieden = $spieler_punkte_unentschieden,"
@@ -6064,6 +6125,7 @@ function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $gea
. "\n punkte_verloren = $spieler_punkte_punkte_verloren," . "\n punkte_verloren = $spieler_punkte_punkte_verloren,"
. "\n spieler_id = $spieler_1_id," . "\n spieler_id = $spieler_1_id,"
. "\n spieler_2_id = " . ($spieler_2_id != NULL ? "$spieler_2_id" : "NULL") . "," . "\n spieler_2_id = " . ($spieler_2_id != NULL ? "$spieler_2_id" : "NULL") . ","
. "\n team_id = $spieler_team_id,"
. "\n bestenliste_id = $spielerstatistik->bestenliste_id;"; . "\n bestenliste_id = $spielerstatistik->bestenliste_id;";
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
@@ -7312,6 +7374,7 @@ function spielerstatistiken(): void
$details_anzeigen = currentUserHasAccessToDetails(); $details_anzeigen = currentUserHasAccessToDetails();
$filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT');
if ($filter_saison_id == 0) if ($filter_saison_id == 0)
$filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT');
@@ -7341,25 +7404,53 @@ function spielerstatistiken(): void
. "\n ORDER BY reihenfolge, bezeichnung, kategorie"; . "\n ORDER BY reihenfolge, bezeichnung, kategorie";
$spielerstatistiken = loadObjectList($db, $query); $spielerstatistiken = loadObjectList($db, $query);
HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, "", null, null, null, null);
foreach ($spielerstatistiken as $spielerstatistik) { foreach ($spielerstatistiken as $spielerstatistik) {
$query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden, spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2, spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2"; //Mindestzahl an Spielen
if ($spielerstatistik->tabellenwertung == 1) $spielerstatistik->min_spiele = 0;
if (in_array($spielerstatistik->tabellenwertung, [4, 5])) {
$query = "SELECT siege + unentschieden + niederlagen AS spiele"
. "\n FROM #__sportsmanager_bestenliste_punkte"
. "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"
. "\n ORDER BY spiele DESC;";
$max_spiele = loadResult($db, $query);
$spielerstatistik->min_spiele = round($max_spiele/2);
}
$query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, team.teamname,"
. "\n siege + unentschieden + niederlagen AS spiele,"
. "\n #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht,"
. "\n #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden,"
. "\n spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2,"
. "\n spieler_2.geschlecht AS geschlecht_2, spieler_2.aktueller_verein_id AS aktueller_verein_id_2,"
. "\n spieler_2.bild_ausblenden AS bild_ausblenden_2,"
. "\n IF(siege > 0 OR unentschieden > 0, ROUND(((siege * 2 + unentschieden)*100) / ((siege + unentschieden + niederlagen)*2)), 0) AS quotient";
if ($spielerstatistik->tabellenwertung == 0){
$query .= "\n , 0 AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 1){
$query .= ", IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex"; $query .= ", IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex";
else if ($spielerstatistik->tabellenwertung == 2) } else if ($spielerstatistik->tabellenwertung == 2){
$query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren), 0) AS leistungsindex"; $query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren)), 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 3){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * 2 + unentschieden + punkte_gewonnen - punkte_verloren, 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 4){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen*100 / (punkte_gewonnen + punkte_verloren),2), 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 5){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(spielpunkte_gewonnen / (siege + unentschieden + niederlagen),2), 0) AS leistungsindex";
}
$query .= "\n FROM #__sportsmanager_bestenliste_punkte" $query .= "\n FROM #__sportsmanager_bestenliste_punkte"
. "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)"
. "\n LEFT JOIN (SELECT team_id, teamname FROM #__sportsmanager_team) AS team ON #__sportsmanager_bestenliste_punkte.team_id = team.team_id"
. "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id"
. "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"
. "\n AND siege + unentschieden + niederlagen >= $spielerstatistik->min_spiele";
if ($spielerstatistik->tabellenwertung == 0) if ($spielerstatistik->tabellenwertung == 0)
$query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname";
else else
$query .= "\n ORDER BY leistungsindex DESC, spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; $query .= "\n ORDER BY leistungsindex DESC, quotient DESC, punkte_gewonnen - punkte_verloren DESC, nachname, vorname";
$spielerstatistik_punkte = loadObjectList($db, $query); $spielerstatistik_punkte = loadObjectList($db, $query);
HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, FALSE, 0, 0, $details_anzeigen); HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, FALSE, 0, 0, 0, $details_anzeigen);
} }
administrationFooter(); administrationFooter();
@@ -7368,6 +7459,7 @@ function spielerstatistiken(): void
function spielerstatistik(): void function spielerstatistik(): void
{ {
$db = getDatabase(); $db = getDatabase();
global $params;
$jInput = Factory::getContainer()->get(SiteApplication::class)->input; $jInput = Factory::getContainer()->get(SiteApplication::class)->input;
$id = $jInput->get('id', 0, 'INT'); $id = $jInput->get('id', 0, 'INT');
@@ -7383,7 +7475,10 @@ function spielerstatistik(): void
} }
} }
$details_anzeigen = currentUserHasAccessToDetails(); $details_anzeigen = currentUserHasAccessToDetails();
$filter_min_spiele = $jInput->get('filter_min_spiele', 999, 'INT');
$filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT'); $filter_saison_id = $jInput->get('filter_saison_id', 0, 'INT');
$filter_teams = $jInput->get('filter_teams', 0, 'INT');
if ($filter_saison_id == 0) { if ($filter_saison_id == 0) {
$filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); $filter_saison_id = $jInput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT');
} }
@@ -7419,24 +7514,75 @@ function spielerstatistik(): void
} }
$spielerstatistik = $rows[0]; $spielerstatistik = $rows[0];
//Mindestzahl an Spielen
$spiele = null;
$spielerstatistik->min_spiele = 0;
if (in_array($spielerstatistik->tabellenwertung, [4, 5])) {
$query = "SELECT siege + unentschieden + niederlagen AS spiele"
. "\n FROM #__sportsmanager_bestenliste_punkte"
. "\n WHERE bestenliste_id = $id"
. "\n ORDER BY spiele DESC;";
$max_spiele = loadResult($db, $query);
if ($max_spiele > 0){
$offset = $max_spiele/10;
$spiele[0] = "Alle zeigen";
for($i = 1; $i <= 10; $i++){
$spiele[round($offset*$i)] = $i*10 . "%";
}
}
$spielerstatistik->max_spiele = $max_spiele;
if ($filter_min_spiele == 999)
$spielerstatistik->min_spiele = round($max_spiele/2);
else
$spielerstatistik->min_spiele = $filter_min_spiele;
}
// Spielerstatistikpunkte ermitteln // Spielerstatistikpunkte ermitteln
$query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden, spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2, spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2"; $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, team.teamname,"
if ($spielerstatistik->tabellenwertung == 1) { . "\n siege + unentschieden + niederlagen AS spiele,"
$query .= ", IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex"; . "\n #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden,"
} else if ($spielerstatistik->tabellenwertung == 2) { . "\n spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2,"
$query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren), 0) AS leistungsindex"; . "\n spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2,"
. "\n IF(siege > 0 OR unentschieden > 0, ROUND(((siege * 2 + unentschieden)*100) / ((siege + unentschieden + niederlagen)*2)), 0) AS quotient";
if ($spielerstatistik->tabellenwertung == 0){
$query .= "\n , spielpunkte_gewonnen AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 1){
$query .= "\n , IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 2){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren)), 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 3){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * 2 + unentschieden + punkte_gewonnen - punkte_verloren, 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 4){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(punkte_gewonnen*100 / (punkte_gewonnen + punkte_verloren),2), 0) AS leistungsindex";
} else if ($spielerstatistik->tabellenwertung == 5){
$query .= "\n , IF(punkte_gewonnen > 0 OR punkte_verloren > 0, ROUND(spielpunkte_gewonnen / (siege + unentschieden + niederlagen),2), 0) AS leistungsindex";
} }
$query .= "\n FROM #__sportsmanager_bestenliste_punkte" $query .= "\n FROM #__sportsmanager_bestenliste_punkte"
. "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)"
. "\n LEFT JOIN (SELECT team_id, teamname FROM #__sportsmanager_team) AS team ON #__sportsmanager_bestenliste_punkte.team_id = team.team_id"
. "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id"
. "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"
. "\n AND siege + unentschieden + niederlagen >= $spielerstatistik->min_spiele";
if ($spielerstatistik->tabellenwertung == 0) { if ($spielerstatistik->tabellenwertung == 0) {
$query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname";
} else { } else {
$query .= "\n ORDER BY leistungsindex DESC, spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; $query .= "\n ORDER BY leistungsindex DESC, quotient DESC, spielpunkte_gewonnen - spielpunkte_verloren DESC, punkte_gewonnen - punkte_verloren DESC, nachname, vorname";
} }
$spielerstatistik_punkte = loadObjectList($db, $query); $spielerstatistik_punkte = loadObjectList($db, $query);
//Dropdown teams
$query = "SELECT 0 AS team_id, '" . Text::_('COM_SPORTSMANAGER_SELECT_ALL') . "' AS teamname, 0 AS sort_order"
. "\n UNION"
. "\n SELECT team.team_id, team.teamname, 1 AS sort_order"
. "\n FROM #__sportsmanager_bestenliste_punkte"
. "\n LEFT JOIN (SELECT team_id, teamname FROM #__sportsmanager_team) AS team"
. "\n ON #__sportsmanager_bestenliste_punkte.team_id = team.team_id"
. "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"
. "\n GROUP BY team.team_id"
. "\n ORDER BY sort_order, teamname;";
$db->setQuery($query);
$teams = $db->loadObjectList('team_id');
// Vorherige und nächste Spielerstatistik ermitteln // Vorherige und nächste Spielerstatistik ermitteln
$query = "SELECT *" $query = "SELECT *"
. "\n FROM #__sportsmanager_bestenliste" . "\n FROM #__sportsmanager_bestenliste"
@@ -7463,7 +7609,8 @@ function spielerstatistik(): void
if (isJson()) { if (isJson()) {
JSON_sportsmanager::spielerstatistik($spielerstatistik_punkte); JSON_sportsmanager::spielerstatistik($spielerstatistik_punkte);
} else { } else {
HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen); HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, $id, $spiele, $spielerstatistik->min_spiele, $teams, $filter_teams);
HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen);
} }
} }
@@ -0,0 +1,804 @@
<?php
/**
* Joomla/PHP export to importFormat.json structure.
*
* Assumptions:
* - Joomla table prefix is used via #__.
* - Source timezone is Europe/Berlin; output is UTC ISO-8601 "Z".
* - For turnier:
* - rundenstufe = 10 => Vorrunde
* - rundenstufe = 1,2,3 => Hauptrunde with groups:
* 1 => Profifeld, 2 => Amateurfeld, 3 => Hobbyfeld
* - For team-based exports:
* - stage/group are synthesized as defaults.
*
* Place this in a Joomla context (CLI script, controller, or a small admin entry point).
*/
defined('_JEXEC') or die;
use Joomla\Database\DatabaseDriver;
final class SMExporter
{
private DatabaseDriver $db;
private DateTimeZone $sourceTz;
private DateTimeZone $outputTz;
// Optional filter; set to null for all seasons
private $exportSeasonId = null;
// Optional file output; set to null to echo JSON only
private string $outputFile = JPATH_ROOT . '/tsm.json';
private array $playerCache = [];
private array $meldungsPlayersCache = [];
private array $teamCache = [];
private array $disciplineShortNames = ['Offenes Doppel' => 'OD',
'Offenes Einzel' => 'OE',
'Damen Doppel' => 'DD',
'Damen Einzel' => 'DE',
'Herren Doppel' => 'HD',
'Herren Einzel' => 'HE',
'Junioren Doppel' => 'JD',
'Junioren Einzel' => 'JE',
'Senioren Doppel' => 'SD',
'Senioren Einzel' => 'SE',];
public function __construct(DatabaseDriver $db)
{
$this->db = $db;
$this->sourceTz = new DateTimeZone('Europe/Berlin');
$this->outputTz = new DateTimeZone('UTC');
}
/**
* Format a DB date/datetime into UTC ISO-8601.
*/
function isoUtc(?string $value, DateTimeZone $sourceTz, DateTimeZone $outputTz): ?string
{
if (!$value || $value === '0000-00-00' || $value === '0000-00-00 00:00:00') {
return null;
}
try {
$dt = new DateTimeImmutable($value, $sourceTz);
return $dt->setTimezone($outputTz)->format('Y-m-d\TH:i:s\Z');
} catch (Throwable $e) {
return null;
}
}
/**
* Build shortName from kuerzel or disziplin text.
*/
function disciplineShortName(?string $kuerzel, ?string $disziplin): string
{
$kuerzel = trim((string)$kuerzel);
if ($kuerzel !== '') {
return $kuerzel;
}
$disziplin = (string)$disziplin;
foreach ($this->disciplineShortNames as $needle => $short) {
if (mb_stripos($disziplin, $needle) !== false) {
return $short;
}
}
// Last-resort fallback: initials of the words
$words = preg_split('/\s+/', trim($disziplin));
$initials = '';
foreach ($words as $w) {
if ($w !== '') {
$initials .= mb_substr($w, 0, 1);
}
}
return $initials !== '' ? mb_strtoupper($initials) : 'X';
}
/**
* Build a person object from spieler_id or from turniermeldung_spieler_name.
*/
function getPersonForSpieler(
Joomla\Database\DatabaseInterface $db,
?int $spielerId,
?int $turniermeldungSpielerId,
array &$playerCache
): array
{
if ($spielerId && isset($playerCache[$spielerId])) {
return $playerCache[$spielerId];
}
if ($spielerId) {
$query = $db->getQuery(true)
->select(['spieler_id', 'vorname', 'nachname', 'spielernr'])
->from($db->quoteName('#__sportsmanager_spieler'))
->where($db->quoteName('spieler_id') . ' = ' . (int)$spielerId);
$db->setQuery($query);
$row = $db->loadObject();
$person = [
'name' => $row ? trim(($row->vorname ?? '') . ' ' . ($row->nachname ?? '')) : ('Spieler ' . $spielerId),
'playerNr' => $row && !empty($row->spielernr) ? (string)$row->spielernr : null,
];
$playerCache[$spielerId] = $person;
return $person;
}
if ($turniermeldungSpielerId) {
$query = $db->getQuery(true)
->select(['vorname', 'nachname', 'vereinsname'])
->from($db->quoteName('#__sportsmanager_turniermeldung_spieler_name'))
->where($db->quoteName('turniermeldung_spieler_id') . ' = ' . (int)$turniermeldungSpielerId)
->order('turniermeldung_spieler_name_id ASC');
$db->setQuery($query);
$row = $db->loadObject();
if ($row) {
return [
'name' => trim(($row->vorname ?? '') . ' ' . ($row->nachname ?? '')),
'playerNr' => null,
];
}
}
return [
'name' => 'Unknown',
'playerNr' => null,
];
}
/**
* Get all players assigned to a turniermeldung.
*/
function getMeldungPlayers(
Joomla\Database\DatabaseInterface $db,
int $turniermeldungId,
array &$meldungsPlayersCache,
array &$playerCache
): array
{
if (isset($meldungsPlayersCache[$turniermeldungId])) {
return $meldungsPlayersCache[$turniermeldungId];
}
$query = $db->getQuery(true)
->select(['tms.turniermeldung_spieler_id', 'tms.spieler_id'])
->from($db->quoteName('#__sportsmanager_turniermeldung_spieler', 'tms'))
->where('tms.turniermeldung_id = ' . $turniermeldungId)
->order('tms.turniermeldung_spieler_id ASC');
$db->setQuery($query);
$rows = $db->loadObjectList();
$players = [];
foreach ($rows as $row) {
$players[] = $this->getPersonForSpieler($db, $row->spieler_id ? (int)$row->spieler_id : null, (int)$row->turniermeldung_spieler_id, $playerCache);
}
$meldungsPlayersCache[$turniermeldungId] = $players;
return $players;
}
/**
* Build display name for a side.
*/
function buildSideName(array $players): string
{
if (count($players) === 0) {
return 'Unknown';
}
if (count($players) === 1) {
return $players[0]['name'];
}
$names = [];
foreach ($players as $p) {
$names[] = $p['name'];
}
return implode(' / ', $names);
}
/**
* Parse set scores from a result string.
* Supports patterns like "11:7;11:9", "11-7 11-9", etc.
*/
function parseSets(array $detail): array
{
$sets = [];
$n = 1;
foreach ($detail as $set) {
$set = trim((string)$set);
if ($set === '') {
continue;
}
preg_match_all('/(\d{1,2})\s*[:\-]\s*(\d{1,2})/', $set, $m, PREG_SET_ORDER);
foreach ($m as $match) {
$sets[] = [
'number' => $n++,
'scoreHome' => (int)$match[1],
'scoreAway' => (int)$match[2],
];
}
}
return $sets;
}
/**
* Determine match state.
*/
function determineMatchState($result, array $detail): string
{
if ($result !== null || ( !empty($detail) && !array_filter($detail, fn($v) => $v === null || trim((string)$v) === ''))) {
return 'PLAYED';
}
return 'SCHEDULED';
}
/**
* Determine match state.
*/
function determineWinner(array $detail, string $sourceType): string
{
if ($sourceType === 'TEAM') {
$sets = $this->parseSets($detail);
$homeSetsWon = 0;
$awaySetsWon = 0;
foreach ($sets as $set) {
if ($set['scoreHome'] > $set['scoreAway']) {
$homeSetsWon++;
} elseif ($set['scoreHome'] < $set['scoreAway']) {
$awaySetsWon++;
}
}
if ($homeSetsWon > $awaySetsWon) {
return 'HOME';
} elseif ($homeSetsWon < $awaySetsWon) {
return 'AWAY';
}
return 'DRAW';
} else {
if (count($detail) >0) {
if ($detail[0] == 1) {
return 'HOME';
} elseif ($detail[0] == 2) {
return 'AWAY';
} else {
return 'DRAW';
}
}
return 'UNKNOWN';
}
}
/**
* Determine group state based on a cutoff date.
*/
function determineFinishedState(?string $cutoffDate): string
{
if (!$cutoffDate || $cutoffDate === '0000-00-00') {
return 'PLANNED';
}
$today = new DateTimeImmutable('today');
$cutoff = new DateTimeImmutable($cutoffDate);
return ($cutoff < $today) ? 'FINISHED' : 'RUNNING';
}
/**
* Build one match object.
*/
function buildMatch(
array $homePlayers,
array $awayPlayers,
?string $startDate,
?string $endDate,
?int $result,
array $detail,
string $sourceType
): array
{
$type = (count($homePlayers) > 1 || count($awayPlayers) > 1) ? 'DOUBLE' : 'SINGLE';
$match = [
'startDate' => $startDate,
'endDate' => $endDate,
'type' => $type,
'state' => $this->determineMatchState($result, $detail),
'players' => [],
'sets' => $sourceType === 'TEAM' ? $this->parseSets($detail) : [],
'winner' => $this->determineWinner($detail, $sourceType),
];
foreach ($homePlayers as $p) {
$match['players'][] = [
'name' => $p['name'],
'playerNr' => $p['playerNr'],
'side' => 'HOME',
];
}
foreach ($awayPlayers as $p) {
$match['players'][] = [
'name' => $p['name'],
'playerNr' => $p['playerNr'],
'side' => 'AWAY',
];
}
// If detail parsing produced no sets, keep the structure valid by leaving it empty.
if ($sourceType === 'TEAM' && empty($match['sets']) && $result !== null) {
$match['sets'] = [];
}
return $match;
}
/**
* group matches. Based on String (e.g. E1E1, D1D1, D1D1, E2E2, D2D2 etc.)
*/
function groupMatches(array $pattern, array $games): array {
$grouped = [];
$order = []; // to preserve first appearance order
foreach ($pattern as $i => $slot) {
if (!array_key_exists($i, $games)) {
continue;
}
if (!isset($grouped[$slot])) {
$grouped[$slot] = [
'type' => $slot,
'sets' => []
];
$order[] = $slot; // remember order of first occurrence
}
$grouped[$slot]['sets'][] = $games[$i];
}
// rebuild ordered result
$result = [];
foreach ($order as $slot) {
$result[] = $grouped[$slot];
}
return $result;
}
function run(): void
{
set_time_limit(0);
$db = $this->db;
$export = [
'meta' => [
// Keep the organization value explicit, or replace it from settings if available.
'organisation' => 'TFVSH',
],
'seasons' => [],
];
// Seasons
$seasonSql = $db->getQuery(true)
->select(['saison_id', 'saisonbezeichnung'])
->from($db->quoteName('#__sportsmanager_saison'))
->order('saisonbezeichnung ASC, saison_id ASC');
if ($this->exportSeasonId !== null) {
$seasonSql->where('saison_id = ' . (int)$this->exportSeasonId);
}
$db->setQuery($seasonSql);
$seasons = $db->loadObjectList();
foreach ($seasons as $season) {
$seasonNode = [
'name' => (string)$season->saisonbezeichnung,
'events' => [],
];
/**
* Event type 1: turniere
*/
$turnierSql = $db->getQuery(true)
->select([
't.turnier_id',
't.turnierbezeichnung',
't.erster_tag',
't.letzter_tag',
])
->from($db->quoteName('#__sportsmanager_turnier', 't'))
->where('t.saison_id = ' . (int)$season->saison_id)
->order('t.erster_tag ASC, t.turnier_id ASC');
$db->setQuery($turnierSql);
$turniere = $db->loadObjectList();
foreach ($turniere as $turnier) {
$eventNode = [
'name' => (string)$turnier->turnierbezeichnung,
'disciplines' => [],
];
$discSql = $db->getQuery(true)
->select([
'd.turnierdisziplin_id',
'd.disziplin',
'd.kuerzel',
'd.beginn',
])
->from($db->quoteName('#__sportsmanager_turnierdisziplin', 'd'))
->where('d.turnier_id = ' . (int)$turnier->turnier_id)
->order('d.reihenfolge ASC, d.turnierdisziplin_id ASC');
$db->setQuery($discSql);
$disciplines = $db->loadObjectList();
foreach ($disciplines as $disc) {
$disciplineNode = [
'name' => (string)$disc->disziplin,
'shortName' => $this->disciplineShortName($disc->kuerzel, $disc->disziplin),
'stages' => [],
];
$spielSql = $db->getQuery(true)
->select([
'ts.turnierspiel_id',
'ts.turnierdisziplin_id',
'ts.spiel_nummer',
'ts.runde',
'ts.rundenstufe',
'ts.heim_meldung_id',
'ts.gast_meldung_id',
'ts.ergebnis',
'ts.ergebnis_detailliert',
'hm.meldungsgruppe_id AS heim_meldungsgruppe_id',
'gm.meldungsgruppe_id AS gast_meldungsgruppe_id',
])
->from($db->quoteName('#__sportsmanager_turnierspiel', 'ts'))
->leftJoin($db->quoteName('#__sportsmanager_turniermeldung', 'hm') . ' ON hm.turniermeldung_id = ts.heim_meldung_id')
->leftJoin($db->quoteName('#__sportsmanager_turniermeldung', 'gm') . ' ON gm.turniermeldung_id = ts.gast_meldung_id')
->where('ts.turnierdisziplin_id = ' . (int)$disc->turnierdisziplin_id)
->order('COALESCE(ts.rundenstufe, 99) ASC, COALESCE(ts.runde, 99) ASC, COALESCE(ts.spiel_nummer, 99) ASC, ts.turnierspiel_id ASC');
$db->setQuery($spielSql);
$spiele = $db->loadObjectList();
$stages = [];
foreach ($spiele as $spiel) {
$rundenstufe = (int)($spiel->rundenstufe ?? 0);
if ($rundenstufe === 10) {
$stageName = 'Vorrunde';
$groupName = 'Vorrunde';
} elseif (in_array($rundenstufe, [1, 2, 3], true)) {
$stageName = 'Hauptrunde';
$groupName = match ($rundenstufe) {
1 => 'Profifeld',
2 => 'Amateurfeld',
3 => 'Hobbyfeld',
};
} else {
$stageName = 'Stage A';
$groupName = 'Group A';
}
$groupKey = $stageName . '|' . $groupName;
if (!isset($stages[$stageName])) {
$stages[$stageName] = [];
}
if (!isset($stages[$stageName][$groupKey])) {
$stages[$stageName][$groupKey] = [
'name' => $groupName,
'rounds' => [],
'_dates' => [],
];
}
$homePlayers = $this->getMeldungPlayers($db, (int)$spiel->heim_meldung_id, $this->meldungsPlayersCache, $this->playerCache);
$awayPlayers = $this->getMeldungPlayers($db, (int)$spiel->gast_meldung_id, $this->meldungsPlayersCache, $this->playerCache);
$homeName = $this->buildSideName($homePlayers);
$awayName = $this->buildSideName($awayPlayers);
$startDate = $this->isoUtc((string)$disc->beginn, $this->sourceTz, $this->outputTz) ?: $this->isoUtc($turnier->erster_tag . ' 00:00:00', $this->sourceTz, $this->outputTz);
$endDate = $this->isoUtc((string)$disc->beginn, $this->sourceTz, $this->outputTz) ?: $this->isoUtc($turnier->letzter_tag . ' 23:59:59', $this->sourceTz, $this->outputTz);
$match = $this->buildMatch(
$homePlayers,
$awayPlayers,
$startDate,
$endDate,
$spiel->ergebnis !== null ? (int)$spiel->ergebnis : null,
[$spiel->ergebnis ?? null],
'TURNIER'
);
$roundIndex = $spiel->runde ?? 1;
$roundKey = (string)$roundIndex;
if (!isset($stages[$stageName][$groupKey]['rounds'][$roundKey])) {
$stages[$stageName][$groupKey]['rounds'][$roundKey] = [
'index' => $roundIndex,
'name' => 'Round ' . $roundIndex,
'matchdays' => [],
];
}
$matchdayName = 'Day ' . (int)($spiel->spiel_nummer ?: $spiel->turnierspiel_id);
$stages[$stageName][$groupKey]['rounds'][$roundKey]['matchdays'][] = [
'name' => $matchdayName,
'startDate' => $startDate,
'endDate' => $endDate,
'teamHome' => ['name' => $homeName],
'teamAway' => ['name' => $awayName],
'matches' => [$match],
];
$stages[$stageName][$groupKey]['_dates'][] = $turnier->letzter_tag ?: $turnier->erster_tag;
}
foreach ($stages as $stageName => $groupBucket) {
$stageNode = [
'name' => $stageName,
'groups' => [],
];
foreach ($groupBucket as $groupKey => $groupData) {
$cutoffDate = null;
if (!empty($groupData['_dates'])) {
$cutoffDate = max($groupData['_dates']);
}
$groupNode = [
'name' => $groupData['name'],
'tournamentMode' => 'unknown',
'state' => $this->determineFinishedState($cutoffDate),
'rounds' => [],
];
ksort($groupData['rounds'], SORT_NATURAL);
foreach ($groupData['rounds'] as $round) {
$groupNode['rounds'][] = $round;
}
$stageNode['groups'][] = $groupNode;
}
$disciplineNode['stages'][] = $stageNode;
}
$eventNode['disciplines'][] = $disciplineNode;
}
$seasonNode['events'][] = $eventNode;
}
/**
* Event type 2: team-based events from veranstaltung via team/begegnung/teamspiel
*/
$veranstaltungSql = $db->getQuery(true)
->select([
'v.veranstaltung_id',
'v.bezeichnung',
'v.erster_tag',
'v.letzter_tag',
'tsm.modus AS modus'
])
->from($db->quoteName('#__sportsmanager_veranstaltung', 'v'))
->innerJoin($db->quoteName('#__sportsmanager_team', 'tm') . ' ON tm.veranstaltung_id = v.veranstaltung_id')
->leftJoin($db->quoteName('#__sportsmanager_teamspiel_modus', 'tsm') . ' ON tsm.teamspiel_modus_id = v.modus_id')
->where('v.saison_id = ' . (int)$season->saison_id)
->group('v.veranstaltung_id, v.bezeichnung, v.erster_tag, v.letzter_tag')
->order('v.erster_tag, v.veranstaltung_id');
$db->setQuery($veranstaltungSql);
$veranstaltungen = $db->loadObjectList();
foreach ($veranstaltungen as $veranstaltung) {
$modus = array_map('trim', explode(',', $veranstaltung->modus));
$eventNode = [
'name' => (string)$veranstaltung->bezeichnung,
'disciplines' => [
[
'name' => 'Teamspiel',
'shortName' => 'TS',
'stages' => [
[
'name' => 'Stage A',
'groups' => [],
],
],
],
],
];
$groupNode = [
'name' => 'Group A',
'tournamentMode' => 'unknown',
'state' => 'PLANNED',
'rounds' => [],
];
$begegnungSql = $db->getQuery(true)
->select([
'b.begegnung_id',
'b.heim_team_id',
'b.gast_team_id',
'b.zeitpunkt',
'b.spieltag',
'b.spieltag_titel',
'b.spiel_nr',
])
->from($db->quoteName('#__sportsmanager_begegnung', 'b'))
->innerJoin($db->quoteName('#__sportsmanager_team', 'th') . ' ON th.team_id = b.heim_team_id')
->innerJoin($db->quoteName('#__sportsmanager_team', 'tg') . ' ON tg.team_id = b.gast_team_id')
->where('th.veranstaltung_id = ' . (int)$veranstaltung->veranstaltung_id)
->order('COALESCE(b.spieltag, 9999) ASC, b.zeitpunkt ASC, b.begegnung_id ASC');
$db->setQuery($begegnungSql);
$begegnungen = $db->loadObjectList();
$groupDates = [];
$roundsByKey = [];
foreach ($begegnungen as $begegnung) {
$homeTeamId = (int)$begegnung->heim_team_id;
$awayTeamId = (int)$begegnung->gast_team_id;
if (!isset($this->teamCache[$homeTeamId])) {
$db->setQuery(
$db->getQuery(true)
->select(['team_id', 'teamname'])
->from($db->quoteName('#__sportsmanager_team'))
->where('team_id = ' . $homeTeamId)
);
$this->teamCache[$homeTeamId] = $db->loadObject();
}
if (!isset($this->teamCache[$awayTeamId])) {
$db->setQuery(
$db->getQuery(true)
->select(['team_id', 'teamname'])
->from($db->quoteName('#__sportsmanager_team'))
->where('team_id = ' . $awayTeamId)
);
$this->teamCache[$awayTeamId] = $db->loadObject();
}
$homeTeam = $this->teamCache[$homeTeamId];
$awayTeam = $this->teamCache[$awayTeamId];
$roundIndex = $begegnung->spieltag ?? 1;
$roundKey = (string)$roundIndex;
if (!isset($roundsByKey[$roundKey])) {
$roundsByKey[$roundKey] = [
'index' => $roundIndex,
'name' => 'Round ' . $roundIndex,
'matchdays' => [],
];
}
$teamspielSql = $db->getQuery(true)
->select([
'ts.teamspiel_id',
'ts.teamspiel_nummer',
'ts.heim_spieler_1_id',
'ts.heim_spieler_2_id',
'ts.gast_spieler_1_id',
'ts.gast_spieler_2_id',
'ts.teamspiel_heim_punkte',
'ts.teamspiel_gast_punkte',
'ts.teamspiel_heim_spielpunkte',
'ts.teamspiel_gast_spielpunkte',
'ts.ergebnis_detailliert',
])
->from($db->quoteName('#__sportsmanager_teamspiel', 'ts'))
->where('ts.begegnung_id = ' . (int)$begegnung->begegnung_id)
->order('ts.teamspiel_nummer ASC, ts.teamspiel_id ASC');
$db->setQuery($teamspielSql);
$teamspiele = $db->loadObjectList();
$matchdayMatches = [];
$teamspiele = $this->groupMatches($modus, $teamspiele);
foreach ($teamspiele as $group) {
if (empty($group['sets'])) {
continue;
}
$ts = $group['sets'][0];
// use modus here
$homePlayers = [];
$awayPlayers = [];
$homePlayers[] = $this->getPersonForSpieler($db, (int)$ts->heim_spieler_1_id, null, $this->playerCache);
if (!empty($ts->heim_spieler_2_id)) {
$homePlayers[] = $this->getPersonForSpieler($db, (int)$ts->heim_spieler_2_id, null, $this->playerCache);
}
$awayPlayers[] = $this->getPersonForSpieler($db, (int)$ts->gast_spieler_1_id, null, $this->playerCache);
if (!empty($ts->gast_spieler_2_id)) {
$awayPlayers[] = $this->getPersonForSpieler($db, (int)$ts->gast_spieler_2_id, null, $this->playerCache);
}
$startDate = $this->isoUtc($begegnung->zeitpunkt, $this->sourceTz, $this->outputTz);
$endDate = $this->isoUtc($begegnung->zeitpunkt, $this->sourceTz, $this->outputTz);
$detail = [];
foreach ($group['sets'] as $set) {
$detail[] = $set->ergebnis_detailliert ?? null;
}
$matchdayMatches[] = $this->buildMatch(
$homePlayers,
$awayPlayers,
$startDate,
$endDate,
($ts->teamspiel_heim_punkte !== null || $ts->teamspiel_gast_punkte !== null) ? 1 : null,
$detail,
'TEAM'
);
}
$matchdayName = trim((string)$begegnung->spieltag_titel) !== ''
? (string)$begegnung->spieltag_titel
: ('Spieltag ' . $roundIndex);
$roundsByKey[$roundKey]['matchdays'][] = [
'name' => $matchdayName,
'startDate' => $this->isoUtc($begegnung->zeitpunkt, $this->sourceTz, $this->outputTz),
'endDate' => $this->isoUtc($begegnung->zeitpunkt, $this->sourceTz, $this->outputTz),
'teamHome' => ['name' => $homeTeam->teamname ?? ('Team ' . $homeTeamId)],
'teamAway' => ['name' => $awayTeam->teamname ?? ('Team ' . $awayTeamId)],
'matches' => $matchdayMatches,
];
$groupDates[] = substr((string)$begegnung->zeitpunkt, 0, 10);
}
if (!empty($groupDates)) {
$groupNode['state'] = $this->determineFinishedState(max($groupDates));
}
ksort($roundsByKey, SORT_NATURAL);
foreach ($roundsByKey as $round) {
$groupNode['rounds'][] = $round;
}
$eventNode['disciplines'][0]['stages'][0]['groups'][] = $groupNode;
$seasonNode['events'][] = $eventNode;
}
$export['seasons'][] = $seasonNode;
}
$json = json_encode($export, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
if ($json === false) {
throw new RuntimeException('JSON encoding failed: ' . json_last_error_msg());
}
if ($this->outputFile) {
file_put_contents($this->outputFile, $json . PHP_EOL);
}
if (PHP_SAPI !== 'cli') {
header('Content-Type: application/json; charset=utf-8');
}
echo 'Successfully created export file: ' . $this->outputFile;
}
}
@@ -1697,7 +1697,6 @@ if (count($spiele) > 0) {
static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, int $praesentation = 0): void static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, int $praesentation = 0): void
{ {
global $params; global $params;
if (count($teams) > 0) { if (count($teams) > 0) {
if ($alleine_angezeigt && $veranstaltung->tabellenwertung >= -1 && $veranstaltung->tabellenwertung <= 11 && count($spieltage) > 1) { if ($alleine_angezeigt && $veranstaltung->tabellenwertung >= -1 && $veranstaltung->tabellenwertung <= 11 && count($spieltage) > 1) {
?> ?>
@@ -1845,6 +1844,7 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
$punkte_quotient = 0; $punkte_quotient = 0;
$buchholz1_wert = 0; $buchholz1_wert = 0;
$buchholz2_wert = 0; $buchholz2_wert = 0;
$gesamtpunkte_verloren = 0;
$k = 0; $k = 0;
foreach ($teams as $team) { foreach ($teams as $team) {
?> ?>
@@ -1875,6 +1875,12 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
$buchholz1_wert = $team->buchholz1; $buchholz1_wert = $team->buchholz1;
$buchholz2_wert = $team->buchholz2; $buchholz2_wert = $team->buchholz2;
} }
if (in_array($veranstaltung->tabellenwertung, [7,8,9])){
$gesamtpunkte_verloren = $team->niederlagen;
}
if (in_array($veranstaltung->tabellenwertung, [1,2,3])){
$gesamtpunkte_verloren = $team->niederlagen * 2 + $team->unentschieden;
}
?> ?>
<td> <td>
<?php <?php
@@ -1969,8 +1975,15 @@ static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spie
} }
if ($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) { if ($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) {
?> ?>
<td nowrap style="text-align: center"><?php echo $gesamtpunkte; ?></td> <td nowrap style="text-align: center">
<?php <?php
if (in_array($veranstaltung->tabellenwertung, [7,8,9,1,2,3]))
echo $gesamtpunkte . ":" . $gesamtpunkte_verloren;
else
echo $gesamtpunkte;
?>
</td>
<?PHP
} }
?> ?>
</tr> </tr>
@@ -4292,7 +4305,6 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame): vo
<?php <?php
} else { } else {
?> ?>
<tr class="<?php echo $rowclass; ?>"> <tr class="<?php echo $rowclass; ?>">
<td nowrap style="text-align:center;"> <td nowrap style="text-align:center;">
<?php echo $row->jahr; ?> <?php echo $row->jahr; ?>
@@ -4304,6 +4316,10 @@ static function halloffameDetails($titel, $beschreibung, $rows, $halloffame): vo
$id = "verein_id_" . $i; $id = "verein_id_" . $i;
$txt = "teamname_" . $i; $txt = "teamname_" . $i;
$type = "vereine"; $type = "vereine";
if ($row->$id == ""){
$id = "team_id_" . $i;
$type = "mannschaften";
}
} else { } else {
$id = "spieler1_id_" . $i; $id = "spieler1_id_" . $i;
$txt = "spieler1_" . $i; $txt = "spieler1_" . $i;
@@ -6016,9 +6032,10 @@ static function turniervoranmeldungen($disziplin, $meldungenSpielerSortiert, $me
<?php <?php
} }
static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filter_saison_id): void static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filter_saison_id, $id, $spiele, $min_spiele, $teams, $filter_teams): void
{ {
global $params; global $params;
//SpielerstatistikenHeader //SpielerstatistikenHeader
if (!empty($titel)) { ?> if (!empty($titel)) { ?>
<div <div
@@ -6034,17 +6051,18 @@ static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filte
</div> </div>
<?php <?php
} }
if (count($saisons) > 0) { if (!empty($saisons) || !empty($spiele) || !empty($teams)) {
?> ?>
<form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm"> <form action="<?php echo SportsManagerURL(); ?>" method="post" name="adminForm" id="adminForm">
<div class="uk-overflow-auto"> <div class="uk-overflow-auto">
<table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>"> <table class="uk-table contentpaneopen<?php echo $params->get('pageclass_sfx'); ?>">
<tr> <tr>
<td nowrap> <td nowrap>
<?PHP if (!empty($saisons)){ ?>
<label <label
for="filter_saison_id"><?php echo Text::_('COM_SPORTSMANAGER_SEASON'); ?> for="filter_saison_id"><?php echo Text::_('COM_SPORTSMANAGER_SEASON'); ?>
:</label> :</label>
<select class="uk-select uk-form-width-medium" name="filter_saison_id" <select class="uk-select uk-form-width-small" name="filter_saison_id"
id="filter_saison_id" size="1" id="filter_saison_id" size="1"
onChange="document.adminForm.submit();"> onChange="document.adminForm.submit();">
<?php <?php
@@ -6052,6 +6070,36 @@ static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filte
echo "<option value=\"" . $saison->saison_id . "\" " . ($filter_saison_id == $saison->saison_id ? "selected" : "") . ">" . htmlentities_utf8($saison->saisonbezeichnung) . "</option>"; echo "<option value=\"" . $saison->saison_id . "\" " . ($filter_saison_id == $saison->saison_id ? "selected" : "") . ">" . htmlentities_utf8($saison->saisonbezeichnung) . "</option>";
?> ?>
</select> </select>
<?PHP
}
if (!empty($spiele)){
?>
<label
for="filter_min_matches"><?php echo Text::_('COM_SPORTSMANAGER_MIN_MATCHES'); ?>
:</label>
<select class="uk-select uk-form-width-small" name="filter_min_spiele"
id="filter_min_matches" size="1"
onChange="document.adminForm.task.value='spielerstatistik'; document.adminForm.submit();">
<?php
foreach ($spiele as $key => $value)
echo "<option value=\"" . $key . "\" " . ($min_spiele == $key ? "selected" : "") . ">" . htmlentities_utf8($value) . "</option>";
?>
</select>
<?PHP }
if (!empty($teams)){
?>
<label
for="filter_teams"><?php echo Text::_('COM_SPORTSMANAGER_TEAM'); ?>
:</label>
<select class="uk-select uk-form-width-medium" name="filter_teams"
id="filter_teams" size="1" style="width: 300px;"
onChange="document.adminForm.task.value='spielerstatistik'; document.adminForm.submit();">
<?php
foreach ($teams as $key => $value)
echo "<option value=\"" . $key . "\" " . ($filter_teams == $key ? "selected" : "") . ">" . htmlentities_utf8($value->teamname) . "</option>";
?>
</select>
<?PHP } ?>
<input type="submit" name="ok" <input type="submit" name="ok"
value="<?php echo Text::_('COM_SPORTSMANAGER_GO'); ?>" value="<?php echo Text::_('COM_SPORTSMANAGER_GO'); ?>"
class="button uk-button uk-button-primary"/> class="button uk-button uk-button-primary"/>
@@ -6060,12 +6108,13 @@ static function spielerstatistikenHeader($titel, $beschreibung, $saisons, $filte
</table> </table>
</div> </div>
<input type="hidden" name="task" value="spielerstatistiken"/> <input type="hidden" name="task" value="spielerstatistiken"/>
<input type="hidden" name="id" value="<?PHP echo $id; ?>"/>
</form> </form>
<?php <?php
} }
} }
static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $allein_angezeigt, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen): void static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $allein_angezeigt, $filter_teams, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen): void
{ {
global $params; global $params;
if ($allein_angezeigt) { if ($allein_angezeigt) {
@@ -6188,45 +6237,45 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a
if ($spielerstatistik->tabellenwertung > 0) { if ($spielerstatistik->tabellenwertung > 0) {
?> ?>
<th nowrap <th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX'); ?>"> title="<?php echo Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX' . $spielerstatistik->tabellenwertung); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX_SHORTCUT'); ?></strong> <strong><?php echo Text::_('COM_SPORTSMANAGER_PERFORMANCE_SHORT' . $spielerstatistik->tabellenwertung); ?></strong>
</th> </th>
<?php <?php
} else {
?>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS_SHORTCUT'); ?>
+</strong></th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS_SHORTCUT'); ?>
-</strong></th>
<?php
} }
?> ?>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_GAMES'); ?></strong></th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GAME_POINTS'); ?>
<?php echo Text::_('COM_SPORTSMANAGER_WON'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT'); ?>
+</strong></th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GAME_POINTS'); ?>
<?php echo Text::_('COM_SPORTSMANAGER_LOST'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT'); ?>
-</strong></th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?>
<?php echo Text::_('COM_SPORTSMANAGER_WON'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS_SHORTCUT'); ?> +</strong>
</th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_POINTS'); ?>
<?php echo Text::_('COM_SPORTSMANAGER_LOST'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_POINTS_SHORTCUT'); ?> -</strong>
</th>
<th nowrap <th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_RATE'); ?>"> title="<?php echo Text::_('COM_SPORTSMANAGER_RATE'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_RATE_SHORTCUT'); ?></strong> <strong><?php echo Text::_('COM_SPORTSMANAGER_RATE_SHORTCUT'); ?></strong>
</th> </th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_GAMES'); ?></strong></th>
<th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_VICTORIES'); ?>"> <th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_VICTORIES'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_VICTORIES_SHORTCUT'); ?></strong> <strong><?php echo Text::_('COM_SPORTSMANAGER_VICTORIES_SHORTCUT'); ?></strong>
</th> </th>
<th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_DRAWS'); ?>"> <th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_DRAWS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_DRAWS_SHORTCUT'); ?></strong></th> <strong><?php echo Text::_('COM_SPORTSMANAGER_DRAWS_SHORTCUT'); ?></strong>
</th>
<th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_DEFEATS'); ?>"> <th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_DEFEATS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_DEFEATS_SHORTCUT'); ?></strong> <strong><?php echo Text::_('COM_SPORTSMANAGER_DEFEATS_SHORTCUT'); ?></strong>
</th> </th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GOALS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GOALS_SHORTCUT'); ?> +</strong>
</th>
<th nowrap
title="<?php echo Text::_('COM_SPORTSMANAGER_GOALS'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_GOALS_SHORTCUT'); ?> -</strong>
</th>
</tr> </tr>
<?php <?php
@@ -6234,11 +6283,23 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a
$tatsaechlicher_platz = 1; $tatsaechlicher_platz = 1;
$k = 0; $k = 0;
foreach ($spielerstatistik_punkte as $row) { foreach ($spielerstatistik_punkte as $row) {
if ($platz == 1 || $spielpunkte_gewonnen != $row->spielpunkte_gewonnen || $spielpunkte_verloren != $row->spielpunkte_verloren || ($punkte_gewonnen - $punkte_verloren) != ($row->punkte_gewonnen - $row->punkte_verloren)) if ($platz == 1
|| $spielpunkte_gewonnen != $row->spielpunkte_gewonnen
|| $spielpunkte_verloren != $row->spielpunkte_verloren
|| ($punkte_gewonnen - $punkte_verloren) != ($row->punkte_gewonnen - $row->punkte_verloren))
$tatsaechlicher_platz = $platz; $tatsaechlicher_platz = $platz;
$spielpunkte_gewonnen = $row->spielpunkte_gewonnen;
$spielpunkte_verloren = $row->spielpunkte_verloren;
$punkte_gewonnen = $row->punkte_gewonnen;
$punkte_verloren = $row->punkte_verloren;
$platz++;
if (!$allein_angezeigt && $tatsaechlicher_platz > 3) if (!$allein_angezeigt && $tatsaechlicher_platz > 3)
break; break;
if (!empty($filter_teams) && $row->team_id != $filter_teams)
continue;
?> ?>
<tr class="sectiontableentry<?php echo $k + 1; <tr class="sectiontableentry<?php echo $k + 1;
$k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>"> $k = ($k + 1) % 2; ?><?php echo $params->get('pageclass_sfx'); ?>">
@@ -6268,6 +6329,8 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a
<?php <?php
} }
} }
if (!empty($row->teamname))
echo "<br>" . htmlentities_utf8($row->teamname);
?> ?>
</td> </td>
<td> <td>
@@ -6291,32 +6354,27 @@ static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $a
if ($spielerstatistik->tabellenwertung != 0) { if ($spielerstatistik->tabellenwertung != 0) {
?> ?>
<td nowrap style="text-align: center"> <td nowrap style="text-align: center">
<strong><?php echo round($row->leistungsindex); ?></strong> <strong><?php echo $row->leistungsindex; ?></strong>
</td> </td>
<?php <?php
} } else {
$spiele_gesamt = $row->siege + $row->niederlagen + $row->unentschieden;
?> ?>
<td nowrap <td nowrap style="text-align: center">
style="text-align: center"><?php echo $row->siege + $row->niederlagen + $row->unentschieden; ?></td> <strong><?php echo $row->spielpunkte_gewonnen; ?></strong>
<td nowrap </td>
style="text-align: center"><?php echo ($spielerstatistik->tabellenwertung == 0 ? "<strong>" : "") . $row->spielpunkte_gewonnen . ($spielerstatistik->tabellenwertung == 0 ? "<strong>" : ""); ?></strong></td> <td nowrap style="text-align: center"><?php echo $row->spielpunkte_verloren; ?></td>
<td nowrap <?php
style="text-align: center"><?php echo $row->spielpunkte_verloren; ?></td> }
<td nowrap style="text-align: center"><?php echo $row->punkte_gewonnen; ?></td> ?>
<td nowrap style="text-align: center"><?php echo $row->punkte_verloren; ?></td> <td nowrap style="text-align: center"><?php echo $row->quotient . " %"; ?></td>
<td nowrap <td nowrap style="text-align: center"><?php echo $row->siege + $row->niederlagen + $row->unentschieden; ?></td>
style="text-align: center"><?php echo ($spiele_gesamt > 0) ? round((($row->siege * 2 + $row->unentschieden) / ($spiele_gesamt * 2)) * 100) . "%" : "-"; ?></td>
<td nowrap style="text-align: center"><?php echo $row->siege; ?></td> <td nowrap style="text-align: center"><?php echo $row->siege; ?></td>
<td nowrap style="text-align: center"><?php echo $row->unentschieden; ?></td> <td nowrap style="text-align: center"><?php echo $row->unentschieden; ?></td>
<td nowrap style="text-align: center"><?php echo $row->niederlagen; ?></td> <td nowrap style="text-align: center"><?php echo $row->niederlagen; ?></td>
<td nowrap style="text-align: center"><?php echo $row->punkte_gewonnen; ?></td>
<td nowrap style="text-align: center"><?php echo $row->punkte_verloren; ?></td>
</tr> </tr>
<?php <?php
$spielpunkte_gewonnen = $row->spielpunkte_gewonnen;
$spielpunkte_verloren = $row->spielpunkte_verloren;
$punkte_gewonnen = $row->punkte_gewonnen;
$punkte_verloren = $row->punkte_verloren;
$platz++;
} }
?> ?>
</table> </table>
@@ -145,6 +145,12 @@ class HTML_sportsmanager_admin
</td> </td>
<?php <?php
$Spalte_Nr = self::checkZeilenumbruch($Spalte_Nr, $max_Spalten); $Spalte_Nr = self::checkZeilenumbruch($Spalte_Nr, $max_Spalten);
?>
<td style="padding-right: 15px" nowrap>
<a href="<?php echo SportsManagerURL('&task=admin_sportshub'); ?>"><?php echo 'Sportshub'; ?></a>
</td>
<?php
$Spalte_Nr = self::checkZeilenumbruch($Spalte_Nr, $max_Spalten);
} }
if (benutzerZugriff("termine_aendern")) { if (benutzerZugriff("termine_aendern")) {
?> ?>
@@ -3539,7 +3545,7 @@ class HTML_sportsmanager_admin
<?php <?php
} }
static function adminVereine($rows, $organisationAnzeigen): void static function adminVereine($rows, $organisationAnzeigen, $ansprechpartner): void
{ {
global $params; global $params;
@@ -3599,6 +3605,8 @@ class HTML_sportsmanager_admin
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_MEMBERS'); ?></strong></th> <th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_MEMBERS'); ?></strong></th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?></strong></th> <th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_TEAM_SEAT'); ?></strong></th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_BEATEN'); ?></strong></th> <th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_BEATEN'); ?></strong></th>
<th></th>
<th></th>
</tr> </tr>
<?php <?php
@@ -3661,6 +3669,14 @@ class HTML_sportsmanager_admin
</td> </td>
<td nowrap><?php if (!empty($row->vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?></td> <td nowrap><?php if (!empty($row->vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?></td>
<td nowrap><?php echo $row->ausgetreten ? Text::_('COM_SPORTSMANAGER_YES') : Text::_('COM_SPORTSMANAGER_NO'); ?></td> <td nowrap><?php echo $row->ausgetreten ? Text::_('COM_SPORTSMANAGER_YES') : Text::_('COM_SPORTSMANAGER_NO'); ?></td>
<td>
<?PHP
if (!empty($ansprechpartner[$row->verein_id])){
$emails = implode(';', $ansprechpartner[$row->verein_id]);
echo "<a href='mailto:" . $emails . "?subject=" . $row->vereinsname . "'>E-Mail</a>&nbsp;";
}
?>
</td>
<td nowrap><small><a <td nowrap><small><a
href="<?php echo SportsManagerURL('&task=admin_verein_remove&id=' . $row->verein_id); ?>" href="<?php echo SportsManagerURL('&task=admin_verein_remove&id=' . $row->verein_id); ?>"
onclick="return confirm('<?php echo Text::_('COM_SPORTSMANAGER_WANT_REALLY_REMOVE'); ?>');" onclick="return confirm('<?php echo Text::_('COM_SPORTSMANAGER_WANT_REALLY_REMOVE'); ?>');"
@@ -4834,6 +4850,29 @@ class HTML_sportsmanager_admin
</select> </select>
</td> </td>
</tr> </tr>
<tr>
<td nowrap style="width: 20%; text-align: right">
<label
for="games_in_statistik"><?php echo Text::_('COM_SPORTSMANAGER_GAMES_IN_STATISTIK'); ?>
:</label>
</td>
<td nowrap>
<select class="uk-select uk-form-width-medium" name="spiele_in_spielerstatistik"
id="games_in_statistik" size="1">
<option value="0"><?php echo Text::_('COM_SPORTSMANAGER_GAMES_IN_STATISTIK_ALL'); ?></option>
<?php
for ($i = 1; $i <= 36; $i++) {
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->spiele_in_spielerstatistik == $i ? " selected" : "") : "") . ">" . $i . "</option>";
}
?>
</select>
</td>
</tr>
<tr> <tr>
<td nowrap style="width: 20%; text-align: right"> <td nowrap style="width: 20%; text-align: right">
<label for="status"><?php echo Text::_('COM_SPORTSMANAGER_ACTIVE'); ?> <label for="status"><?php echo Text::_('COM_SPORTSMANAGER_ACTIVE'); ?>
@@ -6362,8 +6401,13 @@ class HTML_sportsmanager_admin
<select class="uk-select uk-form-width-large" name="tabellenwertung" <select class="uk-select uk-form-width-large" name="tabellenwertung"
id="table_evaluation" size="1"> id="table_evaluation" size="1">
<?php <?php
$typ = array(Text::_('COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE'), Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX'), Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX2')); $typ = array(0 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX0'),
for ($i = 0; $i <= 2; $i++) { 1 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX1'),
2 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX2'),
3 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX3'),
4 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX4'),
5 => Text::_('COM_SPORTSMANAGER_PERFORMANCE_INDEX5'));
for ($i = 0; $i <= 5; $i++) {
echo "<option value=\"" . $i . "\"" . ($spielerstatistik != null ? ($spielerstatistik->tabellenwertung == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($typ[$i]) . "</option>"; echo "<option value=\"" . $i . "\"" . ($spielerstatistik != null ? ($spielerstatistik->tabellenwertung == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($typ[$i]) . "</option>";
} }
?> ?>
@@ -8228,9 +8272,13 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
if ($i == 2 && !$halloffame->platz2_zeigen) continue; if ($i == 2 && !$halloffame->platz2_zeigen) continue;
if ($i == 3 && !$halloffame->platz3_zeigen) continue; if ($i == 3 && !$halloffame->platz3_zeigen) continue;
if ($halloffame->spielform == 1) { if ($halloffame->spielform == 1) {
$id = "verein_id_" . $i;
$txt = "teamname_" . $i; $txt = "teamname_" . $i;
$id = "verein_id_" . $i;
$type = "vereine"; $type = "vereine";
if ($row->$id == ""){
$id = "team_id_" . $i;
$type = "mannschaften";
}
} else { } else {
$id = "spieler1_id_" . $i; $id = "spieler1_id_" . $i;
$txt = "spieler1_" . $i; $txt = "spieler1_" . $i;
@@ -9435,12 +9483,16 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
:</label> :</label>
</td> </td>
<td nowrap> <td nowrap>
<select class="uk-select uk-form-width-medium" name="direktervergleich" id="dd_hthr" size="1"> <select class="uk-select uk-form-width-large" name="direktervergleich" id="dd_hthr" size="1">
<?php <?php
$direktervergleich = array(Text::_('COM_SPORTSMANAGER_NO'), Text::_('COM_SPORTSMANAGER_YES')); $typ = array(
for ($i = 0; $i <= 1; $i++) { 0 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT'),
echo "<option value=\"" . $i . "\"" . ($row != null ? ($row->direktervergleich == $i ? " selected" : "") : "") . ">" . htmlentities_utf8($direktervergleich[$i]) . "</option>"; 1 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS'),
} 2 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS'),
3 => Text::_('COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS')
);
foreach ($typ as $typ_wert => $typ_bezeichnung)
echo "<option value=\"" . $typ_wert . "\"" . ($row != null ? ($row->direktervergleich == $typ_wert ? " selected" : "") : "") . ">" . htmlentities_utf8($typ_bezeichnung) . "</option>";
?> ?>
</select> </select>
</td> </td>
@@ -9662,7 +9714,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
function pruefeAnzeige() { function pruefeAnzeige() {
const wert = parseInt(dropdown.value); const wert = parseInt(dropdown.value);
if (wert >= 1 && wert <= 9) { if (wert >= 1 && wert <= 11) {
zeile.style.display = ""; zeile.style.display = "";
} else { } else {
zeile.style.display = "none"; zeile.style.display = "none";
@@ -9676,7 +9728,7 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
<?php <?php
} }
static function adminMannschaften($veranstaltung, $rows): void static function adminMannschaften($veranstaltung, $rows, $ansprechpartner): void
{ {
global $params; global $params;
@@ -9726,6 +9778,8 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
<th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP'); ?>"> <th nowrap title="<?php echo Text::_('COM_SPORTSMANAGER_NUM_REQUESTED_SHFITS_TOOLTIP'); ?>">
<strong><?php echo Text::_('COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS'); ?></strong></th> <strong><?php echo Text::_('COM_SPORTSMANAGER_NUM_REQUESTED_SHIFTS'); ?></strong></th>
<th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_HOME_VENUE'); ?></strong></th> <th nowrap><strong><?php echo Text::_('COM_SPORTSMANAGER_HOME_VENUE'); ?></strong></th>
<th></th>
<th></th>
</tr> </tr>
<?php <?php
@@ -9768,6 +9822,14 @@ static function adminVerbandsorganMitglieder($rows,$verbandsorgan): void
</td> </td>
<td nowrap align="center"><?php echo $row->anzahl_verschiebungen; ?></td> <td nowrap align="center"><?php echo $row->anzahl_verschiebungen; ?></td>
<td nowrap><?php if (!empty($row->name)) echo htmlentities_utf8($row->name); ?></td> <td nowrap><?php if (!empty($row->name)) echo htmlentities_utf8($row->name); ?></td>
<td>
<?PHP
if (!empty($ansprechpartner[$row->team_id])){
$emails = implode(';', $ansprechpartner[$row->team_id]);
echo "<a href='mailto:" . $emails . "?subject=" . $row->teamname . "'>E-Mail</a>&nbsp;";
}
?>
</td>
<?php if ($row->begegnungen == 0) { ?> <?php if ($row->begegnungen == 0) { ?>
<td nowrap><small><a <td nowrap><small><a
href="<?php echo SportsManagerURL('&task=admin_team_remove&veranstaltungid=' . $veranstaltung->veranstaltung_id . '&id=' . $row->team_id); ?>" href="<?php echo SportsManagerURL('&task=admin_team_remove&veranstaltungid=' . $veranstaltung->veranstaltung_id . '&id=' . $row->team_id); ?>"
@@ -157,6 +157,7 @@ COM_SPORTSMANAGER_DEFEAT="Niederlage"
COM_SPORTSMANAGER_DEFEATS="Niederlagen" COM_SPORTSMANAGER_DEFEATS="Niederlagen"
COM_SPORTSMANAGER_DEFEATS_SHORTCUT="N" COM_SPORTSMANAGER_DEFEATS_SHORTCUT="N"
COM_SPORTSMANAGER_GOALS="Tore" COM_SPORTSMANAGER_GOALS="Tore"
COM_SPORTSMANAGER_GOALS_SHORTCUT="T"
COM_SPORTSMANAGER_SETS="S&auml;tze" COM_SPORTSMANAGER_SETS="S&auml;tze"
COM_SPORTSMANAGER_POINT="Punkt" COM_SPORTSMANAGER_POINT="Punkt"
COM_SPORTSMANAGER_POINTS="Punkte" COM_SPORTSMANAGER_POINTS="Punkte"
@@ -169,9 +170,9 @@ COM_SPORTSMANAGER_GAME_POINTS="Spielpunkte"
COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="SP" COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="SP"
COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (eine Mannschaft)" COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (eine Mannschaft)"
COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (Mannschaften zusammen)" COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (Mannschaften zusammen)"
COM_SPORTSMANAGER_DIFFERENCE="Differenz" COM_SPORTSMANAGER_DIFFERENCE="Differenz Tore"
COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Punktedifferenz" COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Differenz Spielpunkte"
COM_SPORTSMANAGER_POINTS_RATIO="Punkteverh&auml;ltnis" COM_SPORTSMANAGER_POINTS_RATIO="Verh&auml;ltnis Spielpunkte"
COM_SPORTSMANAGER_SCHEDULE_DATE="Zeitpunkt" COM_SPORTSMANAGER_SCHEDULE_DATE="Zeitpunkt"
COM_SPORTSMANAGER_TEAM_HOME="Heim" COM_SPORTSMANAGER_TEAM_HOME="Heim"
COM_SPORTSMANAGER_TEAM_VISITOR="Gast" COM_SPORTSMANAGER_TEAM_VISITOR="Gast"
@@ -296,7 +297,6 @@ COM_SPORTSMANAGER_REQUEST_MESSAGE_PLURAL="Es m&uuml;ssen mindestens %d Termine v
COM_SPORTSMANAGER_REJECT_SHIFT="Verschiebung ablehnen" COM_SPORTSMANAGER_REJECT_SHIFT="Verschiebung ablehnen"
COM_SPORTSMANAGER_TO="bis" COM_SPORTSMANAGER_TO="bis"
COM_SPORTSMANAGER_PLAYER_STATISTICS="Spielerstatistiken" COM_SPORTSMANAGER_PLAYER_STATISTICS="Spielerstatistiken"
COM_SPORTSMANAGER_PERFORMANCE_INDEX_SHORTCUT="LI"
COM_SPORTSMANAGER_WON="gewonnen" COM_SPORTSMANAGER_WON="gewonnen"
COM_SPORTSMANAGER_LOST="verloren" COM_SPORTSMANAGER_LOST="verloren"
COM_SPORTSMANAGER_RATE="Siegquote" COM_SPORTSMANAGER_RATE="Siegquote"
@@ -500,6 +500,8 @@ COM_SPORTSMANAGER_WIN_1_POINT="Sieg: 1 Punkt"
COM_SPORTSMANAGER_WIN_2_POINTS="Sieg: 2 Punkte, Unentschieden: 1 Punkt" COM_SPORTSMANAGER_WIN_2_POINTS="Sieg: 2 Punkte, Unentschieden: 1 Punkt"
COM_SPORTSMANAGER_WIN_3_POINTS="Sieg: 3 Punkte, Unentschieden: 1 Punkt" COM_SPORTSMANAGER_WIN_3_POINTS="Sieg: 3 Punkte, Unentschieden: 1 Punkt"
COM_SPORTSMANAGER_MEETING_CONCLUDED_AT="Begegnung abgeschlossen bei" COM_SPORTSMANAGER_MEETING_CONCLUDED_AT="Begegnung abgeschlossen bei"
COM_SPORTSMANAGER_GAMES_IN_STATISTIK="Spiele in Spielerstatistik"
COM_SPORTSMANAGER_GAMES_IN_STATISTIK_ALL="Alle Spiele"
COM_SPORTSMANAGER_GENERALLY="Allgemein" COM_SPORTSMANAGER_GENERALLY="Allgemein"
COM_SPORTSMANAGER_TYPE="Typ" COM_SPORTSMANAGER_TYPE="Typ"
COM_SPORTSMANAGER_ELO_MIN="Elo min." COM_SPORTSMANAGER_ELO_MIN="Elo min."
@@ -550,9 +552,22 @@ COM_SPORTSMANAGER_NO_RATING="Keine Wertung"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Mannschaftswettbewerbe"
COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung" COM_SPORTSMANAGER_TABLE_SUMMARY="Tabellenwertung"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Direkter Vergleich"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT="deaktiviert"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS="bei gleicher Punktzahl"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS="bei gleicher Punktzahl, Satzpunkte"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS="bei gleicher Punktzahl, Satzpunkte, Tore"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX0="Spielpunkte gewonnen, Spielpunkte verloren, Punktedifferenz"
COM_SPORTSMANAGER_PERFORMANCE_INDEX1="Leistungsindex (SP+ * SP+ * 100) / (SP+ + SP-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Leistungsindex (S * P+ * 10) / (P+ + P-), Spielpunkte gewonnen, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX3="Race Performance Index (Siege*2 + Unentschieden + Tordifferenz)"
COM_SPORTSMANAGER_PERFORMANCE_INDEX4="Effizienzindex (T+ / (T+ + T-))"
COM_SPORTSMANAGER_PERFORMANCE_INDEX5="Punkteschnitt (P+ / Anzahl Sätze)"
COM_SPORTSMANAGER_PERFORMANCE_SHORT1="LI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT2="LI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT3="RPI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT4="EI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT5="AVG"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Einzelstatistik aus allen Spielen" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Einzelstatistik aus allen Spielen"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Einzelstatistik aus Einzel-Spielen" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Einzelstatistik aus Einzel-Spielen"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Einzelstatistik aus Doppel-Spielen" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Einzelstatistik aus Doppel-Spielen"
@@ -1099,3 +1114,5 @@ COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="Der Spielbericht wird zusammen mit
COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Spielbericht gel&ouml;scht" COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Spielbericht gel&ouml;scht"
COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="Der Spielbericht wurde erfolgreich gel&ouml;scht!" COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="Der Spielbericht wurde erfolgreich gel&ouml;scht!"
COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur" COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Spielberichtskorrektur"
COM_SPORTSMANAGER_MIN_MATCHES="Mindestzahl Spiele"
COM_SPORTSMANAGER_SELECT_ALL="Alle"
@@ -157,6 +157,7 @@ COM_SPORTSMANAGER_DEFEAT="Defeat"
COM_SPORTSMANAGER_DEFEATS="Defeats" COM_SPORTSMANAGER_DEFEATS="Defeats"
COM_SPORTSMANAGER_DEFEATS_SHORTCUT="F" COM_SPORTSMANAGER_DEFEATS_SHORTCUT="F"
COM_SPORTSMANAGER_GOALS="Goals" COM_SPORTSMANAGER_GOALS="Goals"
COM_SPORTSMANAGER_GOALS_SHORTCUT="G"
COM_SPORTSMANAGER_SETS="Sets" COM_SPORTSMANAGER_SETS="Sets"
COM_SPORTSMANAGER_POINT="Point" COM_SPORTSMANAGER_POINT="Point"
COM_SPORTSMANAGER_POINTS="Points" COM_SPORTSMANAGER_POINTS="Points"
@@ -169,9 +170,9 @@ COM_SPORTSMANAGER_GAME_POINTS="Game points"
COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="GP" COM_SPORTSMANAGER_GAME_POINTS_SHORTCUT="GP"
COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (one team)" COM_SPORTSMANAGER_SUFFIX_ONE_TEAM=" (one team)"
COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (teams together)" COM_SPORTSMANAGER_SUFFIX_TEAMS_TOGETHER=" (teams together)"
COM_SPORTSMANAGER_DIFFERENCE="Difference" COM_SPORTSMANAGER_DIFFERENCE="Goal difference"
COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Difference in points" COM_SPORTSMANAGER_DIFFERENCE_IN_POINTS="Difference in game points"
COM_SPORTSMANAGER_POINTS_RATIO="Points ratio" COM_SPORTSMANAGER_POINTS_RATIO="Game points ratio"
COM_SPORTSMANAGER_SCHEDULE_DATE="Appointment date" COM_SPORTSMANAGER_SCHEDULE_DATE="Appointment date"
COM_SPORTSMANAGER_TEAM_HOME="Home" COM_SPORTSMANAGER_TEAM_HOME="Home"
COM_SPORTSMANAGER_TEAM_VISITOR="Visitor" COM_SPORTSMANAGER_TEAM_VISITOR="Visitor"
@@ -296,7 +297,6 @@ COM_SPORTSMANAGER_REQUEST_MESSAGE_PLURAL="At least %d dates must be given comple
COM_SPORTSMANAGER_REJECT_SHIFT="Reject shift" COM_SPORTSMANAGER_REJECT_SHIFT="Reject shift"
COM_SPORTSMANAGER_TO="until" COM_SPORTSMANAGER_TO="until"
COM_SPORTSMANAGER_PLAYER_STATISTICS="Player statistics" COM_SPORTSMANAGER_PLAYER_STATISTICS="Player statistics"
COM_SPORTSMANAGER_PERFORMANCE_INDEX_SHORTCUT="PI"
COM_SPORTSMANAGER_WON="won" COM_SPORTSMANAGER_WON="won"
COM_SPORTSMANAGER_LOST="lost" COM_SPORTSMANAGER_LOST="lost"
COM_SPORTSMANAGER_RATE="Winning rate" COM_SPORTSMANAGER_RATE="Winning rate"
@@ -500,6 +500,8 @@ COM_SPORTSMANAGER_WIN_1_POINT="Win: 1 point"
COM_SPORTSMANAGER_WIN_2_POINTS="Win: 2 points, draw: 1 point" COM_SPORTSMANAGER_WIN_2_POINTS="Win: 2 points, draw: 1 point"
COM_SPORTSMANAGER_WIN_3_POINTS="Win: 3 points, draw: 1 point" COM_SPORTSMANAGER_WIN_3_POINTS="Win: 3 points, draw: 1 point"
COM_SPORTSMANAGER_MEETING_CONCLUDED_AT="Match won at" COM_SPORTSMANAGER_MEETING_CONCLUDED_AT="Match won at"
COM_SPORTSMANAGER_GAMES_IN_STATISTIK="Games in player statistics"
COM_SPORTSMANAGER_GAMES_IN_STATISTIK_ALL="All games"
COM_SPORTSMANAGER_GENERALLY="Generally" COM_SPORTSMANAGER_GENERALLY="Generally"
COM_SPORTSMANAGER_TYPE="Type" COM_SPORTSMANAGER_TYPE="Type"
COM_SPORTSMANAGER_ELO_MIN="Elo min." COM_SPORTSMANAGER_ELO_MIN="Elo min."
@@ -550,9 +552,22 @@ COM_SPORTSMANAGER_NO_RATING="No rating"
COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions" COM_SPORTSMANAGER_TEAM_COMPETITIONS="Team competitions"
COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating" COM_SPORTSMANAGER_TABLE_SUMMARY="Table rating"
COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record" COM_SPORTSMANAGER_HEAD_TO_HEAD_RECORD="Head-to-head record"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_NOT="Off"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_POINTS="Tie: pts"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_SETS="Tie: pts, set points"
COM_SPORTSMANAGER_HEAD_TO_HEAD_OPT_GOALS="Tie: pts, set points, goals"
COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference" COM_SPORTSMANAGER_POINTS_WON_LOST_DIFFERENCE="Game points won, game points lost, point difference"
COM_SPORTSMANAGER_PERFORMANCE_INDEX="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX0="Game points won, game points lost, point difference"
COM_SPORTSMANAGER_PERFORMANCE_INDEX1="Performance index (GP+ * GP+ * 100) / (GP+ + GP-), game points won, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..." COM_SPORTSMANAGER_PERFORMANCE_INDEX2="Performance index (games * P+ * 10) / (P+ + P-), game points won, ..."
COM_SPORTSMANAGER_PERFORMANCE_INDEX3="Race Performance Index (victories*2 + draws + goal difference)"
COM_SPORTSMANAGER_PERFORMANCE_INDEX4="Efficency index (G+ / (G+ + G-))"
COM_SPORTSMANAGER_PERFORMANCE_INDEX5="Set point average (P+ / count sets)"
COM_SPORTSMANAGER_PERFORMANCE_SHORT1="LI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT2="LI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT3="RPI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT4="EI"
COM_SPORTSMANAGER_PERFORMANCE_SHORT5="AVG"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Individual statistics of all games" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS="Individual statistics of all games"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Individual statistics of singles games" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_SINGLES="Individual statistics of singles games"
COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Individual statistics of doubles games" COM_SPORTSMANAGER_INDIVIDUAL_STATISTICS_DOUBLES="Individual statistics of doubles games"
@@ -1099,3 +1114,5 @@ COM_SPORTSMANAGER_REALLY_DELETE_MATCH_REPORT="The match report and all its histo
COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Match report deleted" COM_SPORTSMANAGER_MATCH_REPORT_DELETED="Match report deleted"
COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="The match report has been successfully deleted!" COM_SPORTSMANAGER_MATCH_REPORT_WAS_DELETED="The match report has been successfully deleted!"
COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected" COM_SPORTSMANAGER_MATCH_REPORT_CORRECTED="Match report corrected"
COM_SPORTSMANAGER_MIN_MATCHES="Min count matches"
COM_SPORTSMANAGER_SELECT_ALL="All"
+3 -1
View File
@@ -526,6 +526,7 @@ return new class () implements InstallerScriptInterface
. "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0',"
. "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," . "\n `spieler_id` int(11) NOT NULL DEFAULT '0',"
. "\n `spieler_2_id` int(11) DEFAULT NULL," . "\n `spieler_2_id` int(11) DEFAULT NULL,"
. "\n `team_id` INT(11) DEFAULT NULL,"
. "\n `siege` smallint(6) DEFAULT NULL," . "\n `siege` smallint(6) DEFAULT NULL,"
. "\n `unentschieden` smallint(6) DEFAULT NULL," . "\n `unentschieden` smallint(6) DEFAULT NULL,"
. "\n `niederlagen` smallint(6) DEFAULT NULL," . "\n `niederlagen` smallint(6) DEFAULT NULL,"
@@ -789,6 +790,7 @@ return new class () implements InstallerScriptInterface
. "\n `spielpunkte_bedingung` tinyint(4) NOT NULL DEFAULT '0'," . "\n `spielpunkte_bedingung` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `spielernamen` tinyint(4) NOT NULL DEFAULT '0'," . "\n `spielernamen` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `heimtausch` tinyint(4) NOT NULL DEFAULT '0'," . "\n `heimtausch` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `spiele_in_spielerstatistik` tinyint(4) NOT NULL DEFAULT '0',"
. "\n `modus` varchar(200) NOT NULL DEFAULT ''," . "\n `modus` varchar(200) NOT NULL DEFAULT '',"
. "\n `status` tinyint(4) NOT NULL DEFAULT '0'," . "\n `status` tinyint(4) NOT NULL DEFAULT '0',"
. "\n PRIMARY KEY (`teamspiel_modus_id`)" . "\n PRIMARY KEY (`teamspiel_modus_id`)"
@@ -1272,7 +1274,7 @@ return new class () implements InstallerScriptInterface
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }
$query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '119';"; $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '120';";
$db->setQuery( $query ); $db->setQuery( $query );
if (!$db->execute()) { die($db->stderr(true)); } if (!$db->execute()) { die($db->stderr(true)); }