feat: accept ArcGIS ONSPD column aliases (PCD7/PCD8/PCDS) in postcodes:import
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user