trickeyone/intl-subdivision

View on GitHub
bin/build

Summary

Maintainability
Test Coverage
#!/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);