diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 937741f..d8a4118 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -12545,6 +12545,8 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void $spalte["vorname1"] = $index; else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr1" || $bezeichnung == "spielernr. 1") $spalte["spielernr1"] = $index; + else if ($bezeichnung == "linzenznr" || $bezeichnung == "linzenznr1" || $bezeichnung == "license" || $bezeichnung == "license1") + $spalte["lizenznr1"] = $index; else if ($bezeichnung == "verein" || $bezeichnung == "verein1" || $bezeichnung == "vereinsname" || $bezeichnung == "vereinsname1" || $bezeichnung == "vereinsname 1") $spalte["verein1"] = $index; else if ($bezeichnung == "name2" || $bezeichnung == "nachname2" || $bezeichnung == "nachname 2") @@ -12553,6 +12555,8 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void $spalte["vorname2"] = $index; else if ($bezeichnung == "spielernr2" || $bezeichnung == "spielernr. 2") $spalte["spielernr2"] = $index; + else if ($bezeichnung == "linzenznr2" || $bezeichnung == "license2") + $spalte["lizenznr2"] = $index; else if ($bezeichnung == "verein2" || $bezeichnung == "vereinsname2" || $bezeichnung == "vereinsname 2") $spalte["verein1"] = $index; } @@ -12597,11 +12601,13 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void $nachname1 = ""; $vorname1 = ""; $spielernr1 = ""; + $lizenznr1 = ""; $verein1 = ""; if ($ist_doppel) { $nachname2 = ""; $vorname2 = ""; $spielernr2 = ""; + $lizenznr2 = ""; $verein2 = ""; } @@ -12690,6 +12696,7 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void $nachname1 = $daten[$spalte["nachname1"]]; $vorname1 = $daten[$spalte["vorname1"]]; $spielernr1 = isset($spalte["spielernr1"]) && isset($daten[$spalte["spielernr1"]]) ? $daten[$spalte["spielernr1"]] : ""; + $lizenznr1 = isset($spalte["lizenznr1"]) && isset($daten[$spalte["lizenznr1"]]) ? $daten[$spalte["lizenznr1"]] : ""; $verein1 = isset($spalte["verein1"]) && isset($daten[$spalte["verein1"]]) ? $daten[$spalte["verein1"]] : ""; if ($vorname1 == "" || $nachname1 == "") @@ -12702,6 +12709,7 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void $nachname2 = $daten[$spalte["nachname2"]]; $vorname2 = $daten[$spalte["vorname2"]]; $spielernr2 = isset($spalte["spielernr2"]) && isset($daten[$spalte["spielernr2"]]) ? $daten[$spalte["spielernr2"]] : ""; + $lizenznr2 = isset($spalte["lizenznr2"]) && isset($daten[$spalte["lizenznr2"]]) ? $daten[$spalte["lizenznr2"]] : ""; $verein2 = isset($spalte["verein2"]) && isset($daten[$spalte["verein2"]]) ? $daten[$spalte["verein2"]] : ""; if ($vorname2 == "" || $nachname2 == "") @@ -12721,6 +12729,15 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void if (count($s) == 1) $spieler2_id = $s[0]->spieler_id; } + if ($spieler2_id == null && !empty($lizenznr2)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($lizenznr2) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } if ($spieler2_id == null) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" @@ -12744,6 +12761,15 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void if (count($s) == 1) $spieler1_id = $s[0]->spieler_id; } + if ($spieler1_id == null && !empty($lizenznr1)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($lizenznr1) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } if ($spieler1_id == null) { $query = "SELECT spieler_id" . "\n FROM #__sportsmanager_spieler" @@ -12777,6 +12803,121 @@ function adminImportTurnierdisziplinMeldungenSpieleForm(): void fclose($handle); } + // json Datei von Coral (nur Endergebnis einer Disziplin) + if ($ext === "json"){ + + $FehlerJason = ""; + $ist_doppel = false; + + if ($_FILES['daten']['error'] !== UPLOAD_ERR_OK) + $FehlerJason = "Fehler beim Hochladen der json-Datei."; + + $json = file_get_contents($_FILES['daten']['tmp_name']); + + // JSON validieren + $data = json_decode($json, true); + if ($data === null) { + $FehlerJason = "Ungültige JSON-Datei!"; + } elseif (!is_array($data)) { + $FehlerJason = "JSON hat nicht das erwartete Array-Format."; + } else { + // Struktur prüfen: jeder Eintrag sollte 'rank' und 'players' haben + $valid = true; + foreach ($data as $entry) { + if (!isset($entry['rank']) || !isset($entry['players']) || !is_array($entry['players'])) { + $valid = false; + break; + } + } + + if (!$valid) { + $FehlerJason = "JSON-Format stimmt nicht: Jeder Eintrag muss 'rank' und 'players' als Array enthalten."; + } else { + $capitalizeName = function(string $name): string { + $parts = explode('-', $name); + $parts = array_map(function($part) { + return ucfirst(mb_strtolower($part, 'UTF-8')); + }, $parts); + return implode('-', $parts); + }; + + $splitName = function(string $fullName) use ($capitalizeName): array { + $parts = explode(' ', $fullName); + $lastNameParts = []; + $firstNameParts = []; + + foreach ($parts as $part) { + if (mb_strtoupper($part, 'UTF-8') === $part) { + $lastNameParts[] = $capitalizeName($part); + } else { + $firstNameParts[] = $part; + } + } + + return [ + implode(' ', $lastNameParts), + implode(' ', $firstNameParts) + ]; + }; + + // maximale Spieleranzahl + $maxPlayers = 0; + foreach ($data as $entry) { + $count = count($entry['players'] ?? []); + if ($count > $maxPlayers) $maxPlayers = $count; + } + + $spielerMeldungen = []; + + foreach ($data as $entry) { + $row = ['p' => $entry['rank'] ?? null]; + + $i = 1; + foreach ($entry['players'] ?? [] as $player) { + if ($i > 1) $ist_doppel = true; + + [$nachname, $vorname] = $splitName($player['name'] ?? ""); + + // Spielernummern und -namen ermitteln + $spieler_id = null; + if (!empty($player['license'])) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(lizenznr, '" . $db->escape($player['license']) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler_id = $s[0]->spieler_id; + } + if ($spieler_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname) . "') = 0" + . "\n AND STRCMP(nachname, '" . $db->escape($nachname) . "') = 0" + . "\n LIMIT 2"; + $s = loadObjectList($db, $query); + if (count($s) == 1) + $spieler_id = $s[0]->spieler_id; + } + + if (!empty($spieler_id)){ + $row[$i] = $spieler_id; + } else { + $row[$i."n"] = $nachname; + $row[$i."v"] = $vorname; + $row[$i."vn"] = ""; + } + $i++; + } + $spielerMeldungen[] = $row; + } + } + } + + if ($FehlerJason != "") + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, $FehlerJason); + } + if (in_array(strtolower($ext), ["csv","json"], true) && !empty($spielerMeldungen)){ foreach ($spielerMeldungen as $spielerMeldung) {