5a6,20 > /*return the two-letter codes of installed country modules from the directory > It could be possible to first cache the array of codes in a module-level variable > Ahmad Gharbeia, October 2009 > */ > function get_country_modules() { > $d = drupal_get_path('module', 'phone'); > foreach(array_diff(scandir($d), array('.', '..')) as $m) { > if (is_file($d . '/' . $m) && preg_match('/.*\.inc$/', $m)) { > $cc = substr($m, 6, -4); //phone.(eg).inc > $modules[$cc] = $cc . '_phone'; > } > } > return $modules; > } > 30,45c45,54 < return array( < 'fr_phone' => array('label' => t('French Phone Numbers')), < 'it_phone' => array('label' => t('Italian Phone Numbers')), < 'ca_phone' => array('label' => t('US & Canadian Phone Numbers')), < 'cr_phone' => array('label' => t('Costa Rican Phone Numbers')), < 'uk_phone' => array('label' => t('British (UK) Phone Numbers')), < 'ru_phone' => array('label' => t('Russian Phone Numbers')), < 'es_phone' => array('label' => t('Spanish Phone Numbers')), < 'au_phone' => array('label' => t('Australian Phone Numbers')), < 'cs_phone' => array('label' => t('Czech Phone Numbers')), < 'hu_phone' => array('label' => t('Hungarian Phone Numbers')), < 'nl_phone' => array('label' => t('Dutch Phone Numbers')), < 'nz_phone' => array('label' => t('New Zealand Phone Numbers')), < 'br_phone' => array('label' => t('Brazilian Phone Numbers')), < 'int_phone'=> array('label' => t('International Phone Numbers, as per E.123')) < ); --- > > foreach(get_country_modules() as $k => $v) { > $phone_metadata_function = 'phone_' . $k . '_metadata'; > module_load_include('inc', 'phone', 'phone.'. $k); > if (function_exists($phone_metadata_function)) { > $fieldinfo[$v] = $phone_metadata_function(); > } > } > > return $fieldinfo; 112c121 < '#value' => t('International phone numbers are in the form +XX YYYYYYY where XX is a country code and YYYYYYY is the local number. This field type is based off of the E.123 specification.'), --- > '#value' => t('International phone numbers are in the form +XX YYYYYYY, where XX is a country code and YYYYYYY is the local number. This field type is based on E.123 specification.'), 121c130 < '#title' => t('Maximum length of international numbers, according to the ITU this is 15'), --- > '#title' => t('Maximum length of international numbers, according to the ITU, is 15'), 150,167c160,161 < if ($field['type'] == 'fr_phone' < || $field['type'] == 'it_phone' < || $field['type'] == 'ca_phone' < || $field['type'] == 'cr_phone' < || $field['type'] == 'uk_phone' < || $field['type'] == 'ru_phone' < || $field['type'] == 'es_phone' < || $field['type'] == 'au_phone' < || $field['type'] == 'cs_phone' < || $field['type'] == 'hu_phone' < || $field['type'] == 'nl_phone' < || $field['type'] == 'nz_phone' < || $field['type'] == 'br_phone' < || $field['type'] == 'int_phone' < ) { < $columns = array( < 'value' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE), < ); --- > if (in_array($field['type'], get_country_modules())) { > $columns = array( 'value' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE), ); 213,247c207,213 < if ($field['type'] == 'fr_phone' && !valid_phone_number('fr', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid French phone number
French phone numbers should only contain numbers and spaces and be like 99 99 99 99 99', array('%value' => $item['value']))); < } < if ($field['type'] == 'it_phone' && !valid_phone_number('it', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Italian phone number
Italian phone numbers should only ...', array('%value' => $item['value']))); < } < if ($field['type'] == 'ca_phone' && !valid_phone_number('ca', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid North American phone number
North American Phone numbers should only contain numbers and + and - and ( and ) and spaces and be like 999-999-9999. Please enter a valid ten-digit phone number with optional extension.', array('%value' => $item['value']))); < } < if ($field['type'] == 'cr_phone' && !valid_phone_number('cr', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Costa Rican phone number!
Costa Rican phone numbers should contain only numbers and spaces be like 99 99 99 99 with an optional prefix of "+506" or "00506".', array('%value' => $item['value']))); < } < if ($field['type'] == 'uk_phone' && !valid_phone_number('uk', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid British phone number
British Phone numbers should .... ', array('%value' => $item['value']))); < } < if ($field['type'] == 'ru_phone' && !valid_phone_number('ru', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Russian phone number
Russian Phone numbers should .... ', array('%value' => $item['value']))); < } < if ($field['type'] == 'es_phone' && !valid_phone_number('es', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Spanish phone number
Spanish phone numbers should only contains numbers and spaces and be like 999 999 999', array('%value' => $item['value']))); < } < if ($field['type'] == 'au_phone' && !valid_phone_number('au', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Australian phone number
Australian phone numbers should contain only numbers with an optional prefix of "+61"', array('%value' => $item['value']))); < } < if ($field['type'] == 'cs_phone' && !valid_phone_number('cs', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Czech phone number!
Czech phone numbers should contain only numbers and spaces be like 999 999 999 with an optional prefix of "+420" or "00420".', array('%value' => $item['value']))); < } < if ($field['type'] == 'hu_phone' && !valid_phone_number('hu', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Hungarian phone number!
Hungarian phone numbers should contain only numbers and spaces be like 70 999 9999 with an optional prefix of "+36" or "06".', array('%value' => $item['value']))); < } < if ($field['type'] == 'nl_phone' && !valid_phone_number('nl', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Dutch phone number!
Dutch phone numbers should contain only numbers and spaces and - and be like 099-9999999 with an optional prefix of "+31".', array('%value' => $item['value']))); < } < if ($field['type'] == 'nz_phone' && !valid_phone_number('nz', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid New Zealand phone number!
New Zealand phone numbers should contain only only numbers, spaces, brackets and "-". They should look like 04 123 4567 or can optionally omit the leading 0 and have a prefix of "+64".', array('%value' => $item['value']))); --- > if (($countrycode = array_search($field['type'], get_country_modules())) !== FALSE) { > if (!valid_phone_number($countrycode, $item['value'])) { > $phone_metadata_function = 'phone_' . $countrycode . '_metadata'; > module_load_include('inc', 'phone', 'phone.'. $countrycode); > if (function_exists($phone_metadata_function)) { > $meta = $phone_metadata_function(); > form_set_error($field['field_name'], t($meta['error'], array('%value' => $item['value']))); 249,250d214 < if ($field['type'] == 'br_phone' && !valid_phone_number('br', $item['value'])) { < form_set_error($field['field_name'], t('"%value" is not a valid Brazilian phone number!
Brazilian phone numbers should contain only numbers and spaces and - and be like 099 9999-9999 or 99 9999-9999 with an optional prefix of "+55".', array('%value' => $item['value']))); 252,253d215 < if ($field['type'] == 'int_phone' && !valid_phone_number('int', $item['value'])) { < form_set_error($field['field_name'],t('"%value" is not a valid international phone number
International phone numbers should contain a country code prefixed by a plus sign followed by the local number.', array('%value' => $item['value']))); 263,303c225,226 < if ($field['type'] == 'fr_phone') { < $node_field[$delta]['value'] = format_phone_number('fr', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'it_phone') { < $node_field[$delta]['value'] = format_phone_number('it', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'ca_phone') { < $node_field[$delta]['value'] = format_phone_number('ca', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'cr_phone') { < $node_field[$delta]['value'] = format_phone_number('cr', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'uk_phone') { < $node_field[$delta]['value'] = format_phone_number('uk', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'ru_phone') { < $node_field[$delta]['value'] = format_phone_number('ru', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'es_phone') { < $node_field[$delta]['value'] = format_phone_number('es', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'au_phone') { < $node_field[$delta]['value'] = format_phone_number('au', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'cs_phone') { < $node_field[$delta]['value'] = format_phone_number('cs', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'hu_phone') { < $node_field[$delta]['value'] = format_phone_number('hu', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'nl_phone') { < $node_field[$delta]['value'] = format_phone_number('nl', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'nz_phone') { < $node_field[$delta]['value'] = format_phone_number('nz', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'br_phone') { < $node_field[$delta]['value'] = format_phone_number('br', $node_field[$delta]['value'], $field); < } < if ($field['type'] == 'int_phone') { < $node_field[$delta]['value'] = format_phone_number('int', $node_field[$delta]['value'], $field); --- > if (($countrycode = array_search($field['type'], get_country_modules())) !== FALSE) { > $node_field[$delta]['value'] = format_phone_number($countrycode, $node_field[$delta]['value'], $field); 395,409c318 < 'field types' => array('fr_phone', < 'it_phone', < 'ca_phone', < 'cr_phone', < 'uk_phone', < 'ru_phone', < 'es_phone', < 'au_phone', < 'cs_phone', < 'hu_phone', < 'nl_phone', < 'nz_phone', < 'br_phone', < 'int_phone' < ), --- > 'field types' => get_country_modules(), 476,490c385 < 'field types' => array('fr_phone', < 'it_phone', < 'ca_phone', < 'cr_phone', < 'uk_phone', < 'ru_phone', < 'es_phone', < 'au_phone', < 'cs_phone', < 'hu_phone', < 'nl_phone', < 'nz_phone', < 'br_phone', < 'int_phone' < ), --- > 'field types' => get_country_modules(), 678,683c573,576 < /** < * Verification for Phone Numbers. < * < * @param string $countrycode < * @param string $phonenumber < * @return boolean Returns boolean FALSE if the phone number is not valid. --- > function process_phone_number($countrycode, $phonenumber, $op) { > /* More of a macro to shorten code and reduce errors. > Accepts either 'valid' or 'format' and invokes the > proper function, passing on its return value 685d577 < function valid_phone_number($countrycode, $phonenumber) { 690,708c582,583 < if ($countrycode == 'fr' < || $countrycode == 'it' < || $countrycode == 'ca' < || $countrycode == 'cr' < || $countrycode == 'uk' < || $countrycode == 'ru' < || $countrycode == 'es' < || $countrycode == 'au' < || $countrycode == 'cs' < || $countrycode == 'hu' < || $countrycode == 'nl' < || $countrycode == 'nz' < || $countrycode == 'br' < || $countrycode == 'int' < ) { < < //drupal_set_message('langue = ' . $countrycode, 'error'); < < $valid_phone_function = 'valid_'. $countrycode . '_phone_number'; --- > if (array_key_exists($countrycode, get_country_modules())) { > $op_phone_function = $op . '_'. $countrycode . '_phone_number'; 710,712c585,586 < < if (function_exists($valid_phone_function)) { < return $valid_phone_function($phonenumber); --- > if (function_exists($op_phone_function)) { > return $op_phone_function($phonenumber); 718,719c592 < else { < //Country not taken into account yet --- > else { //Country not yet implemented 731,750c604 < function format_phone_number($countrycode, $phonenumber, $field) { < < $countrycode = trim($countrycode); < $phonenumber = trim($phonenumber); < < if ($countrycode == 'fr' < || $countrycode == 'it' < || $countrycode == 'ca' < || $countrycode == 'cr' < || $countrycode == 'uk' < || $countrycode == 'ru' < || $countrycode == 'es' < || $countrycode == 'au' < || $countrycode == 'cs' < || $countrycode == 'hu' < || $countrycode == 'nl' < || $countrycode == 'nz' < || $countrycode == 'br' < || $countrycode == 'int' < ) { --- > function valid_phone_number($countrycode, $phonenumber) { 752c606,607 < //drupal_set_message('langue = ' . $countrycode, 'error'); --- > return process_phone_number($countrycode, $phonenumber, 'valid'); > } 754,755c609,616 < $format_phone_function = 'format_'. $countrycode . '_phone_number'; < module_load_include('inc', 'phone', 'phone.'. $countrycode); --- > /** > * Verification for Phone Numbers. > * > * @param string $countrycode > * @param string $phonenumber > * @return boolean Returns boolean FALSE if the phone number is not valid. > */ > function format_phone_number($countrycode, $phonenumber) { 757,767c618 < if (function_exists($format_phone_function)) { < return $format_phone_function($phonenumber, $field); < } < else { < return FALSE; < } < } < else { < //Country not taken into account yet < return FALSE; < } --- > return process_phone_number($countrycode, $phonenumber, 'format');