GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Countries::initSubset()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Cromwell\ISO3166;
4
5
class Countries implements CodesByName, \ArrayAccess, \Countable, \JsonSerializable
6
{
7
8
    /** @var Country[] */
9
    protected $selectedCountries = [];
10
11
    /** @var Country[] */
12
    protected $worldCountries = [];
13
14
    private $worldCountriesRaw = [
15
        ['code' => self::ANDORRA, 'name' => 'Andorra'],
16
        ['code' => self::UNITED_ARAB_EMIRATES, 'name' => 'United Arab Emirates'],
17
        ['code' => self::AFGHANISTAN, 'name' => 'Afghanistan'],
18
        ['code' => self::ANTIGUA_BARBUDA, 'name' => 'Antigua And Barbuda'],
19
        ['code' => self::ANGUILLA, 'name' => 'Anguilla'],
20
        ['code' => self::ALBANIA, 'name' => 'Albania'],
21
        ['code' => self::ARMENIA, 'name' => 'Armenia'],
22
        ['code' => self::NETHERLANDS_ANTILLES, 'name' => 'Netherlands Antilles'],
23
        ['code' => self::ANGOLA, 'name' => 'Angola'],
24
        ['code' => self::ANTARCTICA, 'name' => 'Antarctica'],
25
        ['code' => self::ARGENTINA, 'name' => 'Argentina'],
26
        ['code' => self::AMERICAN_SAMOA, 'name' => 'American Samoa'],
27
        ['code' => self::AUSTRIA, 'name' => 'Austria'],
28
        ['code' => self::AUSTRALIA, 'name' => 'Australia'],
29
        ['code' => self::ARUBA, 'name' => 'Aruba'],
30
        ['code' => self::ALAND_ISLANDS, 'name' => 'Aland Islands'],
31
        ['code' => self::AZERBAIJAN, 'name' => 'Azerbaijan'],
32
        ['code' => self::BOSNIA_HERZEGOVINA, 'name' => 'Bosnia And Herzegovina'],
33
        ['code' => self::BARBADOS, 'name' => 'Barbados'],
34
        ['code' => self::BANGLADESH, 'name' => 'Bangladesh'],
35
        ['code' => self::BELGIUM, 'name' => 'Belgium'],
36
        ['code' => self::BURKINA_FASO, 'name' => 'Burkina Faso'],
37
        ['code' => self::BULGARIA, 'name' => 'Bulgaria'],
38
        ['code' => self::BAHRAIN, 'name' => 'Bahrain'],
39
        ['code' => self::BURUNDI, 'name' => 'Burundi'],
40
        ['code' => self::BENIN, 'name' => 'Benin'],
41
        ['code' => self::SAINT_BARTHELEMY, 'name' => 'Saint Barthelemy'],
42
        ['code' => self::BERMUDA, 'name' => 'Bermuda'],
43
        ['code' => self::BRUNEI_DARUSSALAM, 'name' => 'Brunei Darussalam'],
44
        ['code' => self::BOLIVIA, 'name' => 'Bolivia'],
45
        ['code' => self::BRAZIL, 'name' => 'Brazil'],
46
        ['code' => self::BAHAMAS, 'name' => 'Bahamas'],
47
        ['code' => self::BHUTAN, 'name' => 'Bhutan'],
48
        ['code' => self::BOUVET_ISLAND, 'name' => 'Bouvet Island'],
49
        ['code' => self::BOTSWANA, 'name' => 'Botswana'],
50
        ['code' => self::BELARUS, 'name' => 'Belarus'],
51
        ['code' => self::BELIZE, 'name' => 'Belize'],
52
        ['code' => self::CANADA, 'name' => 'Canada'],
53
        ['code' => self::COCOS_KEELING_ISLANDS, 'name' => 'Cocos (Keeling) Islands'],
54
        ['code' => self::CONGO_DEMOCRATIC_REPUBLIC, 'name' => 'Congo, Democratic Republic'],
55
        ['code' => self::CENTRAL_AFRICAN_REPUBLIC, 'name' => 'Central African Republic'],
56
        ['code' => self::CONGO, 'name' => 'Congo'],
57
        ['code' => self::SWITZERLAND, 'name' => 'Switzerland'],
58
        ['code' => self::COTE_DIVOIRE, 'name' => 'Cote D\'Ivoire'],
59
        ['code' => self::COOK_ISLANDS, 'name' => 'Cook Islands'],
60
        ['code' => self::CHILE, 'name' => 'Chile'],
61
        ['code' => self::CAMEROON, 'name' => 'Cameroon'],
62
        ['code' => self::CHINA, 'name' => 'China'],
63
        ['code' => self::COLOMBIA, 'name' => 'Colombia'],
64
        ['code' => self::COSTA_RICA, 'name' => 'Costa Rica'],
65
        ['code' => self::CUBA, 'name' => 'Cuba'],
66
        ['code' => self::CAPE_VERDE, 'name' => 'Cape Verde'],
67
        ['code' => self::CHRISTMAS_ISLAND, 'name' => 'Christmas Island'],
68
        ['code' => self::CYPRUS, 'name' => 'Cyprus'],
69
        ['code' => self::CZECH_REPUBLIC, 'name' => 'Czech Republic'],
70
        ['code' => self::GERMANY, 'name' => 'Germany'],
71
        ['code' => self::DJIBOUTI, 'name' => 'Djibouti'],
72
        ['code' => self::DENMARK, 'name' => 'Denmark'],
73
        ['code' => self::DOMINICA, 'name' => 'Dominica'],
74
        ['code' => self::DOMINICAN_REPUBLIC, 'name' => 'Dominican Republic'],
75
        ['code' => self::ALGERIA, 'name' => 'Algeria'],
76
        ['code' => self::ECUADOR, 'name' => 'Ecuador'],
77
        ['code' => self::ESTONIA, 'name' => 'Estonia'],
78
        ['code' => self::EGYPT, 'name' => 'Egypt'],
79
        ['code' => self::WESTERN_SAHARA, 'name' => 'Western Sahara'],
80
        ['code' => self::ERITREA, 'name' => 'Eritrea'],
81
        ['code' => self::SPAIN, 'name' => 'Spain'],
82
        ['code' => self::ETHIOPIA, 'name' => 'Ethiopia'],
83
        ['code' => self::FINLAND, 'name' => 'Finland'],
84
        ['code' => self::FIJI, 'name' => 'Fiji'],
85
        ['code' => self::FALKLAND_ISLANDS, 'name' => 'Falkland Islands (Malvinas)'],
86
        ['code' => self::MICRONESIA, 'name' => 'Micronesia, Federated States Of'],
87
        ['code' => self::FAROE_ISLANDS, 'name' => 'Faroe Islands'],
88
        ['code' => self::FRANCE, 'name' => 'France'],
89
        ['code' => self::GABON, 'name' => 'Gabon'],
90
        ['code' => self::UNITED_KINGDOM, 'name' => 'United Kingdom'],
91
        ['code' => self::GRENADA, 'name' => 'Grenada'],
92
        ['code' => self::GEORGIA, 'name' => 'Georgia'],
93
        ['code' => self::FRENCH_GUIANA, 'name' => 'French Guiana'],
94
        ['code' => self::GUERNSEY, 'name' => 'Guernsey'],
95
        ['code' => self::GHANA, 'name' => 'Ghana'],
96
        ['code' => self::GIBRALTAR, 'name' => 'Gibraltar'],
97
        ['code' => self::GREENLAND, 'name' => 'Greenland'],
98
        ['code' => self::GAMBIA, 'name' => 'Gambia'],
99
        ['code' => self::GUINEA, 'name' => 'Guinea'],
100
        ['code' => self::GUADELOUPE, 'name' => 'Guadeloupe'],
101
        ['code' => self::EQUATORIAL_GUINEA, 'name' => 'Equatorial Guinea'],
102
        ['code' => self::GREECE, 'name' => 'Greece'],
103
        ['code' => self::SOUTH_GEORGIA_SANDWICH, 'name' => 'South Georgia And Sandwich Isl.'],
104
        ['code' => self::GUATEMALA, 'name' => 'Guatemala'],
105
        ['code' => self::GUAM, 'name' => 'Guam'],
106
        ['code' => self::GUINEA_BISSAU, 'name' => 'Guinea-Bissau'],
107
        ['code' => self::GUYANA, 'name' => 'Guyana'],
108
        ['code' => self::HONG_KONG, 'name' => 'Hong Kong'],
109
        ['code' => self::HEARD_MCDONALD_ISLANDS, 'name' => 'Heard Island & Mcdonald Islands'],
110
        ['code' => self::HONDURAS, 'name' => 'Honduras'],
111
        ['code' => self::CROATIA, 'name' => 'Croatia'],
112
        ['code' => self::HAITI, 'name' => 'Haiti'],
113
        ['code' => self::HUNGARY, 'name' => 'Hungary'],
114
        ['code' => self::INDONESIA, 'name' => 'Indonesia'],
115
        ['code' => self::IRELAND, 'name' => 'Ireland'],
116
        ['code' => self::ISRAEL, 'name' => 'Israel'],
117
        ['code' => self::ISLE_OF_MAN, 'name' => 'Isle Of Man'],
118
        ['code' => self::INDIA, 'name' => 'India'],
119
        ['code' => self::BRITISH_INDIAN_OCEAN_TERRITORY, 'name' => 'British Indian Ocean Territory'],
120
        ['code' => self::IRAQ, 'name' => 'Iraq'],
121
        ['code' => self::IRAN, 'name' => 'Iran, Islamic Republic Of'],
122
        ['code' => self::ICELAND, 'name' => 'Iceland'],
123
        ['code' => self::ITALY, 'name' => 'Italy'],
124
        ['code' => self::JERSEY, 'name' => 'Jersey'],
125
        ['code' => self::JAMAICA, 'name' => 'Jamaica'],
126
        ['code' => self::JORDAN, 'name' => 'Jordan'],
127
        ['code' => self::JAPAN, 'name' => 'Japan'],
128
        ['code' => self::KENYA, 'name' => 'Kenya'],
129
        ['code' => self::KOSOVO, 'name' => 'Kosovo'],
130
        ['code' => self::KYRGYZSTAN, 'name' => 'Kyrgyzstan'],
131
        ['code' => self::CAMBODIA, 'name' => 'Cambodia'],
132
        ['code' => self::KIRIBATI, 'name' => 'Kiribati'],
133
        ['code' => self::COMOROS, 'name' => 'Comoros'],
134
        ['code' => self::SAINT_KITTS_NEVIS, 'name' => 'Saint Kitts And Nevis'],
135
        ['code' => self::KOREA, 'name' => 'Korea'],
136
        ['code' => self::KUWAIT, 'name' => 'Kuwait'],
137
        ['code' => self::CAYMAN_ISLANDS, 'name' => 'Cayman Islands'],
138
        ['code' => self::KAZAKHSTAN, 'name' => 'Kazakhstan'],
139
        ['code' => self::LAO, 'name' => 'Lao People\'s Democratic Republic'],
140
        ['code' => self::LEBANON, 'name' => 'Lebanon'],
141
        ['code' => self::SAINT_LUCIA, 'name' => 'Saint Lucia'],
142
        ['code' => self::LIECHTENSTEIN, 'name' => 'Liechtenstein'],
143
        ['code' => self::SRI_LANKA, 'name' => 'Sri Lanka'],
144
        ['code' => self::LIBERIA, 'name' => 'Liberia'],
145
        ['code' => self::LESOTHO, 'name' => 'Lesotho'],
146
        ['code' => self::LITHUANIA, 'name' => 'Lithuania'],
147
        ['code' => self::LUXEMBOURG, 'name' => 'Luxembourg'],
148
        ['code' => self::LATVIA, 'name' => 'Latvia'],
149
        ['code' => self::LIBYAN_ARAB_JAMAHIRIYA, 'name' => 'Libyan Arab Jamahiriya'],
150
        ['code' => self::MOROCCO, 'name' => 'Morocco'],
151
        ['code' => self::MONACO, 'name' => 'Monaco'],
152
        ['code' => self::MOLDOVA, 'name' => 'Moldova'],
153
        ['code' => self::MONTENEGRO, 'name' => 'Montenegro'],
154
        ['code' => self::SAINT_MARTIN, 'name' => 'Saint Martin'],
155
        ['code' => self::MADAGASCAR, 'name' => 'Madagascar'],
156
        ['code' => self::MARSHALL_ISLANDS, 'name' => 'Marshall Islands'],
157
        ['code' => self::MACEDONIA, 'name' => 'Macedonia'],
158
        ['code' => self::MALI, 'name' => 'Mali'],
159
        ['code' => self::MYANMAR, 'name' => 'Myanmar'],
160
        ['code' => self::MONGOLIA, 'name' => 'Mongolia'],
161
        ['code' => self::MACAO, 'name' => 'Macao'],
162
        ['code' => self::NORTHERN_MARIANA_ISLANDS, 'name' => 'Northern Mariana Islands'],
163
        ['code' => self::MARTINIQUE, 'name' => 'Martinique'],
164
        ['code' => self::MAURITANIA, 'name' => 'Mauritania'],
165
        ['code' => self::MONTSERRAT, 'name' => 'Montserrat'],
166
        ['code' => self::MALTA, 'name' => 'Malta'],
167
        ['code' => self::MAURITIUS, 'name' => 'Mauritius'],
168
        ['code' => self::MALDIVES, 'name' => 'Maldives'],
169
        ['code' => self::MALAWI, 'name' => 'Malawi'],
170
        ['code' => self::MEXICO, 'name' => 'Mexico'],
171
        ['code' => self::MALAYSIA, 'name' => 'Malaysia'],
172
        ['code' => self::MOZAMBIQUE, 'name' => 'Mozambique'],
173
        ['code' => self::NAMIBIA, 'name' => 'Namibia'],
174
        ['code' => self::NEW_CALEDONIA, 'name' => 'New Caledonia'],
175
        ['code' => self::NIGER, 'name' => 'Niger'],
176
        ['code' => self::NORFOLK_ISLAND, 'name' => 'Norfolk Island'],
177
        ['code' => self::NIGERIA, 'name' => 'Nigeria'],
178
        ['code' => self::NICARAGUA, 'name' => 'Nicaragua'],
179
        ['code' => self::NETHERLANDS, 'name' => 'Netherlands'],
180
        ['code' => self::NORWAY, 'name' => 'Norway'],
181
        ['code' => self::NEPAL, 'name' => 'Nepal'],
182
        ['code' => self::NAURU, 'name' => 'Nauru'],
183
        ['code' => self::NIUE, 'name' => 'Niue'],
184
        ['code' => self::NEW_ZEALAND, 'name' => 'New Zealand'],
185
        ['code' => self::OMAN, 'name' => 'Oman'],
186
        ['code' => self::PANAMA, 'name' => 'Panama'],
187
        ['code' => self::PERU, 'name' => 'Peru'],
188
        ['code' => self::FRENCH_POLYNESIA, 'name' => 'French Polynesia'],
189
        ['code' => self::PAPUA_NEW_GUINEA, 'name' => 'Papua New Guinea'],
190
        ['code' => self::PHILIPPINES, 'name' => 'Philippines'],
191
        ['code' => self::PAKISTAN, 'name' => 'Pakistan'],
192
        ['code' => self::POLAND, 'name' => 'Poland'],
193
        ['code' => self::SAINT_PIERRE_MIQUELON, 'name' => 'Saint Pierre And Miquelon'],
194
        ['code' => self::PITCAIRN, 'name' => 'Pitcairn'],
195
        ['code' => self::PUERTO_RICO, 'name' => 'Puerto Rico'],
196
        ['code' => self::PALESTINIAN_TERRITORY_OCCUPIED, 'name' => 'Palestinian Territory, Occupied'],
197
        ['code' => self::PORTUGAL, 'name' => 'Portugal'],
198
        ['code' => self::PALAU, 'name' => 'Palau'],
199
        ['code' => self::PARAGUAY, 'name' => 'Paraguay'],
200
        ['code' => self::QATAR, 'name' => 'Qatar'],
201
        ['code' => self::REUNION, 'name' => 'Reunion'],
202
        ['code' => self::ROMANIA, 'name' => 'Romania'],
203
        ['code' => self::SERBIA, 'name' => 'Serbia'],
204
        ['code' => self::RUSSIAN_FEDERATION, 'name' => 'Russian Federation'],
205
        ['code' => self::RWANDA, 'name' => 'Rwanda'],
206
        ['code' => self::SAUDI_ARABIA, 'name' => 'Saudi Arabia'],
207
        ['code' => self::SOLOMON_ISLANDS, 'name' => 'Solomon Islands'],
208
        ['code' => self::SEYCHELLES, 'name' => 'Seychelles'],
209
        ['code' => self::SUDAN, 'name' => 'Sudan'],
210
        ['code' => self::SWEDEN, 'name' => 'Sweden'],
211
        ['code' => self::SINGAPORE, 'name' => 'Singapore'],
212
        ['code' => self::SAINT_HELENA, 'name' => 'Saint Helena'],
213
        ['code' => self::SLOVENIA, 'name' => 'Slovenia'],
214
        ['code' => self::SVALBARD_JAN_MAYEN, 'name' => 'Svalbard And Jan Mayen'],
215
        ['code' => self::SLOVAKIA, 'name' => 'Slovakia'],
216
        ['code' => self::SIERRA_LEONE, 'name' => 'Sierra Leone'],
217
        ['code' => self::SAN_MARINO, 'name' => 'San Marino'],
218
        ['code' => self::SENEGAL, 'name' => 'Senegal'],
219
        ['code' => self::SOMALIA, 'name' => 'Somalia'],
220
        ['code' => self::SURINAME, 'name' => 'Suriname'],
221
        ['code' => self::SAO_TOME_PRINCIPE, 'name' => 'Sao Tome And Principe'],
222
        ['code' => self::EL_SALVADOR, 'name' => 'El Salvador'],
223
        ['code' => self::SYRIAN_ARAB_REPUBLIC, 'name' => 'Syrian Arab Republic'],
224
        ['code' => self::SWAZILAND, 'name' => 'Swaziland'],
225
        ['code' => self::TURKS_CAICOS_ISLANDS, 'name' => 'Turks And Caicos Islands'],
226
        ['code' => self::CHAD, 'name' => 'Chad'],
227
        ['code' => self::FRENCH_SOUTHERN_TERRITORIES, 'name' => 'French Southern Territories'],
228
        ['code' => self::TOGO, 'name' => 'Togo'],
229
        ['code' => self::THAILAND, 'name' => 'Thailand'],
230
        ['code' => self::TAJIKISTAN, 'name' => 'Tajikistan'],
231
        ['code' => self::TOKELAU, 'name' => 'Tokelau'],
232
        ['code' => self::TIMOR_LESTE, 'name' => 'Timor-Leste'],
233
        ['code' => self::TURKMENISTAN, 'name' => 'Turkmenistan'],
234
        ['code' => self::TUNISIA, 'name' => 'Tunisia'],
235
        ['code' => self::TONGA, 'name' => 'Tonga'],
236
        ['code' => self::TURKEY, 'name' => 'Turkey'],
237
        ['code' => self::TRINIDAD_TOBAGO, 'name' => 'Trinidad And Tobago'],
238
        ['code' => self::TUVALU, 'name' => 'Tuvalu'],
239
        ['code' => self::TAIWAN, 'name' => 'Taiwan'],
240
        ['code' => self::TANZANIA, 'name' => 'Tanzania'],
241
        ['code' => self::UKRAINE, 'name' => 'Ukraine'],
242
        ['code' => self::UGANDA, 'name' => 'Uganda'],
243
        ['code' => self::UNITED_STATES_OUTLYING_ISLANDS, 'name' => 'United States Outlying Islands'],
244
        ['code' => self::UNITED_STATES, 'name' => 'United States'],
245
        ['code' => self::URUGUAY, 'name' => 'Uruguay'],
246
        ['code' => self::UZBEKISTAN, 'name' => 'Uzbekistan'],
247
        ['code' => self::HOLY_SEE_VATICAN_CITY_STATE, 'name' => 'Holy See (Vatican City State)'],
248
        ['code' => self::SAINT_VINCENT_GRENADINES, 'name' => 'Saint Vincent And Grenadines'],
249
        ['code' => self::VENEZUELA, 'name' => 'Venezuela'],
250
        ['code' => self::VIRGIN_ISLANDS_BRITISH, 'name' => 'Virgin Islands, British'],
251
        ['code' => self::VIRGIN_ISLANDS_US, 'name' => 'Virgin Islands, U.S.'],
252
        ['code' => self::VIET_NAM, 'name' => 'Viet Nam'],
253
        ['code' => self::VANUATU, 'name' => 'Vanuatu'],
254
        ['code' => self::WALLIS_FUTUNA, 'name' => 'Wallis And Futuna'],
255
        ['code' => self::SAMOA, 'name' => 'Samoa'],
256
        ['code' => self::YEMEN, 'name' => 'Yemen'],
257
        ['code' => self::MAYOTTE, 'name' => 'Mayotte'],
258
        ['code' => self::SOUTH_AFRICA, 'name' => 'South Africa'],
259
        ['code' => self::ZAMBIA, 'name' => 'Zambia'],
260
        ['code' => self::ZIMBABWE, 'name' => 'Zimbabwe'],
261
    ];
262
263
    /**
264
     * @param array $items - array of country codes
265
     */
266
    public function __construct($items = [])
267
    {
268
        array_walk($this->worldCountriesRaw, function ($item) {
269
            $this->worldCountries[$item['code']] = new Country($item['code'], $item['name']);
270
        });
271
272
        if (empty($items)) {
273
            $items = array_map(function ($item) {
274
                return $item['code'];
275
            }, $this->worldCountriesRaw);
276
        }
277
278
        $this->initSubset($items);
279
    }
280
281
    /**
282
     * @param mixed $offset country code
283
     * @return boolean true on success or false on failure.
284
     */
285
    public function offsetExists($offset)
286
    {
287
        return isset($this->selectedCountries[$offset]);
288
    }
289
290
    /**
291
     * @param string $offset country code
292
     * @return Country|null
293
     */
294
    public function offsetGet($offset)
295
    {
296
        if ($this->offsetExists($offset)) {
297
            return $this->selectedCountries[$offset];
298
        }
299
300
        return null;
301
    }
302
303
    /**
304
     * @param string $offset  country code
305
     * @param Country $value  country model
306
     */
307
    public function offsetSet($offset, $value)
308
    {
309
        $this->selectedCountries[$offset] = $value;
310
    }
311
312
    /**
313
     * @param string $offset country code
314
     */
315
    public function offsetUnset($offset)
316
    {
317
        unset($this->selectedCountries[$offset]);
318
    }
319
320
    /**
321
     * @return int number of countries in the selection
322
     */
323
    public function count()
324
    {
325
        return count($this->selectedCountries);
326
    }
327
328
    /**
329
     * @param $countryCodes
330
     */
331
    protected function initSubset($countryCodes)
332
    {
333
        array_walk($countryCodes, function($code) {
334
            $this->selectedCountries[$code] = $this->worldCountries[$code];
335
        });
336
    }
337
338
    /**
339
     * (PHP 5 &gt;= 5.4.0)<br/>
340
     * Specify data which should be serialized to JSON
341
     * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
342
     * @return mixed data which can be serialized by <b>json_encode</b>,
343
     * which is a value of any type other than a resource.
344
     */
345
    public function jsonSerialize()
346
    {
347
        return $this->selectedCountries;
348
    }
349
350
}
351