<?php /** * WooCommerce Plugin Framework * * This source file is subject to the GNU General Public License v3.0 * that is bundled with this package in the file license.txt. * It is also available through the world-wide-web at this URL: * http://www.gnu.org/licenses/gpl-3.0.html * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@skyverge.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade the plugin to newer * versions in the future. If you wish to customize the plugin for your * needs please refer to http://www.skyverge.com * * @package SkyVerge/WooCommerce/Plugin/Classes * @author SkyVerge * @copyright Copyright (c) 2013-2020, SkyVerge, Inc. * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 */ namespace SkyVerge\WooCommerce\PluginFramework\v5_10_0; defined( 'ABSPATH' ) or exit; if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v5_10_0\\Country_Helper' ) ) : /** * SkyVerge Country Helper Class * * The purpose of this class is to centralize country-related utility * functions that are commonly used in SkyVerge plugins * * @since 5.4.3 */ class Country_Helper { /** @var array ISO 3166-alpha2 => ISO 3166-alpha3 */ static public $alpha3 = [ 'AF' => 'AFG', 'AL' => 'ALB', 'DZ' => 'DZA', 'AD' => 'AND', 'AO' => 'AGO', 'AG' => 'ATG', 'AR' => 'ARG', 'AM' => 'ARM', 'AU' => 'AUS', 'AT' => 'AUT', 'AZ' => 'AZE', 'BS' => 'BHS', 'BH' => 'BHR', 'BD' => 'BGD', 'BB' => 'BRB', 'BY' => 'BLR', 'BE' => 'BEL', 'BZ' => 'BLZ', 'BJ' => 'BEN', 'BT' => 'BTN', 'BO' => 'BOL', 'BA' => 'BIH', 'BW' => 'BWA', 'BR' => 'BRA', 'BN' => 'BRN', 'BG' => 'BGR', 'BF' => 'BFA', 'BI' => 'BDI', 'KH' => 'KHM', 'CM' => 'CMR', 'CA' => 'CAN', 'CV' => 'CPV', 'CF' => 'CAF', 'TD' => 'TCD', 'CL' => 'CHL', 'CN' => 'CHN', 'CO' => 'COL', 'KM' => 'COM', 'CD' => 'COD', 'CG' => 'COG', 'CR' => 'CRI', 'CI' => 'CIV', 'HR' => 'HRV', 'CU' => 'CUB', 'CY' => 'CYP', 'CZ' => 'CZE', 'DK' => 'DNK', 'DJ' => 'DJI', 'DM' => 'DMA', 'DO' => 'DOM', 'EC' => 'ECU', 'EG' => 'EGY', 'SV' => 'SLV', 'GQ' => 'GNQ', 'ER' => 'ERI', 'EE' => 'EST', 'ET' => 'ETH', 'FJ' => 'FJI', 'FI' => 'FIN', 'FR' => 'FRA', 'GA' => 'GAB', 'GM' => 'GMB', 'GE' => 'GEO', 'DE' => 'DEU', 'GH' => 'GHA', 'GR' => 'GRC', 'GD' => 'GRD', 'GT' => 'GTM', 'GN' => 'GIN', 'GW' => 'GNB', 'GY' => 'GUY', 'HT' => 'HTI', 'HN' => 'HND', 'HU' => 'HUN', 'IS' => 'ISL', 'IN' => 'IND', 'ID' => 'IDN', 'IR' => 'IRN', 'IQ' => 'IRQ', 'IE' => 'IRL', 'IL' => 'ISR', 'IT' => 'ITA', 'JM' => 'JAM', 'JP' => 'JPN', 'JO' => 'JOR', 'KZ' => 'KAZ', 'KE' => 'KEN', 'KI' => 'KIR', 'KP' => 'PRK', 'KR' => 'KOR', 'KW' => 'KWT', 'KG' => 'KGZ', 'LA' => 'LAO', 'LV' => 'LVA', 'LB' => 'LBN', 'LS' => 'LSO', 'LR' => 'LBR', 'LY' => 'LBY', 'LI' => 'LIE', 'LT' => 'LTU', 'LU' => 'LUX', 'MK' => 'MKD', 'MG' => 'MDG', 'MW' => 'MWI', 'MY' => 'MYS', 'MV' => 'MDV', 'ML' => 'MLI', 'MT' => 'MLT', 'MH' => 'MHL', 'MR' => 'MRT', 'MU' => 'MUS', 'MX' => 'MEX', 'FM' => 'FSM', 'MD' => 'MDA', 'MC' => 'MCO', 'MN' => 'MNG', 'ME' => 'MNE', 'MA' => 'MAR', 'MZ' => 'MOZ', 'MM' => 'MMR', 'NA' => 'NAM', 'NR' => 'NRU', 'NP' => 'NPL', 'NL' => 'NLD', 'NZ' => 'NZL', 'NI' => 'NIC', 'NE' => 'NER', 'NG' => 'NGA', 'NO' => 'NOR', 'OM' => 'OMN', 'PK' => 'PAK', 'PW' => 'PLW', 'PA' => 'PAN', 'PG' => 'PNG', 'PY' => 'PRY', 'PE' => 'PER', 'PH' => 'PHL', 'PL' => 'POL', 'PT' => 'PRT', 'QA' => 'QAT', 'RO' => 'ROU', 'RU' => 'RUS', 'RW' => 'RWA', 'KN' => 'KNA', 'LC' => 'LCA', 'VC' => 'VCT', 'WS' => 'WSM', 'SM' => 'SMR', 'ST' => 'STP', 'SA' => 'SAU', 'SN' => 'SEN', 'RS' => 'SRB', 'SC' => 'SYC', 'SL' => 'SLE', 'SG' => 'SGP', 'SK' => 'SVK', 'SI' => 'SVN', 'SB' => 'SLB', 'SO' => 'SOM', 'ZA' => 'ZAF', 'ES' => 'ESP', 'LK' => 'LKA', 'SD' => 'SDN', 'SR' => 'SUR', 'SZ' => 'SWZ', 'SE' => 'SWE', 'CH' => 'CHE', 'SY' => 'SYR', 'TJ' => 'TJK', 'TZ' => 'TZA', 'TH' => 'THA', 'TL' => 'TLS', 'TG' => 'TGO', 'TO' => 'TON', 'TT' => 'TTO', 'TN' => 'TUN', 'TR' => 'TUR', 'TM' => 'TKM', 'TV' => 'TUV', 'UG' => 'UGA', 'UA' => 'UKR', 'AE' => 'ARE', 'GB' => 'GBR', 'US' => 'USA', 'UY' => 'URY', 'UZ' => 'UZB', 'VU' => 'VUT', 'VA' => 'VAT', 'VE' => 'VEN', 'VN' => 'VNM', 'YE' => 'YEM', 'ZM' => 'ZMB', 'ZW' => 'ZWE', 'TW' => 'TWN', 'CX' => 'CXR', 'CC' => 'CCK', 'HM' => 'HMD', 'NF' => 'NFK', 'NC' => 'NCL', 'PF' => 'PYF', 'YT' => 'MYT', 'GP' => 'GLP', 'PM' => 'SPM', 'WF' => 'WLF', 'TF' => 'ATF', 'BV' => 'BVT', 'CK' => 'COK', 'NU' => 'NIU', 'TK' => 'TKL', 'GG' => 'GGY', 'IM' => 'IMN', 'JE' => 'JEY', 'AI' => 'AIA', 'BM' => 'BMU', 'IO' => 'IOT', 'VG' => 'VGB', 'KY' => 'CYM', 'FK' => 'FLK', 'GI' => 'GIB', 'MS' => 'MSR', 'PN' => 'PCN', 'SH' => 'SHN', 'GS' => 'SGS', 'TC' => 'TCA', 'MP' => 'MNP', 'PR' => 'PRI', 'AS' => 'ASM', 'UM' => 'UMI', 'GU' => 'GUM', 'VI' => 'VIR', 'HK' => 'HKG', 'MO' => 'MAC', 'FO' => 'FRO', 'GL' => 'GRL', 'GF' => 'GUF', 'MQ' => 'MTQ', 'RE' => 'REU', 'AX' => 'ALA', 'AW' => 'ABW', 'AN' => 'ANT', 'SJ' => 'SJM', 'AC' => 'ASC', 'TA' => 'TAA', 'AQ' => 'ATA', 'CW' => 'CUW', ]; /** @var array ISO 3166-alpha2 => ISO 3166-numeric */ static public $numeric = [ 'AF' => '004', 'AX' => '248', 'AL' => '008', 'DZ' => '012', 'AS' => '016', 'AD' => '020', 'AO' => '024', 'AI' => '660', 'AQ' => '010', 'AG' => '028', 'AR' => '032', 'AM' => '051', 'AW' => '533', 'AU' => '036', 'AT' => '040', 'AZ' => '031', 'BS' => '044', 'BH' => '048', 'BD' => '050', 'BB' => '052', 'BY' => '112', 'BE' => '056', 'BZ' => '084', 'BJ' => '204', 'BM' => '060', 'BT' => '064', 'BO' => '068', 'BQ' => '535', 'BA' => '070', 'BW' => '072', 'BV' => '074', 'BR' => '076', 'IO' => '086', 'BN' => '096', 'BG' => '100', 'BF' => '854', 'BI' => '108', 'KH' => '116', 'CM' => '120', 'CA' => '124', 'CV' => '132', 'KY' => '136', 'CF' => '140', 'TD' => '148', 'CL' => '152', 'CN' => '156', 'CX' => '162', 'CC' => '166', 'CO' => '170', 'KM' => '174', 'CG' => '178', 'CD' => '180', 'CK' => '184', 'CR' => '188', 'CI' => '384', 'HR' => '191', 'CU' => '192', 'CW' => '531', 'CY' => '196', 'CZ' => '203', 'DK' => '208', 'DJ' => '262', 'DM' => '212', 'DO' => '214', 'EC' => '218', 'EG' => '818', 'SV' => '222', 'GQ' => '226', 'ER' => '232', 'EE' => '233', 'ET' => '231', 'FK' => '238', 'FO' => '234', 'FJ' => '242', 'FI' => '246', 'FR' => '250', 'GF' => '254', 'PF' => '258', 'TF' => '260', 'GA' => '266', 'GM' => '270', 'GE' => '268', 'DE' => '276', 'GH' => '288', 'GI' => '292', 'GR' => '300', 'GL' => '304', 'GD' => '308', 'GP' => '312', 'GU' => '316', 'GT' => '320', 'GG' => '831', 'GN' => '324', 'GW' => '624', 'GY' => '328', 'HT' => '332', 'HM' => '334', 'VA' => '336', 'HN' => '340', 'HK' => '344', 'HU' => '348', 'IS' => '352', 'IN' => '356', 'ID' => '360', 'IR' => '364', 'IQ' => '368', 'IE' => '372', 'IM' => '833', 'IL' => '376', 'IT' => '380', 'JM' => '388', 'JP' => '392', 'JE' => '832', 'JO' => '400', 'KZ' => '398', 'KE' => '404', 'KI' => '296', 'KP' => '408', 'KR' => '410', 'KW' => '414', 'KG' => '417', 'LA' => '418', 'LV' => '428', 'LB' => '422', 'LS' => '426', 'LR' => '430', 'LY' => '434', 'LI' => '438', 'LT' => '440', 'LU' => '442', 'MO' => '446', 'MK' => '807', 'MG' => '450', 'MW' => '454', 'MY' => '458', 'MV' => '462', 'ML' => '466', 'MT' => '470', 'MH' => '584', 'MQ' => '474', 'MR' => '478', 'MU' => '480', 'YT' => '175', 'MX' => '484', 'FM' => '583', 'MD' => '498', 'MC' => '492', 'MN' => '496', 'ME' => '499', 'MS' => '500', 'MA' => '504', 'MZ' => '508', 'MM' => '104', 'NA' => '516', 'NR' => '520', 'NP' => '524', 'NL' => '528', 'NC' => '540', 'NZ' => '554', 'NI' => '558', 'NE' => '562', 'NG' => '566', 'NU' => '570', 'NF' => '574', 'MP' => '580', 'NO' => '578', 'OM' => '512', 'PK' => '586', 'PW' => '585', 'PS' => '275', 'PA' => '591', 'PG' => '598', 'PY' => '600', 'PE' => '604', 'PH' => '608', 'PN' => '612', 'PL' => '616', 'PT' => '620', 'PR' => '630', 'QA' => '634', 'RE' => '638', 'RO' => '642', 'RU' => '643', 'RW' => '646', 'BL' => '652', 'SH' => '654', 'KN' => '659', 'LC' => '662', 'MF' => '663', 'PM' => '666', 'VC' => '670', 'WS' => '882', 'SM' => '674', 'ST' => '678', 'SA' => '682', 'SN' => '686', 'RS' => '688', 'SC' => '690', 'SL' => '694', 'SG' => '702', 'SX' => '534', 'SK' => '703', 'SI' => '705', 'SB' => '090', 'SO' => '706', 'ZA' => '710', 'GS' => '239', 'SS' => '728', 'ES' => '724', 'LK' => '144', 'SD' => '729', 'SR' => '740', 'SJ' => '744', 'SZ' => '748', 'SE' => '752', 'CH' => '756', 'SY' => '760', 'TW' => '158', 'TJ' => '762', 'TZ' => '834', 'TH' => '764', 'TL' => '626', 'TG' => '768', 'TK' => '772', 'TO' => '776', 'TT' => '780', 'TN' => '788', 'TR' => '792', 'TM' => '795', 'TC' => '796', 'TV' => '798', 'UG' => '800', 'UA' => '804', 'AE' => '784', 'GB' => '826', 'US' => '840', 'UM' => '581', 'UY' => '858', 'UZ' => '860', 'VU' => '548', 'VE' => '862', 'VN' => '704', 'VG' => '092', 'VI' => '850', 'WF' => '876', 'EH' => '732', 'YE' => '887', 'ZM' => '894', 'ZW' => '716', ]; /** @var array ISO 3166-alpha2 => phone calling code(s) */ static public $calling_codes = [ 'BD' => '+880', 'BE' => '+32', 'BF' => '+226', 'BG' => '+359', 'BA' => '+387', 'BB' => '+1246', 'WF' => '+681', 'BL' => '+590', 'BM' => '+1441', 'BN' => '+673', 'BO' => '+591', 'BH' => '+973', 'BI' => '+257', 'BJ' => '+229', 'BT' => '+975', 'JM' => '+1876', 'BV' => '', 'BW' => '+267', 'WS' => '+685', 'BQ' => '+599', 'BR' => '+55', 'BS' => '+1242', 'JE' => '+441534', 'BY' => '+375', 'BZ' => '+501', 'RU' => '+7', 'RW' => '+250', 'RS' => '+381', 'TL' => '+670', 'RE' => '+262', 'TM' => '+993', 'TJ' => '+992', 'RO' => '+40', 'TK' => '+690', 'GW' => '+245', 'GU' => '+1671', 'GT' => '+502', 'GS' => '', 'GR' => '+30', 'GQ' => '+240', 'GP' => '+590', 'JP' => '+81', 'GY' => '+592', 'GG' => '+441481', 'GF' => '+594', 'GE' => '+995', 'GD' => '+1473', 'GB' => '+44', 'GA' => '+241', 'SV' => '+503', 'GN' => '+224', 'GM' => '+220', 'GL' => '+299', 'GI' => '+350', 'GH' => '+233', 'OM' => '+968', 'TN' => '+216', 'JO' => '+962', 'HR' => '+385', 'HT' => '+509', 'HU' => '+36', 'HK' => '+852', 'HN' => '+504', 'HM' => '', 'VE' => '+58', 'PR' => [ '+1787', '+1939', ], 'PS' => '+970', 'PW' => '+680', 'PT' => '+351', 'SJ' => '+47', 'PY' => '+595', 'IQ' => '+964', 'PA' => '+507', 'PF' => '+689', 'PG' => '+675', 'PE' => '+51', 'PK' => '+92', 'PH' => '+63', 'PN' => '+870', 'PL' => '+48', 'PM' => '+508', 'ZM' => '+260', 'EH' => '+212', 'EE' => '+372', 'EG' => '+20', 'ZA' => '+27', 'EC' => '+593', 'IT' => '+39', 'VN' => '+84', 'SB' => '+677', 'ET' => '+251', 'SO' => '+252', 'ZW' => '+263', 'SA' => '+966', 'ES' => '+34', 'ER' => '+291', 'ME' => '+382', 'MD' => '+373', 'MG' => '+261', 'MF' => '+590', 'MA' => '+212', 'MC' => '+377', 'UZ' => '+998', 'MM' => '+95', 'ML' => '+223', 'MO' => '+853', 'MN' => '+976', 'MH' => '+692', 'MK' => '+389', 'MU' => '+230', 'MT' => '+356', 'MW' => '+265', 'MV' => '+960', 'MQ' => '+596', 'MP' => '+1670', 'MS' => '+1664', 'MR' => '+222', 'IM' => '+441624', 'UG' => '+256', 'TZ' => '+255', 'MY' => '+60', 'MX' => '+52', 'IL' => '+972', 'FR' => '+33', 'IO' => '+246', 'SH' => '+290', 'FI' => '+358', 'FJ' => '+679', 'FK' => '+500', 'FM' => '+691', 'FO' => '+298', 'NI' => '+505', 'NL' => '+31', 'NO' => '+47', 'NA' => '+264', 'VU' => '+678', 'NC' => '+687', 'NE' => '+227', 'NF' => '+672', 'NG' => '+234', 'NZ' => '+64', 'NP' => '+977', 'NR' => '+674', 'NU' => '+683', 'CK' => '+682', 'XK' => '', 'CI' => '+225', 'CH' => '+41', 'CO' => '+57', 'CN' => '+86', 'CM' => '+237', 'CL' => '+56', 'CC' => '+61', 'CA' => '+1', 'CG' => '+242', 'CF' => '+236', 'CD' => '+243', 'CZ' => '+420', 'CY' => '+357', 'CX' => '+61', 'CR' => '+506', 'CW' => '+599', 'CV' => '+238', 'CU' => '+53', 'SZ' => '+268', 'SY' => '+963', 'SX' => '+599', 'KG' => '+996', 'KE' => '+254', 'SS' => '+211', 'SR' => '+597', 'KI' => '+686', 'KH' => '+855', 'KN' => '+1869', 'KM' => '+269', 'ST' => '+239', 'SK' => '+421', 'KR' => '+82', 'SI' => '+386', 'KP' => '+850', 'KW' => '+965', 'SN' => '+221', 'SM' => '+378', 'SL' => '+232', 'SC' => '+248', 'KZ' => '+7', 'KY' => '+1345', 'SG' => '+65', 'SE' => '+46', 'SD' => '+249', 'DO' => [ '+1809', '+1829', '+1849', ], 'DM' => '+1767', 'DJ' => '+253', 'DK' => '+45', 'VG' => '+1284', 'DE' => '+49', 'YE' => '+967', 'DZ' => '+213', 'US' => '+1', 'UY' => '+598', 'YT' => '+262', 'UM' => '+1', 'LB' => '+961', 'LC' => '+1758', 'LA' => '+856', 'TV' => '+688', 'TW' => '+886', 'TT' => '+1868', 'TR' => '+90', 'LK' => '+94', 'LI' => '+423', 'LV' => '+371', 'TO' => '+676', 'LT' => '+370', 'LU' => '+352', 'LR' => '+231', 'LS' => '+266', 'TH' => '+66', 'TF' => '', 'TG' => '+228', 'TD' => '+235', 'TC' => '+1649', 'LY' => '+218', 'VA' => '+379', 'VC' => '+1784', 'AE' => '+971', 'AD' => '+376', 'AG' => '+1268', 'AF' => '+93', 'AI' => '+1264', 'VI' => '+1340', 'IS' => '+354', 'IR' => '+98', 'AM' => '+374', 'AL' => '+355', 'AO' => '+244', 'AQ' => '', 'AS' => '+1684', 'AR' => '+54', 'AU' => '+61', 'AT' => '+43', 'AW' => '+297', 'IN' => '+91', 'AX' => '+35818', 'AZ' => '+994', 'IE' => '+353', 'ID' => '+62', 'UA' => '+380', 'QA' => '+974', 'MZ' => '+258', ]; /** @var array flipped calling codes */ protected static $flipped_calling_codes; /** * Convert a 2-character country code into its 3-character equivalent, or * vice-versa, e.g. * * 1) given USA, returns US * 2) given US, returns USA * * @since 5.4.3 * * @param string $code ISO-3166-alpha-2 or ISO-3166-alpha-3 country code * @return string country code */ public static function convert_alpha_country_code( $code ) { $countries = 3 === strlen( $code ) ? array_flip( self::$alpha3 ) : self::$alpha3; return isset( $countries[ $code ] ) ? $countries[ $code ] : $code; } /** * Converts an ISO 3166-alpha2 country code to an ISO 3166-alpha3 country code. * * @since 5.4.3 * * @param string $alpha2_code ISO 3166-alpha2 country code * @return string ISO 3166-alpha3 country code */ public static function alpha2_to_alpha3( $alpha2_code ) { return isset( self::$alpha3[ $alpha2_code ] ) ? self::$alpha3[ $alpha2_code ] : ''; } /** * Converts an ISO 3166-alpha2 country code to an ISO 3166-numeric country code. * * @since 5.4.3 * * @param string $alpha2_code ISO 3166-alpha2 country code * @return string ISO 3166-numeric country code */ public static function alpha2_to_numeric( $alpha2_code ) { return isset( self::$numeric[ $alpha2_code ] ) ? self::$numeric[ $alpha2_code ] : ''; } /** * Converts an ISO 3166-alpha2 country code to a calling code. * * This conversion is available in WC 3.6+ so we'll call out to that when available. * * @since 5.4.3 * * @param string $alpha2_code ISO 3166-alpha2 country code * @return string calling code */ public static function alpha2_to_calling_code( $alpha2_code ) { // check not only for the right version, but if the helper is loaded & available if ( SV_WC_Plugin_Compatibility::is_wc_version_gte( '3.6.0' ) && WC() && isset( WC()->countries ) && is_callable( [ WC()->countries, 'get_country_calling_code' ] ) ) { $calling_code = WC()->countries->get_country_calling_code( $alpha2_code ); } else { $calling_code = isset( self::$calling_codes[ $alpha2_code ] ) ? self::$calling_codes[ $alpha2_code ] : ''; // we can't really know _which_ code is to be used, so use the first $calling_code = is_array( $calling_code ) ? $calling_code[0] : $calling_code; } return $calling_code; } /** * Converts an ISO 3166-alpha3 country code to an ISO 3166-alpha2 country code. * * @since 5.4.3 * * @param string $alpha3_code ISO 3166-alpha3 country code * @return string ISO 3166-alpha2 country code */ public static function alpha3_to_alpha2( $alpha3_code ) { $countries = array_flip( self::$alpha3 ); return isset( $countries[ $alpha3_code ] ) ? $countries[ $alpha3_code ] : ''; } /** * Converts an ISO 3166-alpha3 country code to an ISO 3166-numeric country code. * * @since 5.4.3 * * @param string $alpha3_code ISO 3166-alpha3 country code * @return string ISO 3166-numeric country code */ public static function alpha3_to_numeric( $alpha3_code ) { return self::alpha2_to_numeric( self::alpha3_to_alpha2( $alpha3_code ) ); } /** * Converts an ISO 3166-alpha3 country code to a calling code. * * @since 5.4.3 * * @param string $alpha3_code ISO 3166-alpha3 country code * @return string calling code */ public static function alpha3_to_calling_code( $alpha3_code ) { return self::alpha2_to_calling_code( self::alpha3_to_alpha2( $alpha3_code ) ); } /** * Converts an ISO 3166-numeric country code to an ISO 3166-alpha2 code. * * @since 5.4.3 * * @param string $numeric ISO 3166-numeric country code * @return string ISO 3166-alpha2 country code */ public static function numeric_to_alpha2( $numeric ) { $codes = array_flip( self::$numeric ); return isset( $codes[ $numeric ] ) ? $codes[ $numeric ] : ''; } /** * Converts an ISO 3166-numeric country code to an ISO 3166-alpha3 code. * * @since 5.4.3 * * @param string $numeric ISO 3166-numeric country code * @return string ISO 3166-alpha3 country code */ public static function numeric_to_alpha3( $numeric ) { return self::alpha2_to_alpha3( self::numeric_to_alpha2( $numeric ) ); } /** * Converts an ISO 3166-numeric country code to a calling code. * * @since 5.4.3 * * @param string $numeric ISO 3166-numeric country code * @return string calling code */ public static function numeric_to_calling_code( $numeric ) { return self::alpha2_to_calling_code( self::numeric_to_alpha2( $numeric ) ); } /** * Converts a country calling code to an ISO 3166-alpha2 code. * * @since 5.4.3 * * @param string $calling_code country calling code (includes leading '+') * @return string ISO 3166-alpha2 code */ public static function calling_code_to_alpha2( $calling_code ) { $flipped_calling_codes = self::get_flipped_calling_codes(); return isset( $flipped_calling_codes[ $calling_code ] ) ? $flipped_calling_codes[ $calling_code ] : ''; } /** * Converts a country calling code to an ISO 3166-alpha3 code. * * @since 5.4.3 * * @param string $calling_code country calling code (includes leading '+') * @return string ISO 3166-alpha3 code */ public static function calling_code_to_alpha3( $calling_code ) { return self::alpha2_to_alpha3( self::calling_code_to_alpha2( $calling_code ) ); } /** * Converts a country calling code to an ISO 3166-numeric code. * * @since 5.4.3 * * @param string $calling_code country calling code (includes leading '+') * @return string ISO 3166-numeric code */ public static function calling_code_to_numeric( $calling_code ) { return self::alpha2_to_numeric( self::calling_code_to_alpha2( $calling_code ) ); } /** * Gets the flipped version of the calling codes array. * * Since array_flip will fail on the calling codes array due to * having some arrays as values, this custom function is necessary. * * @since 5.4.3 * * @return array */ public static function get_flipped_calling_codes() { if ( null === self::$flipped_calling_codes ) { $flipped_calling_codes = []; foreach ( self::$calling_codes as $alpha2 => $calling_code ) { if ( is_array( $calling_code ) ) { foreach ( $calling_code as $sub_code ) { $flipped_calling_codes[ $sub_code ] = $alpha2; } } else { $flipped_calling_codes[ $calling_code ] = $alpha2; } } self::$flipped_calling_codes = $flipped_calling_codes; } return self::$flipped_calling_codes; } } endif;