From ca4ce6060e6bc20b29f215e0685c84f3ac9e73a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Mon, 14 Jul 2025 08:23:34 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=C3=9Cberpr=C3=BCfung=20Format=20Spielernum?= =?UTF-8?q?mer=20bei=20Import=20(issue=20#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 34 ++++++++++++------- .../views/sportsmanager/view_admin.php | 24 ++++++++----- .../de-DE/de-DE.com_sportsmanager.ini | 3 +- .../en-GB/en-GB.com_sportsmanager.ini | 3 +- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index 29e8f08..f39f453 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -2677,6 +2677,22 @@ function adminImportSpielerVorschau(): void $n++; } + //check Passnummer auf gueltiges Format + $query = "SELECT nachname, vorname, spielernr, spielernr_alt" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE (spielernr NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr <> '')" + . "\n OR (spielernr_alt NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr_alt <> '');"; + + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + $spielerfehler = $db->loadObjectList(); + if (count($spielerfehler) > 0) { + HTML_sportsmanager_admin::adminImportSpielerFehler($spielerfehler, $fehler="Passnummer"); + return; + } + $spielernr_aendern = false; if (isset($spalten["spielernr_alt"])) { $query = "SELECT nachname, vorname, spielernr, spielernr_alt" @@ -2713,9 +2729,8 @@ function adminImportSpielerVorschau(): void $spielernr_aendern = false; } } - if ($spielernr_aendern) { - $query = "SELECT nachname, vorname" + $query = "SELECT nachname, vorname, bestand.spielernr" . "\n FROM" . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" @@ -2727,15 +2742,14 @@ function adminImportSpielerVorschau(): void . "\n ON bestand.spielernr = import.spielernr" . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_spieler_import WHERE spielernr_alt = bestand.spielernr AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '')" . "\n ORDER BY nachname, vorname"; - $db->setQuery($query); + $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } $konflikte = $db->loadObjectList(); if (count($konflikte) > 0) { - HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte); - + HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte, $fehler="konflikt"); return; } } @@ -2755,7 +2769,6 @@ function adminImportSpielerVorschau(): void die($db->stderr(true)); } $spieler_import = $db->loadObjectList(); - $import_verweigern = false; if ($beschraenkter_zugriff) { foreach ($spieler_import as $s) { @@ -2785,7 +2798,7 @@ function adminImportSpielerVorschau(): void . "\n FROM #__sportsmanager_spieler_import" . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND " . ($spielernr_aendern ? "IF(NOT ISNULL(#__sportsmanager_spieler_import.spielernr_alt) AND #__sportsmanager_spieler_import.spielernr_alt != '', #__sportsmanager_spieler_import.spielernr_alt = #__sportsmanager_spieler.spielernr, #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr)" : "#__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr") . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; - $db->setQuery($query); + $db->setQuery($query); if (!$db->execute()) { die($db->stderr(true)); } @@ -2804,7 +2817,6 @@ function adminImportSpielerVorschau(): void die($db->stderr(true)); } } - HTML_sportsmanager_admin::adminImportSpielerVorschau($import_verweigern, $spieler_import, $veranstalter, $session_id, $jInput->get('persoenliche_daten', 0, 'INT'), $jInput->get('lizenznr_beibehalten', 0, 'INT'), $jInput->get('spalten', '', 'RAW')); } @@ -2880,7 +2892,7 @@ function adminImportSpieler(): void * sonst Spielernr. übernehmen */ if (isset($spalten["spielernr_alt"])) { - $query = "SELECT nachname, vorname" + $query = "SELECT nachname, vorname, bestand.spielernr" . "\n FROM" . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" @@ -2897,10 +2909,8 @@ function adminImportSpieler(): void die($db->stderr(true)); } $konflikte = $db->loadObjectList(); - if (count($konflikte) > 0) { - HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte); - + HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte, $fehler="konflikt"); return; } diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php index eacb8df..8c7ecc2 100644 --- a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -2276,23 +2276,21 @@ class HTML_sportsmanager_admin -
+
+ +
@@ -2305,12 +2303,20 @@ class HTML_sportsmanager_admin
0) { - ?> - -
+ style="width: 100%"> + +
+ + diff --git a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini index 73cf52c..acb13c1 100644 --- a/src/structure/language/de-DE/de-DE.com_sportsmanager.ini +++ b/src/structure/language/de-DE/de-DE.com_sportsmanager.ini @@ -404,8 +404,9 @@ COM_SPORTSMANAGER_COUNTRY_CODE="Landeskennung" COM_SPORTSMANAGER_IMPORT="Importieren" COM_SPORTSMANAGER_IMPORT_MESSAGE="Im Import sind ausschließlich Spielerdaten zum Verein %s enthalten. Soll ausschließlich der Spielerbestand des einen Vereins aktualisiert werden, muss der zugehörige Verein unten ausgewählt werden. Beinhaltet der Import den gesamten Spielerbestand einer Organisation, muss die zugehörige Organisation gewählt werden." COM_SPORTSMANAGER_CHECK="Prüfen" -COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen." +COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="Im Import sind Fehler oder Konflikte enthalten, die im Vorfeld manuell beseitigt werden müssen." COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Versuch, Spielernr. auf eine bereits für einen anderen Spieler vergebene Spielernr. zu ändern" +COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="Eine oder mehrere Spielernummer enthalten ein ungültiges Format" COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="Der Import wird abgebrochen, da Konflikte bei den zu importierenden Spielerdaten bestehen. Bitte kontaktiere einen Moderator und sende dabei die Importdatei mit!" COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="Es bestehen keine Konflikte bei den zu importierenden Spielerdaten." diff --git a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini index a01636b..3bb575c 100644 --- a/src/structure/language/en-GB/en-GB.com_sportsmanager.ini +++ b/src/structure/language/en-GB/en-GB.com_sportsmanager.ini @@ -404,8 +404,9 @@ COM_SPORTSMANAGER_COUNTRY_CODE="Country code" COM_SPORTSMANAGER_IMPORT="Import" COM_SPORTSMANAGER_IMPORT_MESSAGE="In the import there are only player information about club %s present. Shall only the members of that one club be updated, the associated club has to be selected down here. If the import contains all members of the organisation then the organisation must be selected." COM_SPORTSMANAGER_CHECK="Check" -COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are conflicts in the import which have to be fixed manually first." +COM_SPORTSMANAGER_IMPORT_CONFLICTS_MESSAGE="There are faults or conflicts in the import which have to be fixed manually first." COM_SPORTSMANAGER_IMPORT_DUPLICATE_MESSAGE="Attempt to change player number into one that is already assigned to another player." +COM_SPORTSMANAGER_IMPORT_WRONG_FORMAT_PLAYERNUMBER="One or more player numbers contain an invalid format" COM_SPORTSMANAGER_NAME2="Name" COM_SPORTSMANAGER_DATA_IMPORT_ABORT_MESSAGE="The import has been aborted because there are conflicts in the containing player information. Please contact a moderator and attach the import!" COM_SPORTSMANAGER_DATA_IMPORT_NO_CONFLICTS="There are conflicts in the containing player information." From 84796918245d71f4a24b211e22c43c4716dbd16c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Mon, 14 Jul 2025 17:01:21 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Optimierung=20Abl=C3=B6schung=20tempor?= =?UTF-8?q?=C3=A4rer=20Import-Daten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/com_sportsmanager/admin.php | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php index f39f453..4cc96d3 100644 --- a/src/structure/components/com_sportsmanager/admin.php +++ b/src/structure/components/com_sportsmanager/admin.php @@ -20,8 +20,6 @@ require_once JPATH_SITE . '/components/com_sportsmanager/database/init.php'; function UhrzeitWandlerDE($Zeitstempel): mixed { - //Jürgen Meyer 07.03.2025 - $Temp = explode(' ', $Zeitstempel); $Datum = $Temp[0]; $Uhrzeit = $Temp[1]; @@ -36,7 +34,6 @@ function UhrzeitWandlerDE($Zeitstempel): mixed function validateDate($date, $format = 'Y-m-d H:i:s'): bool { - //Jürgen Meyer 07.03.2025 $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; } @@ -2242,14 +2239,9 @@ function adminImportSpielerDetailsForm(): void $rows = $db->loadObjectList(); foreach ($rows as $row) { - $query = "DELETE FROM #__sportsmanager_spieler_import" - . "\n WHERE session_id = '$row->session_id'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + adminDeleteSpielerImport($row->session_id); } - + if (empty($_FILES["daten"]["tmp_name"]) || !is_uploaded_file($_FILES["daten"]["tmp_name"])) { redirectSportsManagerURL('&task=admin_spieler', Text::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED')); } @@ -2507,12 +2499,7 @@ function adminImportSpielerDetailsForm(): void die($db->stderr(true)); } - $query = "DELETE FROM #__sportsmanager_spieler_import" - . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerBericht($lizenzen_aktualisiert, array(), 0, array(), array(), array(), false, redirectSessionIdEmpty() ? null : redirectSessionIdSetzen()); @@ -2629,8 +2616,19 @@ function adminImportSpielerDetailsForm(): void HTML_sportsmanager_admin::adminImportSpielerDetails($beschraenkter_zugriff, $ansprechpartner_importieren, $veranstalter, $veranstalter_import, $veranstalter_zugehoerigkeit, $session_id, implode(",", $spalten), $verein_import, $vereine, einstellungswert("spielerimport_persoenliche_daten_vorauswahl")); } +function adminDeleteSpielerImport($session_id){ + $db = getDatabase(); + $query = "DELETE FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } +} + function adminImportSpielerVorschau(): void { + $db = getDatabase(); global $_FILES; $jInput = Factory::getContainer()->get(SiteApplication::class)->input; @@ -2680,8 +2678,9 @@ function adminImportSpielerVorschau(): void //check Passnummer auf gueltiges Format $query = "SELECT nachname, vorname, spielernr, spielernr_alt" . "\n FROM #__sportsmanager_spieler_import" - . "\n WHERE (spielernr NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr <> '')" - . "\n OR (spielernr_alt NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr_alt <> '');"; + . "\n WHERE session_id = '" . $db->escape($session_id) . "'" + . "\n AND ((spielernr NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr <> '')" + . "\n OR (spielernr_alt NOT REGEXP '^[0-9]{2}-[0-9]{4,6}$' AND spielernr_alt <> ''));"; $db->setQuery($query); if (!$db->execute()) { @@ -2689,6 +2688,7 @@ function adminImportSpielerVorschau(): void } $spielerfehler = $db->loadObjectList(); if (count($spielerfehler) > 0) { + adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerFehler($spielerfehler, $fehler="Passnummer"); return; } @@ -2749,6 +2749,7 @@ function adminImportSpielerVorschau(): void $konflikte = $db->loadObjectList(); if (count($konflikte) > 0) { + adminDeleteSpielerImport($session_id); HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte, $fehler="konflikt"); return; } @@ -2810,12 +2811,7 @@ function adminImportSpielerVorschau(): void } if ($import_verweigern) { - $query = "DELETE FROM #__sportsmanager_spieler_import" - . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + adminDeleteSpielerImport($session_id); } HTML_sportsmanager_admin::adminImportSpielerVorschau($import_verweigern, $spieler_import, $veranstalter, $session_id, $jInput->get('persoenliche_daten', 0, 'INT'), $jInput->get('lizenznr_beibehalten', 0, 'INT'), $jInput->get('spalten', '', 'RAW')); } @@ -3352,12 +3348,7 @@ function adminImportSpieler(): void } } - $query = "DELETE FROM #__sportsmanager_spieler_import" - . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + adminDeleteSpielerImport($session_id); sort($vereineManuell); sort($ausgetreteneVereineMitAktivenMitgliedern);
spielernr); ?> nachname . ", " . $s->vorname); ?>