You are here

list_predefined_options.module in List field predefined options 7

File

list_predefined_options.module
View source
<?php

/**
 * Implements hook_form_alter().
 */
function list_predefined_options_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'field_ui_field_edit_form') {
    if ($form['#field']['module'] == 'list') {
      _list_predefined_options_add_options($form['field']['settings']);
    }
  }
  elseif ($form_id == 'field_ui_field_settings_form') {
    if ($form['field']['module']['#value'] == 'list') {
      _list_predefined_options_add_options($form['field']['settings']);
    }
  }
}
function _list_predefined_options_add_options(&$field_settings) {
  $field_settings['allowed_values_function'] = array(
    '#type' => 'select',
    '#title' => t('Allowed values'),
    '#options' => list_predefined_options_get_callback_options() + array(
      '' => t('Custom'),
    ),
    '#default_value' => $field_settings['allowed_values_function']['#value'],
    '#weight' => -10,
  );
  $field_settings['allowed_values']['#states']['visible'][':input[name="field[settings][allowed_values_function]"]'] = array(
    'value' => '',
  );
  $field_settings['allowed_values']['#access'] = TRUE;
  $field_settings['allowed_values_function_display']['#access'] = FALSE;
}

/**
 * Implement hook_webform_select_options_info().
 */
function list_predefined_options_webform_select_options_info() {
  $options = list_predefined_options_get_list_option_info();

  // Reconfigure the predefined options info to match what webform expects
  foreach ($options as $key => $option_info) {
    $options[$key]['title'] = $option_info['label'];
    unset($options[$key]['label']);
    $options[$key]['options callback'] = $option_info['callback'];
    unset($options[$key]['callback']);
  }
  return $options;
}

/**
 * Get all the predefined options via hook_list_option_info().
 *
 * @see hook_list_option_info()
 * @see hook_list_option_info_alter()
 */
function list_predefined_options_get_list_option_info() {
  $info =& drupal_static(__FUNCTION__);
  if (!isset($options)) {
    $cid = "list:predefined-option:info:" . $GLOBALS['language']->language;
    if ($cache = cache_get($cid)) {
      $info = $cache->data;
    }
    else {
      $info = module_invoke_all('list_option_info');
      drupal_alter('list_option_info', $info);
      cache_set($cid, $info);
    }
  }
  return $info;
}

/**
 * Get an array of predefined options prepared for #options.
 *
 * The array will be formatted with the option callback as the keys, and the
 * label as the values.
 */
function list_predefined_options_get_callback_options() {
  $info = list_predefined_options_get_list_option_info();
  $options = array();
  foreach ($info as $option) {
    $options[$option['callback']] = $option['label'];
  }
  return $options;
}

/**
 * Implements hook_list_option_info().
 */
function list_predefined_options_list_option_info() {
  $info['us_states'] = array(
    'label' => t('US states'),
    'callback' => 'list_predefined_options_list_option_us_states',
  );
  $info['countries'] = array(
    'label' => t('Countries'),
    'callback' => 'list_predefined_options_list_option_countries',
  );
  $info['timezones'] = array(
    'label' => t('Time zones'),
    'callback' => 'list_predefined_options_list_option_timezones',
  );
  $info['languages'] = array(
    'label' => t('Languages (all)'),
    'callback' => 'list_predefined_options_list_option_languages',
  );
  if (module_exists('locale')) {
    $info['locale_languages'] = array(
      'label' => t('Languages (enabled)'),
      'callback' => 'list_predefined_options_list_option_languages_enabled',
    );
  }

  // @todo Add support for the webform options
  return $info;
}

/**
 * List option callback for US states.
 */
