You are here

international_phone.module in International Phone Field 7.2

Same filename and directory in other branches
  1. 7 international_phone.module

Defines a field for attaching international phone fields to entities.

File

international_phone.module
View source
<?php

/**
 * @file
 * Defines a field for attaching international phone fields to entities.
 */

/**
 * Implements hook_field_info().
 */
function international_phone_field_info() {
  return array(
    'international_phone' => array(
      'label' => t('International Phone'),
      'instance_settings' => array(
        'international_phone_country_code' => 0,
        'international_phone_default_country_code' => '1',
        'international_phone_int_max_length' => 15,
      ),
      'default_formatter' => 'international_phone',
      'default_widget' => 'international_phone_textfield',
      'property_type' => 'text',
    ),
  );
}

/**
 * Implements hook_field_is_empty().
 */
function international_phone_field_is_empty($item, $field) {
  return empty($item['value']);
}

/**
 * Implements hook_field_formatter_info().
 */
function international_phone_field_formatter_info() {
  return array(
    'international_phone' => array(
      'label' => t('Default'),
      'field types' => array(
        'international_phone',
      ),
    ),
  );
}

/**
 * Implements hook_field_formatter_view().
 */
function international_phone_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  foreach ($items as $delta => $item) {
    $text = '';
    if (isset($item['value'])) {
      $text = check_plain($item['value']);

      // iPhone Support.
      if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== FALSE) {
        $text = '<a href="tel:' . $text . '">' . $text . '</a>';
      }
    }
    $element[$delta]['#markup'] = $text;
    $element['#attached']['libraries_load'][] = array(
      'intl-tel-input',
    );
    $element['#attached']['js'][] = array(
      'type' => 'setting',
      'data' => array(
        'internationalPhone' => array(
          'utilsScriptPath' => libraries_get_path('intl-tel-input') . '/build/js/utils.js',
          'defaultCountryCode' => $instance->settings->international_phone_default_country_code,
        ),
      ),
    );
    $element['#attached']['js'][] = array(
      'type' => 'file',
      'data' => drupal_get_path('module', 'international_phone') . '/js/international_phone.js',
    );
  }
  return $element;
}

/**
 * Implements hook_field_widget_info().
 */
function international_phone_field_widget_info() {
  return array(
    'international_phone_textfield' => array(
      'label' => t('Text field'),
      'field types' => array(
        'international_phone',
      ),
    ),
  );
}

/**
 * Implements hook_field_widget_form().
 */
function international_phone_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $element['value'] = array(
    '#type' => 'textfield',
    '#title' => check_plain($element['#title']),
    '#description' => check_plain($element['#description']),
    '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : '',
    '#required' => $element['#required'],
    '#size' => 17,
    '#attributes' => array(
      'class' => array(
        'international_phone-number',
      ),
    ),
    '#attached' => array(
      'libraries_load' => array(
        array(
          'intl-tel-input',
        ),
      ),
      'js' => array(
        array(
          'type' => 'setting',
          'data' => array(
            'internationalPhone' => array(
              'utilsScriptPath' => libraries_get_path('intl-tel-input') . '/build/js/utils.js',
              'defaultCountryCode' => $instance->settings->international_phone_default_country_code,
            ),
          ),
        ),
        array(
          'type' => 'file',
          'data' => drupal_get_path('module', 'international_phone') . '/js/international_phone.js',
        ),
      ),
    ),
  );
  return $element;
}

/**
 * Implements hook_libraries_info().
 */
function international_phone_libraries_info() {
  $libraries['intl-tel-input'] = array(
    'name' => 'International Phone Input',
    'vendor url' => 'https://github.com/jackocnr/intl-tel-input',
    'download url' => 'https://github.com/jackocnr/intl-tel-input/archive/v9.2.0.tar.gz',
    'version arguments' => array(
      'file' => 'package.json',
      'pattern' => '/"version": "(\\d+\\.\\d+\\.\\d+)"/',
      // 9.2.0
      'lines' => 7,
    ),
    'files' => array(
      'css' => array(
        'build/css/intlTelInput.css',
      ),
      'js' => array(
        'build/js/intlTelInput.js',
      ),
    ),
    'variants' => array(
      'minified' => array(
        'files' => array(
          'js' => array(
            'build/js/intlTelInput.min.js',
          ),
        ),
      ),
    ),
  );
  return $libraries;
}