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
This commit is contained in:
Tim
2026-06-04 00:33:05 +02:00
parent 6f33599fd9
commit 511c17468c
@@ -440,7 +440,7 @@ function syncReceiveSpielerImport(string $csvData): array
continue; 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"]]) : ""; $spielernr = isset($daten[$spalte["spielernr"]]) ? trim($daten[$spalte["spielernr"]]) : "";
if (!empty($spielernr) && !ctype_digit(substr($spielernr, strlen($spielernr) - 1, 1))) { if (!empty($spielernr) && !ctype_digit(substr($spielernr, strlen($spielernr) - 1, 1))) {
$spielernr = ""; $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_updated = 0;
$spieler_added = 0; $spieler_added = 0;
$spielerIdsHinzugefuegt = array(); $spielerIdsHinzugefuegt = array();
@@ -596,6 +589,10 @@ function syncReceiveSpielerImport(string $csvData): array
$spieler_id = $spielerIdsHinzugefuegt[$spielernr]; $spieler_id = $spielerIdsHinzugefuegt[$spielernr];
} }
if ($spieler_id === null && empty($spielernr)) {
continue;
}
if ($spieler_id === null && empty($vereinsname)) { if ($spieler_id === null && empty($vereinsname)) {
continue; continue;
} }
@@ -604,17 +601,8 @@ function syncReceiveSpielerImport(string $csvData): array
$query = "UPDATE #__sportsmanager_spieler" $query = "UPDATE #__sportsmanager_spieler"
. "\n SET vorname = '" . $db->escape($vorname) . "'," . "\n SET vorname = '" . $db->escape($vorname) . "',"
. "\n nachname = '" . $db->escape($nachname) . "'," . "\n nachname = '" . $db->escape($nachname) . "',"
. "\n geschlecht = '" . $db->escape($geschlecht) . "'"; . "\n geschlecht = '" . $db->escape($geschlecht) . "'"
if (!empty($lizenznr)) { . "\n WHERE spieler_id = " . intval($spieler_id);
$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);
$db->setQuery($query); $db->setQuery($query);
if (!$db->execute()) { if (!$db->execute()) {
return [ return [
@@ -624,10 +612,6 @@ function syncReceiveSpielerImport(string $csvData): array
} }
$spieler_updated++; $spieler_updated++;
} else { } else {
if (empty($spielernr)) {
$spielernr = $naechste_spielernr;
}
$query = "INSERT INTO #__sportsmanager_spieler" $query = "INSERT INTO #__sportsmanager_spieler"
. "\n SET vorname = '" . $db->escape($vorname) . "'," . "\n SET vorname = '" . $db->escape($vorname) . "',"
. "\n nachname = '" . $db->escape($nachname) . "'," . "\n nachname = '" . $db->escape($nachname) . "',"