| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 | 
							- <?php
 
- function 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;
 
- }
 
 
  |