mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-06-10 06:27:52 +00:00
Import Gruppenspiele optimiert (issue #194)
This commit is contained in:
@@ -18,18 +18,25 @@ defined('_JEXEC') or die('Restricted access');
|
|||||||
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/database/init.php';
|
require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php';
|
||||||
|
|
||||||
function UhrzeitWandlerDE($Zeitstempel): mixed
|
function UhrzeitWandlerDE(string $input): string {
|
||||||
{
|
// mögliche Datumsformate
|
||||||
$Temp = explode(' ', $Zeitstempel);
|
$formats = [
|
||||||
$Datum = $Temp[0];
|
'Y-m-d H:i',
|
||||||
$Uhrzeit = $Temp[1];
|
'd.m.Y H:i',
|
||||||
if (preg_match("/\d{2}\.\d{2}\.\d{4}/", $Datum)) {
|
'd.m.Y H:i:s',
|
||||||
$Datum = substr($Datum, 6, 4) . "-" . substr($Datum, 3, 2) . "-" . substr($Datum, 0, 2);
|
];
|
||||||
} else if (preg_match("/\d{4}-\d{2}-\d{2}/", $Datum)) {
|
|
||||||
return $Zeitstempel;
|
|
||||||
}
|
|
||||||
return $Datum . " " . $Uhrzeit;
|
|
||||||
|
|
||||||
|
foreach ($formats as $format) {
|
||||||
|
$dt = DateTime::createFromFormat($format, $input);
|
||||||
|
|
||||||
|
// prüfen, ob Parsing erfolgreich war UND das Datum exakt passt
|
||||||
|
if ($dt && $dt->format($format) === $input) {
|
||||||
|
return $dt->format('Y-m-d H:i:s');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// falls kein bekanntes Format -> Original zurückgeben
|
||||||
|
return $input;
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateDate($date, $format = 'Y-m-d H:i:s'): bool
|
function validateDate($date, $format = 'Y-m-d H:i:s'): bool
|
||||||
@@ -38,6 +45,22 @@ function validateDate($date, $format = 'Y-m-d H:i:s'): bool
|
|||||||
return $d && $d->format($format) == $date;
|
return $d && $d->format($format) == $date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function detectFileEncoding(string $filename): string {
|
||||||
|
$handle = fopen($filename, "r");
|
||||||
|
if (!$handle) {
|
||||||
|
throw new Exception("Datei konnte nicht geöffnet werden: $filename");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Erstes Stück der Datei lesen (nicht alles, reicht für Erkennung)
|
||||||
|
$sample = fread($handle, 1000);
|
||||||
|
fclose($handle);
|
||||||
|
|
||||||
|
// Encoding bestimmen
|
||||||
|
$encoding = mb_detect_encoding($sample, ['UTF-8', 'ISO-8859-1', 'Windows-1252'], true);
|
||||||
|
|
||||||
|
return $encoding ?: 'UTF-8'; // Fallback auf UTF-8
|
||||||
|
}
|
||||||
|
|
||||||
function adminUebersicht(): void
|
function adminUebersicht(): void
|
||||||
{
|
{
|
||||||
$db = getDatabase();
|
$db = getDatabase();
|
||||||
@@ -9499,6 +9522,8 @@ function adminBegegnungenImportieren(): void
|
|||||||
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED'));
|
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$encoding = detectFileEncoding($_FILES["daten"]["tmp_name"]);
|
||||||
|
|
||||||
$handle = fopen($_FILES["daten"]["tmp_name"], "r");
|
$handle = fopen($_FILES["daten"]["tmp_name"], "r");
|
||||||
if (!$handle) {
|
if (!$handle) {
|
||||||
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE'));
|
redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE'));
|
||||||
@@ -9537,10 +9562,17 @@ function adminBegegnungenImportieren(): void
|
|||||||
$bgcolor = "green";
|
$bgcolor = "green";
|
||||||
$Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']];
|
$Begegnung[$Zeile]['spieltag'] = $data[$Titelzeile['Spieltag_Nr']];
|
||||||
$Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]);
|
$Begegnung[$Zeile]['zeitpunkt'] = UhrzeitWandlerDE($data[$Titelzeile['Spielstart']]);
|
||||||
$Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id'];
|
if ($encoding == "UTF-8"){
|
||||||
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id'];
|
$Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[$data[$Titelzeile['Heim']]]['team_id'];
|
||||||
|
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[$data[$Titelzeile['Gast']]]['team_id'];
|
||||||
|
if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']];
|
||||||
|
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']];
|
||||||
|
} else {
|
||||||
|
$Begegnung[$Zeile]['heim_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Heim']])]['team_id'];
|
||||||
|
$Begegnung[$Zeile]['gast_team_id'] = $Mannschaften[utf8_encode($data[$Titelzeile['Gast']])]['team_id'];
|
||||||
|
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = utf8_encode($data[$Titelzeile['Spieltag_Titel']]);
|
||||||
|
}
|
||||||
if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']];
|
if (isset($data[$Titelzeile['Spiel_Nr']])) $Begegnung[$Zeile]['spiel_nr'] = $data[$Titelzeile['Spiel_Nr']];
|
||||||
if (isset($data[$Titelzeile['Spieltag_Titel']])) $Begegnung[$Zeile]['spieltag_titel'] = $data[$Titelzeile['Spieltag_Titel']];
|
|
||||||
echo "<tr style='color: white;'>";
|
echo "<tr style='color: white;'>";
|
||||||
if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) {
|
if ($Begegnung[$Zeile]['spieltag'] > 99 or $Begegnung[$Zeile]['spieltag'] < 1) {
|
||||||
$bgcolor = "red";
|
$bgcolor = "red";
|
||||||
@@ -9560,7 +9592,6 @@ function adminBegegnungenImportieren(): void
|
|||||||
$Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']);
|
$Mannschaften[$data[$Titelzeile['Heim']]]['heimspiel_uhrzeit']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$Begegnung[$Zeile]['zeitpunkt'] = $data[$Titelzeile['Spielstart']];
|
|
||||||
if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) {
|
if (!validateDate($Begegnung[$Zeile]['zeitpunkt'])) {
|
||||||
$bgcolor = "red";
|
$bgcolor = "red";
|
||||||
$import = false;
|
$import = false;
|
||||||
@@ -9580,7 +9611,12 @@ function adminBegegnungenImportieren(): void
|
|||||||
} else {
|
} else {
|
||||||
$bgcolor = "green";
|
$bgcolor = "green";
|
||||||
}
|
}
|
||||||
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>" . $data[$Titelzeile['Heim']] . "</td>";
|
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>";
|
||||||
|
if ($encoding == "UTF-8")
|
||||||
|
echo $data[$Titelzeile['Heim']];
|
||||||
|
else
|
||||||
|
echo utf8_encode($data[$Titelzeile['Heim']]);
|
||||||
|
echo "</td>";
|
||||||
if ($Begegnung[$Zeile]['gast_team_id'] == "") {
|
if ($Begegnung[$Zeile]['gast_team_id'] == "") {
|
||||||
if ($data[$Titelzeile['Gast']] == "spielfrei") {
|
if ($data[$Titelzeile['Gast']] == "spielfrei") {
|
||||||
$bgcolor = "orange";
|
$bgcolor = "orange";
|
||||||
@@ -9592,7 +9628,12 @@ function adminBegegnungenImportieren(): void
|
|||||||
} else {
|
} else {
|
||||||
$bgcolor = "green";
|
$bgcolor = "green";
|
||||||
}
|
}
|
||||||
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>" . $data[$Titelzeile['Gast']] . "</td>";
|
echo "<td style='text-align: center; background-color:" . $bgcolor . "'>";
|
||||||
|
if ($encoding == "UTF-8")
|
||||||
|
echo $data[$Titelzeile['Gast']];
|
||||||
|
else
|
||||||
|
echo utf8_encode($data[$Titelzeile['Gast']]);
|
||||||
|
echo "</td>";
|
||||||
echo "</tr>";
|
echo "</tr>";
|
||||||
}
|
}
|
||||||
if (!$import_zeile) {
|
if (!$import_zeile) {
|
||||||
@@ -9600,6 +9641,7 @@ function adminBegegnungenImportieren(): void
|
|||||||
}
|
}
|
||||||
$Zeile++;
|
$Zeile++;
|
||||||
}
|
}
|
||||||
|
echo "<tr><td colspan=4 style='text-align: center;'>Dateiformat: $encoding</td></tr>";
|
||||||
echo "</table>";
|
echo "</table>";
|
||||||
fclose($handle);
|
fclose($handle);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user