<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use RuntimeException;
final class Version20220328090615 extends AbstractMigration
{
private const TABLE_COUNTRY = 'country';
private const TABLE_COUNTRY_PHONE_CODE = 'country_phone_code';
private const COUNTRIES = [
'af' => [
'name' => 'Afghanistan',
'code' => ['93'],
],
'al' => [
'name' => 'Albania',
'code' => ['355'],
],
'dz' => [
'name' => 'Algeria',
'code' => ['213'],
],
'as' => [
'name' => 'American Samoa',
'code' => ['1684'],
],
'ad' => [
'name' => 'Andorra',
'code' => ['376'],
],
'ao' => [
'name' => 'Angola',
'code' => ['244'],
],
'ai' => [
'name' => 'Anguilla',
'code' => ['1264'],
],
'aq' => [
'name' => 'Antarctica',
'code' => ['672'],
],
'ag' => [
'name' => 'Antigua and Barbuda',
'code' => ['1268'],
],
'ar' => [
'name' => 'Argentina',
'code' => ['54'],
],
'am' => [
'name' => 'Armenia',
'code' => ['374'],
],
'aw' => [
'name' => 'Aruba',
'code' => ['297'],
],
'au' => [
'name' => 'Australia',
'code' => ['61'],
],
'sh' => [
'name' => 'Ascension',
'code' => ['247'],
],
'at' => [
'name' => 'Austria',
'code' => ['43'],
],
'az' => [
'name' => 'Azerbaijan',
'code' => ['994'],
],
'bs' => [
'name' => 'Bahamas',
'code' => ['1242'],
],
'bh' => [
'name' => 'Bahrain',
'code' => ['973'],
],
'bd' => [
'name' => 'Bangladesh',
'code' => ['880'],
],
'bb' => [
'name' => 'Barbados',
'code' => ['1246'],
],
'by' => [
'name' => 'Belarus',
'code' => ['375'],
],
'be' => [
'name' => 'Belgium',
'code' => ['32'],
],
'bz' => [
'name' => 'Belize',
'code' => ['501'],
],
'bj' => [
'name' => 'Benin',
'code' => ['229'],
],
'bm' => [
'name' => 'Bermuda',
'code' => ['1441'],
],
'bt' => [
'name' => 'Bhutan',
'code' => ['975'],
],
'bo' => [
'name' => 'Bolivia',
'code' => ['591'],
],
'ba' => [
'name' => 'Bosnia and Herzegovina',
'code' => ['387'],
],
'bw' => [
'name' => 'Botswana',
'code' => ['267'],
],
'br' => [
'name' => 'Brazil',
'code' => ['55'],
],
'bn' => [
'name' => 'Brunei Darussalam',
'code' => ['673'],
],
'bg' => [
'name' => 'Bulgaria',
'code' => ['359'],
],
'bf' => [
'name' => 'Burkina Faso',
'code' => ['226'],
],
'bi' => [
'name' => 'Burundi',
'code' => ['257'],
],
'kh' => [
'name' => 'Cambodia',
'code' => ['855'],
],
'cm' => [
'name' => 'Cameroon',
'code' => ['237'],
],
'ca' => [
'name' => 'Canada',
'code' => ['1'],
],
'cv' => [
'name' => 'Cape Verde',
'code' => ['238'],
],
'ky' => [
'name' => 'Cayman Islands',
'code' => ['1345'],
],
'cf' => [
'name' => 'Central African Republic',
'code' => ['236'],
],
'td' => [
'name' => 'Chad',
'code' => ['235'],
],
'cl' => [
'name' => 'Chile',
'code' => ['56'],
],
'cn' => [
'name' => 'China',
'code' => ['86'],
],
'cx' => [
'name' => 'Christmas Island',
'code' => ['618'],
],
'cc' => [
'name' => 'Cocos-Keeling Islands',
'code' => ['61'],
],
'co' => [
'name' => 'Colombia',
'code' => ['57'],
],
'km' => [
'name' => 'Comoros',
'code' => ['269'],
],
'cg' => [
'name' => 'Congo',
'code' => ['242'],
],
'cd' => [
'name' => 'Congo, Dem. Rep. of (former Zaire)',
'code' => ['243'],
],
'ck' => [
'name' => 'Cook Islands',
'code' => ['682'],
],
'cr' => [
'name' => 'Costa Rica',
'code' => ['506'],
],
'ci' => [
'name' => 'Côte d\\\'Ivoire',
'code' => ['225'],
],
'hr' => [
'name' => 'Croatia',
'code' => ['385'],
],
'cu' => [
'name' => 'Cuba',
'code' => ['53'],
],
'cw' => [
'name' => 'Curaçao',
'code' => ['599'],
],
'cy' => [
'name' => 'Cyprus',
'code' => ['357'],
],
'cz' => [
'name' => 'Czech Republic',
'code' => ['420'],
],
'dk' => [
'name' => 'Denmark',
'code' => ['45'],
],
'dj' => [
'name' => 'Djibouti',
'code' => ['253'],
],
'dm' => [
'name' => 'Dominica',
'code' => ['1767'],
],
'do' => [
'name' => 'Dominican Republic',
'code' => ['1809', '1829'],
],
'ec' => [
'name' => 'Ecuador',
'code' => ['593'],
],
'eg' => [
'name' => 'Egypt',
'code' => ['20'],
],
'sv' => [
'name' => 'El Salvador',
'code' => ['503'],
],
'gq' => [
'name' => 'Equatorial Guinea',
'code' => ['240'],
],
'er' => [
'name' => 'Eritrea',
'code' => ['291'],
],
'ee' => [
'name' => 'Estonia',
'code' => ['372'],
],
'et' => [
'name' => 'Ethiopia',
'code' => ['251'],
],
'fk' => [
'name' => 'Falkland Islands',
'code' => ['500'],
],
'fo' => [
'name' => 'Faroe Islands',
'code' => ['298'],
],
'fj' => [
'name' => 'Fiji',
'code' => ['679'],
],
'fi' => [
'name' => 'Finland',
'code' => ['358'],
],
'fr' => [
'name' => 'France',
'code' => ['33'],
],
'gf' => [
'name' => 'French Guiana',
'code' => ['594'],
],
'pf' => [
'name' => 'French Polynesia',
'code' => ['689'],
],
'tf' => [
'name' => 'French Southern Territories',
'code' => ['596'],
],
'ga' => [
'name' => 'Gabon',
'code' => ['241'],
],
'gm' => [
'name' => 'Gambia',
'code' => ['220'],
],
'ge' => [
'name' => 'Georgia',
'code' => ['995'],
],
'de' => [
'name' => 'Germany',
'code' => ['49'],
],
'gh' => [
'name' => 'Ghana',
'code' => ['233'],
],
'gi' => [
'name' => 'Gibraltar',
'code' => ['350'],
],
'gr' => [
'name' => 'Greece',
'code' => ['30'],
],
'gl' => [
'name' => 'Greenland',
'code' => ['299'],
],
'gd' => [
'name' => 'Grenada',
'code' => ['1473'],
],
'gp' => [
'name' => 'Guadeloupe',
'code' => ['590'],
],
'gu' => [
'name' => 'Guam',
'code' => ['1671'],
],
'gt' => [
'name' => 'Guatemala',
'code' => ['502'],
],
'gn' => [
'name' => 'Guinea',
'code' => ['224'],
],
'gw' => [
'name' => 'Guinea-Bissau',
'code' => ['245'],
],
'gy' => [
'name' => 'Guyana',
'code' => ['592'],
],
'ht' => [
'name' => 'Haiti',
'code' => ['509'],
],
'hn' => [
'name' => 'Honduras',
'code' => ['504'],
],
'hk' => [
'name' => 'Hong Kong',
'code' => ['852'],
],
'hu' => [
'name' => 'Hungary',
'code' => ['36'],
],
'is' => [
'name' => 'Iceland',
'code' => ['354'],
],
'in' => [
'name' => 'India',
'code' => ['91'],
],
'id' => [
'name' => 'Indonesia',
'code' => ['62'],
],
'ir' => [
'name' => 'Iran',
'code' => ['98'],
],
'iq' => [
'name' => 'Iraq',
'code' => ['964'],
],
'ie' => [
'name' => 'Ireland',
'code' => ['353'],
],
'il' => [
'name' => 'Israel',
'code' => ['972'],
],
'it' => [
'name' => 'Italy',
'code' => ['39'],
],
'jm' => [
'name' => 'Jamaica',
'code' => ['1876'],
],
'jp' => [
'name' => 'Japan',
'code' => ['81'],
],
'je' => [
'name' => 'Jersey',
'code' => ['44'],
],
'jo' => [
'name' => 'Jordan',
'code' => ['962'],
],
'kz' => [
'name' => 'Kazakhstan',
'code' => ['7'],
],
'ke' => [
'name' => 'Kenya',
'code' => ['254'],
],
'ki' => [
'name' => 'Kiribati',
'code' => ['686'],
],
'kp' => [
'name' => 'Korea (North)',
'code' => ['850'],
],
'kr' => [
'name' => 'Korea (South)',
'code' => ['82'],
],
'kw' => [
'name' => 'Kuwait',
'code' => ['965'],
],
'kg' => [
'name' => 'Kyrgyzstan',
'code' => ['996'],
],
'la' => [
'name' => 'Laos',
'code' => ['856'],
],
'lv' => [
'name' => 'Latvia',
'code' => ['371'],
],
'lb' => [
'name' => 'Lebanon',
'code' => ['961'],
],
'ls' => [
'name' => 'Lesotho',
'code' => ['266'],
],
'lr' => [
'name' => 'Liberia',
'code' => ['231'],
],
'ly' => [
'name' => 'Libya',
'code' => ['218'],
],
'li' => [
'name' => 'Liechtenstein',
'code' => ['423'],
],
'lt' => [
'name' => 'Lithuania',
'code' => ['370'],
],
'lu' => [
'name' => 'Luxembourg',
'code' => ['352'],
],
'mo' => [
'name' => 'Macao',
'code' => ['853'],
],
'mk' => [
'name' => 'Macedonia',
'code' => ['389'],
],
'mg' => [
'name' => 'Madagascar',
'code' => ['261'],
],
'mw' => [
'name' => 'Malawi',
'code' => ['265'],
],
'my' => [
'name' => 'Malaysia',
'code' => ['60'],
],
'mv' => [
'name' => 'Maldives',
'code' => ['960'],
],
'ml' => [
'name' => 'Mali',
'code' => ['223'],
],
'mt' => [
'name' => 'Malta',
'code' => ['356'],
],
'mh' => [
'name' => 'Marshall Islands',
'code' => ['692'],
],
'mq' => [
'name' => 'Martinique',
'code' => ['596'],
],
'mr' => [
'name' => 'Mauritania',
'code' => ['222'],
],
'mu' => [
'name' => 'Mauritius',
'code' => ['230'],
],
'yt' => [
'name' => 'Mayotte',
'code' => ['262'],
],
'mx' => [
'name' => 'Mexico',
'code' => ['52'],
],
'fm' => [
'name' => 'Micronesia',
'code' => ['691'],
],
'md' => [
'name' => 'Moldova',
'code' => ['373'],
],
'mc' => [
'name' => 'Monaco',
'code' => ['377'],
],
'mn' => [
'name' => 'Mongolia',
'code' => ['976'],
],
'me' => [
'name' => 'Montenegro',
'code' => ['382'],
],
'ms' => [
'name' => 'Montserrat',
'code' => ['1664'],
],
'ma' => [
'name' => 'Morocco',
'code' => ['212'],
],
'mz' => [
'name' => 'Mozambique',
'code' => ['258'],
],
'mm' => [
'name' => 'Myanmar',
'code' => ['95'],
],
'na' => [
'name' => 'Namibia',
'code' => ['264'],
],
'nr' => [
'name' => 'Nauru',
'code' => ['674'],
],
'np' => [
'name' => 'Nepal',
'code' => ['977'],
],
'nl' => [
'name' => 'Netherlands',
'code' => ['31'],
],
'nc' => [
'name' => 'New Caledonia',
'code' => ['687'],
],
'nz' => [
'name' => 'New Zealand',
'code' => ['64'],
],
'ni' => [
'name' => 'Nicaragua',
'code' => ['505'],
],
'ne' => [
'name' => 'Niger',
'code' => ['227'],
],
'ng' => [
'name' => 'Nigeria',
'code' => ['234'],
],
'nu' => [
'name' => 'Niue',
'code' => ['683'],
],
'nf' => [
'name' => 'Norfolk Island',
'code' => ['672'],
],
'mp' => [
'name' => 'Northern Mariana Islands',
'code' => ['1670'],
],
'no' => [
'name' => 'Norway',
'code' => ['47'],
],
'om' => [
'name' => 'Oman',
'code' => ['968'],
],
'pk' => [
'name' => 'Pakistan',
'code' => ['92'],
],
'pw' => [
'name' => 'Palau',
'code' => ['680'],
],
'ps' => [
'name' => 'Palestine',
'code' => ['970'],
],
'pa' => [
'name' => 'Panama',
'code' => ['507'],
],
'pg' => [
'name' => 'Papua New Guinea',
'code' => ['675'],
],
'py' => [
'name' => 'Paraguay',
'code' => ['595'],
],
'pe' => [
'name' => 'Peru',
'code' => ['51'],
],
'ph' => [
'name' => 'Philippines',
'code' => ['63'],
],
'pn' => [
'name' => 'Pitcairn',
'code' => ['64'],
],
'pl' => [
'name' => 'Poland',
'code' => ['48'],
],
'pt' => [
'name' => 'Portugal',
'code' => ['351'],
],
'pr' => [
'name' => 'Puerto Rico',
'code' => ['1787', '1939'],
],
'qa' => [
'name' => 'Qatar',
'code' => ['974'],
],
're' => [
'name' => 'Réunion',
'code' => ['262'],
],
'ro' => [
'name' => 'Romania',
'code' => ['40'],
],
'ru' => [
'name' => 'Russia',
'code' => ['7'],
],
'rw' => [
'name' => 'Rwanda',
'code' => ['250'],
],
'kn' => [
'name' => 'Saint Kitts and Nevis',
'code' => ['1869'],
],
'lc' => [
'name' => 'Saint Lucia',
'code' => ['1758'],
],
'pm' => [
'name' => 'Saint Pierre and Miquelon',
'code' => ['508'],
],
'vc' => [
'name' => 'Saint Vincent and the Grenadines',
'code' => ['1784'],
],
'ws' => [
'name' => 'Samoa',
'code' => ['685'],
],
'sm' => [
'name' => 'San Marino',
'code' => ['378'],
],
'st' => [
'name' => 'Sao Tome and Principe',
'code' => ['239'],
],
'sa' => [
'name' => 'Saudi Arabia',
'code' => ['966'],
],
'sn' => [
'name' => 'Senegal',
'code' => ['221'],
],
'rs' => [
'name' => 'Serbia',
'code' => ['381'],
],
'sc' => [
'name' => 'Seychelles',
'code' => ['248'],
],
'sl' => [
'name' => 'Sierra Leone',
'code' => ['232'],
],
'sg' => [
'name' => 'Singapore',
'code' => ['65'],
],
'sk' => [
'name' => 'Slovakia',
'code' => ['421'],
],
'si' => [
'name' => 'Slovenia',
'code' => ['386'],
],
'sb' => [
'name' => 'Solomon Islands',
'code' => ['677'],
],
'so' => [
'name' => 'Somalia',
'code' => ['252'],
],
'za' => [
'name' => 'South Africa',
'code' => ['27'],
],
'ss' => [
'name' => 'South Sudan',
'code' => ['211'],
],
'es' => [
'name' => 'Spain',
'code' => ['34'],
],
'lk' => [
'name' => 'Sri Lanka',
'code' => ['94'],
],
'sd' => [
'name' => 'Sudan',
'code' => ['249'],
],
'sr' => [
'name' => 'Suriname',
'code' => ['597'],
],
'sz' => [
'name' => 'Swaziland',
'code' => ['268'],
],
'se' => [
'name' => 'Sweden',
'code' => ['46'],
],
'ch' => [
'name' => 'Switzerland',
'code' => ['41'],
],
'sy' => [
'name' => 'Syrian',
'code' => ['963'],
],
'tw' => [
'name' => 'Taiwan',
'code' => ['886'],
],
'tj' => [
'name' => 'Tajikistan',
'code' => ['992'],
],
'tz' => [
'name' => 'Tanzania',
'code' => ['255'],
],
'th' => [
'name' => 'Thailand',
'code' => ['66'],
],
'tl' => [
'name' => 'Timor Leste',
'code' => ['670'],
],
'tg' => [
'name' => 'Togo',
'code' => ['228'],
],
'tk' => [
'name' => 'Tokelau',
'code' => ['690'],
],
'to' => [
'name' => 'Tonga',
'code' => ['676'],
],
'tt' => [
'name' => 'Trinidad and Tobago',
'code' => ['1868'],
],
'tn' => [
'name' => 'Tunisia',
'code' => ['216'],
],
'tr' => [
'name' => 'Turkey',
'code' => ['90'],
],
'tm' => [
'name' => 'Turkmenistan',
'code' => ['993'],
],
'tc' => [
'name' => 'Turks and Caicos Islands',
'code' => ['1649'],
],
'tv' => [
'name' => 'Tuvalu',
'code' => ['688'],
],
'ug' => [
'name' => 'Uganda',
'code' => ['256'],
],
'ua' => [
'name' => 'Ukraine',
'code' => ['380'],
],
'ae' => [
'name' => 'United Arab Emirates',
'code' => ['971'],
],
'gb' => [
'name' => 'United Kingdom',
'code' => ['44'],
],
'us' => [
'name' => 'United States',
'code' => ['1'],
],
'uy' => [
'name' => 'Uruguay',
'code' => ['598'],
],
'uz' => [
'name' => 'Uzbekistan',
'code' => ['998'],
],
'vu' => [
'name' => 'Vanuatu',
'code' => ['678'],
],
've' => [
'name' => 'Venezuela',
'code' => ['58'],
],
'vn' => [
'name' => 'Vietnam',
'code' => ['84'],
],
'vg' => [
'name' => 'Virgin Islands, British',
'code' => ['1284'],
],
'wf' => [
'name' => 'Wallis and Futuna',
'code' => ['681'],
],
'eh' => [
'name' => 'Western Sahara',
'code' => ['212'],
],
'ye' => [
'name' => 'Yemen',
'code' => ['967'],
],
'zm' => [
'name' => 'Zambia',
'code' => ['260'],
],
'zw' => [
'name' => 'Zimbabwe',
'code' => ['263'],
],
];
public function getDescription(): string
{
return 'Add countries and phone codes';
}
public function up(Schema $schema): void
{
foreach (self::COUNTRIES as $isoCode => $country) {
$name = $country['name'];
$phoneCodes = $country['code'];
$params = ['name' => $name, 'iso_code' => $isoCode, 'sms_enabled' => 1];
$this->connection->executeQuery("
INSERT IGNORE INTO " . self::TABLE_COUNTRY . "
(`name`, `iso_code`, `sms_enabled`)
VALUES (:name, :iso_code, :sms_enabled)
", $params);
$params = ['iso_code' => $isoCode];
$countryId = $this->connection->fetchOne("
SELECT `id` FROM " . self::TABLE_COUNTRY . " where `iso_code` = :iso_code
", $params);
if (false === $countryId) {
throw new RuntimeException("Could not find country: $name");
}
foreach ($phoneCodes as $phoneCode) {
$params = ['country_id' => $countryId, 'code' => $phoneCode];
$this->connection->executeQuery("
INSERT INTO " . self::TABLE_COUNTRY_PHONE_CODE . "
(`country_id`, `code`)
VALUES (:country_id, :code)
", $params);
}
}
}
public function down(Schema $schema): void
{
}
}