File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/includes/Phone_Numbers.php
<?php
// phpcs:ignoreFile
namespace AutomateWoo;
/**
* @class Phone_Numbers
* @since 2.8.2
*/
class Phone_Numbers {
/**
* Parses a phone number into E.164 format.
*
* Number will be converted to an international number based on the $country param unless
* the number is already in an international format.
*
* @param string $original_number
* @param string $country Defaults to base country if empty
*
* @return string
*/
static function parse( $original_number, $country = '' ) {
if ( ! $country ) {
$country = WC()->countries->get_base_country();
}
$number = preg_replace( '/[^+0-9]+/', '', $original_number );
if ( ! self::is_international( $number, $country ) ) {
$number = ltrim( $number, '0' ); // remove leading zero
$area_code = self::get_international_calling_code( $country );
if ( $area_code ) {
$number = $area_code . $number;
}
}
if ( ! strstr( $number, '+' ) ) {
$number = '+' . $number;
}
return apply_filters( 'automatewoo_parse_phone_number', $number, $country, $original_number );
}
/**
* Check if number already contains an international calling code
* Number must be have spaces etc removed
*
* @param string $number
* @param string $country
* @return bool
*/
static function is_international( $number, $country ) {
if ( strstr( $number, '+' ) ) {
return true;
}
$number = ltrim( $number, '0' );
if ( strlen( $number ) > self::get_nsn( $country ) ) {
return true;
}
return false;
}
/**
* @param $country
* @return string
*/
static function get_international_calling_code( $country ) {
$area_codes = [
'AC' => '247',
'AD' => '376',
'AE' => '971',
'AF' => '93',
'AG' => '1',
'AI' => '1',
'AL' => '355',
'AM' => '374',
'AO' => '244',
'AQ' => '672',
'AR' => '54',
'AS' => '1',
'AT' => '43',
'AU' => '61',
'AW' => '297',
'AX' => '358',
'AZ' => '994',
'BA' => '387',
'BB' => '1',
'BD' => '880',
'BE' => '32',
'BF' => '226',
'BG' => '359',
'BH' => '973',
'BI' => '257',
'BJ' => '229',
'BL' => '590',
'BM' => '1',
'BN' => '673',
'BO' => '591',
'BQ' => '599',
'BR' => '55',
'BS' => '1',
'BT' => '975',
'BW' => '267',
'BY' => '375',
'BZ' => '501',
'CA' => '1',
'CC' => '61',
'CD' => '243',
'CF' => '236',
'CG' => '242',
'CH' => '41',
'CI' => '225',
'CK' => '682',
'CL' => '56',
'CM' => '237',
'CN' => '86',
'CO' => '57',
'CR' => '506',
'CU' => '53',
'CV' => '238',
'CW' => '599',
'CX' => '61',
'CY' => '357',
'CZ' => '420',
'DE' => '49',
'DJ' => '253',
'DK' => '45',
'DM' => '1',
'DO' => '1',
'DZ' => '213',
'EC' => '593',
'EE' => '372',
'EG' => '20',
'EH' => '212',
'ER' => '291',
'ES' => '34',
'ET' => '251',
'EU' => '388',
'FI' => '358',
'FJ' => '679',
'FK' => '500',
'FM' => '691',
'FO' => '298',
'FR' => '33',
'GA' => '241',
'GB' => '44',
'GD' => '1',
'GE' => '995',
'GF' => '594',
'GG' => '44',
'GH' => '233',
'GI' => '350',
'GL' => '299',
'GM' => '220',
'GN' => '224',
'GP' => '590',
'GQ' => '240',
'GR' => '30',
'GT' => '502',
'GU' => '1',
'GW' => '245',
'GY' => '592',
'HK' => '852',
'HN' => '504',
'HR' => '385',
'HT' => '509',
'HU' => '36',
'ID' => '62',
'IE' => '353',
'IL' => '972',
'IM' => '44',
'IN' => '91',
'IO' => '246',
'IQ' => '964',
'IR' => '98',
'IS' => '354',
'IT' => '39',
'JE' => '44',
'JM' => '1',
'JO' => '962',
'JP' => '81',
'KE' => '254',
'KG' => '996',
'KH' => '855',
'KI' => '686',
'KM' => '269',
'KN' => '1',
'KP' => '850',
'KR' => '82',
'KW' => '965',
'KY' => '1',
'KZ' => '7',
'LA' => '856',
'LB' => '961',
'LC' => '1',
'LI' => '423',
'LK' => '94',
'LR' => '231',
'LS' => '266',
'LT' => '370',
'LU' => '352',
'LV' => '371',
'LY' => '218',
'MA' => '212',
'MC' => '377',
'MD' => '373',
'ME' => '382',
'MF' => '590',
'MG' => '261',
'MH' => '692',
'MK' => '389',
'ML' => '223',
'MM' => '95',
'MN' => '976',
'MO' => '853',
'MP' => '1',
'MQ' => '596',
'MR' => '222',
'MS' => '1',
'MT' => '356',
'MU' => '230',
'MV' => '960',
'MW' => '265',
'MX' => '52',
'MY' => '60',
'MZ' => '258',
'NA' => '264',
'NC' => '687',
'NE' => '227',
'NF' => '672',
'NG' => '234',
'NI' => '505',
'NL' => '31',
'NO' => '47',
'NP' => '977',
'NR' => '674',
'NU' => '683',
'NZ' => '64',
'OM' => '968',
'PA' => '507',
'PE' => '51',
'PF' => '689',
'PG' => '675',
'PH' => '63',
'PK' => '92',
'PL' => '48',
'PM' => '508',
'PR' => '1',
'PS' => '970',
'PT' => '351',
'PW' => '680',
'PY' => '595',
'QA' => '974',
'QN' => '374',
'QS' => '252',
'QY' => '90',
'RE' => '262',
'RO' => '40',
'RS' => '381',
'RU' => '7',
'RW' => '250',
'SA' => '966',
'SB' => '677',
'SC' => '248',
'SD' => '249',
'SE' => '46',
'SG' => '65',
'SH' => '290',
'SI' => '386',
'SJ' => '47',
'SK' => '421',
'SL' => '232',
'SM' => '378',
'SN' => '221',
'SO' => '252',
'SR' => '597',
'SS' => '211',
'ST' => '239',
'SV' => '503',
'SX' => '1',
'SY' => '963',
'SZ' => '268',
'TA' => '290',
'TC' => '1',
'TD' => '235',
'TG' => '228',
'TH' => '66',
'TJ' => '992',
'TK' => '690',
'TL' => '670',
'TM' => '993',
'TN' => '216',
'TO' => '676',
'TR' => '90',
'TT' => '1',
'TV' => '688',
'TW' => '886',
'TZ' => '255',
'UA' => '380',
'UG' => '256',
'UK' => '44',
'US' => '1',
'UY' => '598',
'UZ' => '998',
'VA' => '39',
'VC' => '1',
'VE' => '58',
'VG' => '1',
'VI' => '1',
'VN' => '84',
'VU' => '678',
'WF' => '681',
'WS' => '685',
'XC' => '991',
'XD' => '888',
'XG' => '881',
'XL' => '883',
'XN' => '870',
'XP' => '878',
'XR' => '979',
'XS' => '808',
'XT' => '800',
'XV' => '882',
'YE' => '967',
'YT' => '262',
'ZA' => '27',
'ZM' => '260',
'ZW' => '263'
];
return isset( $area_codes[$country] ) ? $area_codes[$country] : '';
}
/**
* National Significant Number, i.e. the number of digits after the country code excluding any trunk code or access code.
* If the country has more than one NSN use the higher e.g. Austria can be 10 or 11
*
* @param $country
* @return int
*/
static function get_nsn( $country ) {
$nsn = [
'AU' => 9,
'AT' => 11,
'BE' => 9,
'BH' => 8,
'BR' => 11,
'BY' => 9,
'DZ' => 9,
'IE' => 9,
'IL' => 9,
];
return isset( $nsn[$country] ) ? $nsn[$country] : 10;
}
/**
* @deprecated use Clean::comma_delimited_string()
* @param $list
* @return array
*/
static function parse_list( $list ) {
wc_deprecated_function( __METHOD__, '5.2.0', 'Clean::comma_delimited_string' );
if ( ! is_array( $list ) ) {
$list = explode(',', $list );
}
return array_filter( array_map( 'trim', $list ) );
}
}