You are here

function field_default_token_form_field_ui_field_edit_form_alter in Field default token 7

Implements hook_form_FORM_ID_alter().

File

./field_default_token.module, line 114
Enables to use tokens as field default values.

Code

function field_default_token_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) {
  $field = $form['#field'];
  $instance = $form['#instance'];
  if (!isset($form['instance']['default_value_widget'])) {
    if (field_behaviors_widget('default value', $instance) == FIELD_BEHAVIOR_DEFAULT && !empty($instance['default_value_function']) && $instance['default_value_function'] === 'field_default_token_default_value_function') {

      // Read default value widget hidden by core.
      $form['instance']['default_value_widget'] = field_ui_default_value_widget($field, $instance, $form, $form_state);
    }
  }
  $options_widgets = array(
    'options_select',
    'options_buttons',
    'options_onoff',
  );
  if (isset($instance['widget']['type']) && in_array($instance['widget']['type'], $options_widgets)) {
    $default_value = '';
    if (!empty($instance['default_value'])) {
      foreach ($instance['default_value'] as $values) {
        foreach ($values as $value) {
          if (strpos($value, '[') !== FALSE) {
            $default_value = $value;
          }
        }
      }
    }
    $form['instance']['default_value_widget']['default_value_token'] = array(
      '#type' => 'textfield',
      '#title' => t('Token for default value'),
      '#description' => t('If set, this token will be used as the field default value instead.'),
      '#maxlength' => 1024,
      '#default_value' => $default_value,
      '#weight' => 100,
    );
  }
  if (isset($form['instance']['default_value_widget'])) {
    field_default_token_enlarge_max_length($form['instance']['default_value_widget']);
    field_default_token_fix_number_validation($form['instance']['default_value_widget']);

    // Allow tokens to be field value labels, not just field values.
    if (isset($field['settings']['allowed_values']) && is_array($field['settings']['allowed_values'])) {
      $form['instance']['default_value_label_token'] = array(
        '#type' => 'checkbox',
        '#title' => t('Token for default value contains field value label, not stored key'),
        '#description' => t('If checked, token value must be field value label from allowed values list of key|label pairs.'),
        '#default_value' => isset($instance['default_value_label_token']) ? $instance['default_value_label_token'] : FALSE,
        '#weight' => 150,
      );
    }
    $entity_type = $form['#instance']['entity_type'];
    $token_type = $entity_type;
    $entity_info = entity_get_info($entity_type);
    if (isset($entity_info['token type'])) {
      $token_type = $entity_info['token type'];
    }
    $form['instance']['default_value_widget']['token_tree'] = array(
      '#theme' => 'token_tree',
      '#token_types' => array(
        $token_type,
      ),
      '#dialog' => TRUE,
      '#weight' => 200,
    );
  }

  // Replace validator to disable validation of strings with tokens
  // in Field UI forms.
  foreach ($form['#validate'] as &$validator) {
    if ($validator == 'field_ui_field_edit_form_validate') {
      $validator = 'field_default_token_field_ui_field_edit_form_validate';
    }
  }
}