feat: accept ArcGIS ONSPD column aliases (PCD7/PCD8/PCDS) in postcodes:import

This commit is contained in:
Ovidiu U
2026-04-22 13:31:27 +01:00
parent 13fc227619
commit 19fc61a0a3
2 changed files with 36 additions and 5 deletions

View File

@@ -41,8 +41,25 @@ final class ImportPostcodes extends Command
}
$headerCounts = array_count_values(array_map('strtolower', $header));
$columns = array_change_key_case(array_flip($header), CASE_LOWER);
foreach (['pcd', 'lat', 'long'] as $required) {
$pcdColumn = null;
foreach (['pcd', 'pcds', 'pcd7', 'pcd8'] as $candidate) {
if (isset($columns[$candidate])) {
$pcdColumn = $candidate;
break;
}
}
if ($pcdColumn === null) {
$this->error('Missing required postcode column (expected one of: pcd, pcds, pcd7, pcd8).');
fclose($handle);
return self::FAILURE;
}
foreach ([$pcdColumn, 'lat', 'long'] as $required) {
if (($headerCounts[$required] ?? 0) > 1) {
$this->error("Column '{$required}' appears more than once — refusing to import.");
fclose($handle);
@@ -51,9 +68,7 @@ final class ImportPostcodes extends Command
}
}
$columns = array_change_key_case(array_flip($header), CASE_LOWER);
foreach (['pcd', 'lat', 'long'] as $required) {
foreach (['lat', 'long'] as $required) {
if (! isset($columns[$required])) {
$this->error("Missing required column '{$required}'.");
fclose($handle);
@@ -82,7 +97,7 @@ final class ImportPostcodes extends Command
continue;
}
$pcd = strtoupper(preg_replace('/\s+/', '', (string) $row[$columns['pcd']]));
$pcd = strtoupper(preg_replace('/\s+/', '', (string) $row[$columns[$pcdColumn]]));
if ($pcd === '' || strlen($pcd) < 5) {
continue;