bin/build
#!/usr/bin/env php
<?php
use Sokil\IsoCodes\IsoCodesFactory;
use Symfony\Component\Intl;
require_once __DIR__ . '/../vendor/autoload.php';
$output = [];
$isoCodes = new IsoCodesFactory();
$countries = $isoCodes->getCountries();
foreach ($countries as $country) {
$countryCode = $country->getAlpha2();
if (!$validCountry = Intl\Countries::exists($countryCode)) {
echo sprintf('Not a supported Intl Country: %s "%s"', $countryCode, $country->getName());
continue;
}
if (!array_key_exists($countryCode, $output)) {
$output[$countryCode] = [];
}
$prefix = $countryCode . '-';
$subdivisions = $isoCodes->getSubdivisions()->getAllByCountryCode($countryCode);
if (empty($subdivisions)) {
$output[$countryCode][$countryCode] = $country->getName();
} else {
foreach ($subdivisions as $subdivision) {
$alphaCode = $subdivision->getCode();
if (0 === strpos($alphaCode, $prefix)) {
$alphaCode = substr($alphaCode, strlen($prefix));
}
$subdivisionName = $subdivision->getName();
if (false !== strpos($subdivisionName, ';')) {
$subdivisionName = preg_replace('/^(.+);\s?(.+)$/', '$1 ($2)', $subdivisionName);
}
$output[$countryCode][$alphaCode] = $subdivisionName;
}
}
uksort($output[$countryCode], 'strnatcmp');
}
/**
* ensure all Symfony alpha codes exist
* @link https://github.com/trickeyone/intl-subdivision/commit/573dec4a646dfccf40beafcd5d37a6c2382c7ccc
*/
foreach (Intl\Countries::getNames() as $alphaCode => $name) {
if (!array_key_exists($alphaCode, $output)) {
$output[$alphaCode] = [
$alphaCode => $name,
];
}
}
uksort($output, 'strnatcmp');
$packageData = [
'Version' => date('Y-m'),
'Subdivisions' => $output,
];
function pretty_export($expression) {
$export = var_export($expression, true);
$patterns = [
"/array \(/" => '[',
"/^([ ]*)\)(,?)$/m" => '$1]$2',
"/=>[ ]?\n[ ]+\[/" => '=> [',
"/([ ]*)(\'[^\']+\') => ([\[\'])/" => '$1$2 => $3',
];
return preg_replace(array_keys($patterns), array_values($patterns), $export);
}
$phpOutput = pretty_export($packageData);
$phpOutput = <<<EOF
<?php
return {$phpOutput};
EOF;
file_put_contents(__DIR__ . '/../src/Resources/data/en.php', $phpOutput);
print 'Subdivisions Database build complete.' . PHP_EOL;
exit(0);