You are here

function _telephone_validation_metadata_field_property_set in Telephone Validation 7

Callback for setting field property values.

See also

entity_metadata_field_property_set().

1 string reference to '_telephone_validation_metadata_field_property_set'
telephone_validation_metadata_field_telephone_property_callback in ./telephone_validation.module
Additional callback to adapt the property info for telephone fields.

File

./telephone_validation.module, line 212
Validate phone number.

Code

function _telephone_validation_metadata_field_property_set($entity, $name, $value, $langcode, $entity_type, $info) {
  $field = field_info_field($name);
  $columns = array_keys($field['columns']);
  $langcode = entity_metadata_field_get_language($entity_type, $entity, $field, $langcode);
  $values = $field['cardinality'] == 1 ? array(
    $value,
  ) : (array) $value;
  list(, , $bundle) = entity_extract_ids($entity_type, $entity);
  $instance = field_info_instance($entity_type, $name, $bundle);
  $settings = _telephone_validation_get_instance_settings($instance);

  // If number looks ok, use google libphonenumber library to set correct
  // output format.
  $phone_util = \libphonenumber\PhoneNumberUtil::getInstance();
  $items = array();
  foreach ($values as $delta => $value) {
    if (isset($value)) {
      $default_region = $settings['valid_format'] == \libphonenumber\PhoneNumberFormat::NATIONAL ? $settings['valid_countries'] : NULL;
      $number = $phone_util
        ->parse($value, $default_region);
      $items[$delta][$columns[0]] = $phone_util
        ->format($number, $settings['store_format']);
    }
  }
  $entity->{$name}[$langcode] = $items;

  // Empty the static field language cache, so the field system picks up any
  // possible new languages.
  drupal_static_reset('field_language');
}