From 511c17468cf6e64561e04e8c8dd4297dd9606e3a Mon Sep 17 00:00:00 2001 From: Tim <43742253+TQxTim@users.noreply.github.com> Date: Thu, 4 Jun 2026 00:33:05 +0200 Subject: [PATCH] QA Edge Case Fixes: enforce spielernr and preserve DTFB fields - Fix 1: Discard players missing spielernr instead of auto-generating them - Fix 2: Preserve lizenznr, geburtsjahr, and pseudonym fields during player updates - Fix 3: Resolve PHP 8 array offset warning by using !empty() for geschlecht parsing - Fix 4: Leave clubless players handling as-is (skip them) per user request --- .../components/com_sportsmanager/sync.php | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/src/structure/components/com_sportsmanager/sync.php b/src/structure/components/com_sportsmanager/sync.php index 9c09ea0..ba9b617 100644 --- a/src/structure/components/com_sportsmanager/sync.php +++ b/src/structure/components/com_sportsmanager/sync.php @@ -440,7 +440,7 @@ function syncReceiveSpielerImport(string $csvData): array continue; } - $geschlecht = isset($spalte["geschlecht"]) && isset($daten[$spalte["geschlecht"]]) ? (($daten[$spalte["geschlecht"]][0] === "M" || $daten[$spalte["geschlecht"]][0] === "m" || $daten[$spalte["geschlecht"]][0] === "H" || $daten[$spalte["geschlecht"]][0] === "h") ? "M" : "W") : "M"; + $geschlecht = isset($spalte["geschlecht"]) && !empty($daten[$spalte["geschlecht"]]) ? (($daten[$spalte["geschlecht"]][0] === "M" || $daten[$spalte["geschlecht"]][0] === "m" || $daten[$spalte["geschlecht"]][0] === "H" || $daten[$spalte["geschlecht"]][0] === "h") ? "M" : "W") : "M"; $spielernr = isset($daten[$spalte["spielernr"]]) ? trim($daten[$spalte["spielernr"]]) : ""; if (!empty($spielernr) && !ctype_digit(substr($spielernr, strlen($spielernr) - 1, 1))) { $spielernr = ""; @@ -561,13 +561,6 @@ function syncReceiveSpielerImport(string $csvData): array } } - $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'basis_spielernr'"; - $rows_settings = loadObjectList($db, $query); - $naechste_spielernr = count($rows_settings) > 0 ? $rows_settings[0]->wert : "1"; - if (empty($naechste_spielernr)) { - $naechste_spielernr = "1"; - } - $spieler_updated = 0; $spieler_added = 0; $spielerIdsHinzugefuegt = array(); @@ -596,6 +589,10 @@ function syncReceiveSpielerImport(string $csvData): array $spieler_id = $spielerIdsHinzugefuegt[$spielernr]; } + if ($spieler_id === null && empty($spielernr)) { + continue; + } + if ($spieler_id === null && empty($vereinsname)) { continue; } @@ -604,17 +601,8 @@ function syncReceiveSpielerImport(string $csvData): array $query = "UPDATE #__sportsmanager_spieler" . "\n SET vorname = '" . $db->escape($vorname) . "'," . "\n nachname = '" . $db->escape($nachname) . "'," - . "\n geschlecht = '" . $db->escape($geschlecht) . "'"; - if (!empty($lizenznr)) { - $query .= ",\n lizenznr = '" . $db->escape($lizenznr) . "'"; - } - if ($geburtsjahr !== null) { - $query .= ",\n geburtsjahr = '" . $db->escape($geburtsjahr) . "'"; - } - if (!empty($pseudonym)) { - $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'"; - } - $query .= "\n WHERE spieler_id = " . intval($spieler_id); + . "\n geschlecht = '" . $db->escape($geschlecht) . "'" + . "\n WHERE spieler_id = " . intval($spieler_id); $db->setQuery($query); if (!$db->execute()) { return [ @@ -624,10 +612,6 @@ function syncReceiveSpielerImport(string $csvData): array } $spieler_updated++; } else { - if (empty($spielernr)) { - $spielernr = $naechste_spielernr; - } - $query = "INSERT INTO #__sportsmanager_spieler" . "\n SET vorname = '" . $db->escape($vorname) . "'," . "\n nachname = '" . $db->escape($nachname) . "',"