| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | 
							- <?php
 
- /**
 
-  * @file
 
-  * CCK Field for Hungarian phone numbers.
 
-  */
 
- /**
 
-  * Verifies and mage parts from $number
 
-  *
 
-  * @param $number
 
-  *   Digits only value.
 
-  * @return boolean
 
-  *   Array
 
-  *     if array['error'] is present, the validation fails
 
-  *     else ['area'] for area number
 
-  *          ['first'] ['second'] for the AA/BBB-CCC numbers
 
-  *          ['first'] ['second'] ['third'] for the A(A)/BBB-CC-DD numbers
 
-  */
 
- function hu_parts($number) {
 
-   /**
 
-    * Because Hungary an telephone numbers are both in open and closed number region, the area code length may be vary. If the area code is 1, 7 more digits follow it.
 
-    * If the area code is 20/30/70, also 7 more digits.
 
-    * If any other 2 digits are code is appear, we want 6 more digits.
 
-    *
 
-    * So complecated, I know :)
 
-    *
 
-    */
 
-   $result = array();
 
-   // Last 9 digits
 
-   $n = drupal_substr($number, -9);
 
-   if ($n === FALSE || (drupal_substr($n, 0, 1) != 2 && drupal_substr($n, 0, 1) != 3 && drupal_substr($n, 0, 1) != 7)) {
 
-     // No 9 digit, check for 8 digit
 
-     if (drupal_substr($number, -8) === FALSE) {
 
-       // No 8 digit, too short for valid telephone number
 
-       $result['error'] = '"%phone_input" is not a valid Hungarian phone number, it should be a 9 digit number like "20/123-45-67" or a 8 digit number like "23/123-456"';
 
-     }
 
-     else {
 
-       $n = drupal_substr($number, -8);
 
-       // It is 8 digits
 
-       if (drupal_substr($n, 0, 1) == 1) {
 
-         // A number from Budapest
 
-         $result['area'] = drupal_substr($n, 0, 1);
 
-         $result['first'] = drupal_substr($n, 1, 3);
 
-         $result['second'] = drupal_substr($n, 4, 2);
 
-         $result['third'] = drupal_substr($n, 6, 2);
 
-       }
 
-       else {
 
-         // A number from countryside
 
-         $result['area'] = drupal_substr($n, 0, 2);
 
-         $result['first'] = drupal_substr($n, 2, 3);
 
-         $result['second'] = drupal_substr($n, 5, 3);
 
-       }
 
-     }
 
-   }
 
-   else {
 
-     // Cell phone number
 
-     $result['area'] = drupal_substr($n, 0, 2);
 
-     $result['first'] = drupal_substr($n, 2, 3);
 
-     $result['second'] = drupal_substr($n, 5, 2);
 
-     $result['third'] = drupal_substr($n, 7, 2);
 
-   }
 
-   return $result;
 
- }
 
- /**
 
-  * Verifies that $number is a valid nine digit Hungarian phone number.
 
-  *
 
-  * @param $number
 
-  *   Digits only value.
 
-  * @param $ext
 
-  *   Digits only value.
 
-  * @param $error
 
-  *   The error message to shown to user.
 
-  *   Available parameters to use in the error message are
 
-  *   - "%countrycode": the alpha-2 CC
 
-  *   - "%phone_input": the original number input by user (could be invalid)
 
-  *   - "%max_length": allowed maximum length of the phone number
 
-  * @return boolean
 
-  *   TRUE if it is a valid phone number for that country, FALSE otherwise.
 
-  */
 
- function hu_validate_number($number, $ext = '', &$error) {
 
-   // Don't need to check for extension because it has been checked by generic validation as all digits, unless has special format/requirements
 
-   // We don't want to worry about separators
 
-   $number = cck_phone_clean_number($number);
 
-   $result = hu_parts($number);
 
-   if (isset($result['error'])) {
 
-     // t() is no needed
 
-     $error = $result['error'];
 
-     return FALSE;
 
-   }
 
-   return true;
 
- }
 
- /**
 
-  * Cleanup user-entered values for a phone number field for saving to DB.
 
-  *
 
-  * @param $number
 
-  *   A single phone number item.
 
-  */
 
- function hu_sanitize_number(&$number) {
 
-   // Remove prefix '36' or '+36'
 
-   $number = preg_replace('/^(?:\+?36|06*)/', '', $number);
 
- }
 
- /**
 
-  * Default formatter for international phone number.
 
-  *
 
-  * @param $element
 
-  *   $element['country_codes']: alpha-2 country code
 
-  *   $element['number']: phone number
 
-  *   $element['extension']: ext
 
-  * @return boolean
 
-  *   STRING The formatted number
 
-  */
 
- function hu_formatter_default($element) {
 
-   $number = $element['number'];
 
-   $ext = $element['extension'];
 
-   $result = hu_parts($number);
 
-   if (isset($result['error'])) {
 
-     return $number . ($ext ? '/' . $ext : '');
 
-   }
 
-   // output as +36 (AA) BBB CCDD/ext or +36 (AA) BBB CCC/ext
 
-   $phone = '+36 (' . $result['area'] . ') ' . $result['first'] . ' ' . $result['second'] . $result['third'];
 
-   return $phone . ($ext ? '/' . $ext : '');
 
- }
 
- /**
 
-  * Local formatter for local phone number.
 
-  *
 
-  * @param $element
 
-  *   $element['country_codes']: alpha-2 country code
 
-  *   $element['number']: phone number
 
-  *   $element['extension']: ext
 
-  * @return boolean
 
-  *   STRING The formatted number
 
-  */
 
- function hu_formatter_local($element) {
 
-   $number = $element['number'];
 
-   $ext = $element['extension'];
 
-   $result = hu_parts($number);
 
-   if (isset($result['error'])) {
 
-     return $number . ($ext ? '/' . $ext : '');
 
-   }
 
-   // output as AA/BBB-CC-DD or AA/BBB-CCC
 
-   $phone =  $result['area'] . '/' . $result['first'] . '-' . $result['second'] . (isset($result['third']) ? '-' . $result['third'] : '');
 
-   return $phone . ($ext ? '/' . $ext : '');
 
- }
 
 
  |