| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 | <?phpfunction phone_int_metadata() {  // These strings are translated using t() on output.  return array(    'error' => '"%value" is not a valid Italian phone number<br>Italian phone numbers should only ...',  );}/** * Verifies that $phonenumber is a valid international phone number as per ITU or, * if a default country code is specified, a valid subscriber number. * * @see http://www.itu.int/rec/T-REC-E.123/en * * @param $phonenumber *   International phone number to validate * @return *   TRUE if valid, FALSE if otherwise. */function valid_int_phone_number($phonenumber) {  $phonenumber = trim($phonenumber);  if ($phonenumber === '') {    return FALSE;  }  $phonenumber = _normalize_country_code($phonenumber);  $base_phonenumber = str_replace(array('.', '(', ')', '[', ']', '-', '+', ' '), '', $phonenumber);  if (!isset($field['phone_int_max_length'])) {    $field['phone_int_max_length'] = 15;  }  if (strlen($base_phonenumber) > $field['phone_int_max_length']) {    $error = t('Invalid international phone number: Phone number is too long; international phone numbers are limited to 15 digits.');    return FALSE;  }  // Check if digits are used in the base_phonenumber  if (!ctype_digit($base_phonenumber)) {      $error = t('Invalid international phone number: Phone number contains invalid characters; only allowed characters are numbers and punctuation.');    return FALSE;  }  // Extract country code and see if it's correct:  preg_match('/^\+(\d+)/', $phonenumber, $matches);  $cc = $matches[1];  if (strlen($cc) > 3) {    $error = array(      t('Invalid international phone number: Country code "+%cc" is too long; valid country codes are three digits or less.'),      array('%cc' => $cc)    );    return FALSE;  }    //drupal_set_message('langue cc = ' . $cc, 'error');  // TODO: Check if parentheses/brackets add up.  // TODO: Validate the number against the country rules.  // For now, validate only against a limited number of countries.  $countrycode = phone_country_code_convert($cc);  //drupal_set_message('langue countrycode = ' . $countrycode, 'error');  if (!empty($countrycode)) {      $valid_phone_function = 'valid_'. $countrycode . '_phone_number';      module_load_include('inc', 'phone', 'phone.'. $countrycode);      if (function_exists($valid_phone_function)) {        return $valid_phone_function($phonenumber, $field);      }      else {      	return TRUE;       }  }    return FALSE;}/** * Formats $phonenumber into the standard representation of international * numbers as per E.123. * * @param $phonenumber *   International phone number to format * @return *   Formatted international phone number */function format_int_phone_number($phonenumber, $field = array()) {  $phonenumber = trim($phonenumber);  if ($phonenumber === '') {    return '';  }  $phonenumber = _normalize_country_code($phonenumber, $field);  $bits = preg_split('/[.()\[\]\- ]/', $phonenumber, -1, PREG_SPLIT_NO_EMPTY);  // $bits[0] is the country code WITH a plus sign.  if (isset($bits[1])) {    // This is the first non-CC segment, so it could have the NDN.    switch ($bits[1][0]) {      case 0:        $bits[1] = substr($bits[1], 1);        break;    }    switch ($bits[1]) {      case 0:      case 7:      case 8:        array_splice($bits, 1, 1);        break;    }  }  return implode(' ', $bits);}/** * Adds a country code to a phone number if necessary. * * @param $phonenumber *   International or local phone number to format * @return *   International phone number with country code */function _normalize_country_code($phonenumber, $field = array()) {  if ($phonenumber[0] !== '+') {    $cc = isset($field['phone_default_country_code']) ? $field['phone_default_country_code'] : '1';    return "+$cc $phonenumber";  }  return $phonenumber;}/** * Returns the country code in the desired format. * * @todo Fill in the rest of the country code values. * * @param $code *   Country code to convert (either numeric or 2-letter abbreviation) * @param $input_type *   Type of country code to convert (either numeric or 2-letter abbreviation) * @return *   Converted country code */function phone_country_code_convert($code, $input_type = 'digits') {   static $codes;   if (!$codes) {    $codes = array(          '1' => 'ca',      '1' => 'us',      '7' => 'ru',      '20' => 'eg',      '27' => 'za',      '30' => 'gr',      '31' => 'nl',      '32' => 'be',      '33' => 'fr',      '34' => 'es',      '36' => 'hu',      '39' => 'it',      '39' => 'va',      '40' => 'ro',      '41' => 'ch',      '43' => 'at',      '44' => 'gb',      '45' => 'dk',      '46' => 'se',      '47' => 'no',      '48' => 'pl',      '49' => 'de',       '51' => 'pe',      '52' => 'mx',      '53' => 'cu',      '54' => 'ar',      '55' => 'br',      '56' => 'cl',      '57' => 'co',      '58' => 've',          '60' => 'my',      '61' => 'au',      '61' => 'cc',      '61' => 'cx',      '62' => 'id',      '63' => 'ph',      '64' => 'nz',      '65' => 'sg',      '66' => 'th',      '81' => 'jp',      '82' => 'kr',      '84' => 'vn',      '86' => 'cn',      '90' => 'tr',      '91' => 'in',      '92' => 'pk',      '93' => 'af',      '94' => 'lk',      '95' => 'mm',      '98' => 'ir',       '212' => 'ma',      '213' => 'dz',      '216' => 'tn',      '218' => 'ly',      '220' => 'gm',      '221' => 'sn',      '222' => 'mr',      '223' => 'ml',      '224' => 'gn',      '225' => 'ci',      '226' => 'bf',      '227' => 'ne',      '228' => 'tg',      '229' => 'bj',      '230' => 'mu',      '231' => 'lr',      '232' => 'sl',      '233' => 'gh',      '234' => 'ng',      '235' => 'td',      '236' => 'cf',      '237' => 'cm',      '238' => 'cv',      '239' => 'st',      '240' => 'gq',      '241' => 'ga',      '242' => 'cg',      '243' => 'cd',      '244' => 'ao',      '245' => 'gw',      '246' => 'io',      '248' => 'sc',      '249' => 'sd',      '250' => 'rw',      '251' => 'et',      '252' => 'so',      '253' => 'dj',      '254' => 'ke',      '255' => 'tz',      '256' => 'ug',      '257' => 'bi',      '258' => 'mz',      '260' => 'zm',      '261' => 'mg',      '263' => 'zw',      '264' => 'na',      '265' => 'mw',      '266' => 'ls',      '267' => 'bw',      '268' => 'sz',      '269' => 'km',      '269' => 'yt',      '290' => 'sh',      '291' => 'er',      '297' => 'aw',      '298' => 'fo',      '299' => 'gl',      '350' => 'gi',      '351' => 'pt',      '352' => 'lu',      '353' => 'ie',      '354' => 'is',      '355' => 'al',      '356' => 'mt',      '357' => 'cy',      '358' => 'fi',      '359' => 'bg',      '370' => 'lt',      '371' => 'lv',      '372' => 'ee',      '373' => 'md',      '374' => 'am',      '375' => 'by',      '376' => 'ad',      '377' => 'mc',      '378' => 'sm',      '380' => 'ua',      '381' => 'rs',      '382' => 'me',      '385' => 'hr',      '386' => 'si',      '387' => 'ba',      '389' => 'mk',         '420' => 'cz',      '421' => 'sk',      '423' => 'li',      '500' => 'fk',      '501' => 'bz',      '502' => 'gt',      '503' => 'sv',      '504' => 'hn',      '505' => 'ni',      '506' => 'cr',      '507' => 'pa',      '508' => 'pm',      '509' => 'ht',      '590' => 'gp',      '591' => 'bo',      '592' => 'gy',      '593' => 'ec',      '594' => 'gf',      '595' => 'py',      '596' => 'mq',      '597' => 'sr',      '598' => 'uy',      '599' => 'an',      '670' => 'tp',      '672' => 'nf',      '673' => 'bn',      '674' => 'nr',      '675' => 'pg',      '676' => 'to',      '677' => 'sb',      '678' => 'vu',      '679' => 'fj',      '680' => 'pw',      '681' => 'wf',      '682' => 'ck',      '683' => 'nu',      '686' => 'ki',      '687' => 'nc',      '688' => 'tv',      '689' => 'pf',      '690' => 'tk',      '691' => 'fm',      '692' => 'mh',       '850' => 'kp',      '852' => 'hk',      '853' => 'mo',      '855' => 'kh',      '856' => 'la',      '880' => 'bd',      '886' => 'tw',       '960' => 'mv',      '961' => 'lb',      '962' => 'jo',      '963' => 'sy',      '964' => 'iq',      '965' => 'kw',      '966' => 'sa',      '967' => 'ye',      '968' => 'om',      '970' => 'ps',      '971' => 'ae',      '972' => 'il',      '973' => 'bh',      '974' => 'qa',      '975' => 'bt',      '976' => 'mn',      '977' => 'np',      '992' => 'tj',      '993' => 'tm',      '994' => 'az',      '995' => 'ge',      '996' => 'kg',      '998' => 'uz',          );   }  if ($input_type == 'alpha') {    $codes = array_flip($codes);  }  return isset($codes[$code]) ? $codes[$code] : FALSE;}
 |