function list_predefined_options_list_option_us_states() {
  $options['AL'] = t('Alabama');
  $options['AK'] = t('Alaska');
  $options['AZ'] = t('Arizona');
  $options['AR'] = t('Arkansas');
  $options['CA'] = t('California');
  $options['CO'] = t('Colorado');
  $options['CT'] = t('Connecticut');
  $options['DE'] = t('Delaware');
  $options['DC'] = t('District Of Columbia');
  $options['FL'] = t('Florida');
  $options['GA'] = t('Georgia');
  $options['HI'] = t('Hawaii');
  $options['ID'] = t('Idaho');
  $options['IL'] = t('Illinois');
  $options['IN'] = t('Indiana');
  $options['IA'] = t('Iowa');
  $options['KS'] = t('Kansas');
  $options['KY'] = t('Kentucky');
  $options['LA'] = t('Louisiana');
  $options['ME'] = t('Maine');
  $options['MD'] = t('Maryland');
  $options['MA'] = t('Massachusetts');
  $options['MI'] = t('Michigan');
  $options['MN'] = t('Minnesota');
  $options['MS'] = t('Mississippi');
  $options['MO'] = t('Missouri');
  $options['MT'] = t('Montana');
  $options['NE'] = t('Nebraska');
  $options['NV'] = t('Nevada');
  $options['NH'] = t('New Hampshire');
  $options['NJ'] = t('New Jersey');
  $options['NM'] = t('New Mexico');
  $options['NY'] = t('New York');
  $options['NC'] = t('North Carolina');
  $options['ND'] = t('North Dakota');
  $options['OH'] = t('Ohio');
  $options['OK'] = t('Oklahoma');
  $options['OR'] = t('Oregon');
  $options['PA'] = t('Pennsylvania');
  $options['RI'] = t('Rhode Island');
  $options['SC'] = t('South Carolina');
  $options['SD'] = t('South Dakota');
  $options['TN'] = t('Tennessee');
  $options['TX'] = t('Texas');
  $options['UT'] = t('Utah');
  $options['VT'] = t('Vermont');
  $options['VA'] = t('Virginia');
  $options['WA'] = t('Washington');
  $options['WV'] = t('West Virginia');
  $options['WI'] = t('Wisconsin');
  $options['WY'] = t('Wyoming');

  // @todo Add an alter hook for this state list?
  return $options;
}

/**
 * List option callback for countries.
 */
function list_predefined_options_list_option_countries() {
  include_once DRUPAL_ROOT . '/includes/locale.inc';
  return country_get_list();
}

/**
 * List option callback for timezones.
 */
function list_predefined_options_list_option_timezones() {
  return system_time_zones();
}

/**
 * List options callback for all languages.
 */
function list_predefined_options_list_option_languages() {
  include_once DRUPAL_ROOT . '/includes/iso.inc';
  $options = _locale_get_predefined_list();
  foreach ($options as $key => $value) {

    // Include native name in output, if possible
    if (count($value) > 1) {
      $tname = t($value[0]);
      $options[$key] = $tname == $value[1] ? $tname : "{$tname} ({$value[1]})";
    }
    else {
      $options[$key] = t($value[0]);
    }
  }
  asort($options);
  $options = array(
    LANGUAGE_NONE => t('Language neutral'),
  ) + $options;
  return $options;
}

/**
 * List options callback for enabled languages (requires locale module).
 */
function list_predefined_options_list_option_languages_enabled() {
  $options = array(
    LANGUAGE_NONE => t('Language neutral'),
  ) + locale_language_list();
  return $options;
}

Functions

Namesort descending Description
list_predefined_options_form_alter Implements hook_form_alter().
list_predefined_options_get_callback_options Get an array of predefined options prepared for #options.
list_predefined_options_get_list_option_info Get all the predefined options via hook_list_option_info().
list_predefined_options_list_option_countries List option callback for countries.
list_predefined_options_list_option_info Implements hook_list_option_info().
list_predefined_options_list_option_languages List options callback for all languages.
list_predefined_options_list_option_languages_enabled List options callback for enabled languages (requires locale module).
list_predefined_options_list_option_timezones List option callback for timezones.
list_predefined_options_list_option_us_states List option callback for US states.
list_predefined_options_webform_select_options_info Implement hook_webform_select_options_info().
_list_predefined_options_add_options