You are here

function double_field_field_widget_form in Double Field 7.2

Same name and namespace in other branches
  1. 7 double_field.module \double_field_field_widget_form()

Implements hook_field_widget_form().

File

./double_field.module, line 642
Defines "Double field" field type.

Code

function double_field_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $settings = $instance['widget']['settings'];
  $i18n_context_prefix = double_field_i18n_strings_prefix($instance) . ':widget-settings-';
  $subfield_types = explode('_&_', $instance['widget']['type']);
  $double_field = array(
    '#theme_wrappers' => array(
      'container',
      'form_element',
    ),
    '#attributes' => array(
      'class' => array(
        'double-field-elements',
      ),
    ),
  );
  foreach (array(
    'first',
    'second',
  ) as $key => $subfield) {
    $prefix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-general-prefix', $settings[$subfield]['general']['prefix']);
    $suffix = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-general-suffix', $settings[$subfield]['general']['suffix']);
    $double_field[$subfield] = array(
      '#type' => $subfield_types[$key],
      '#prefix' => $prefix,
      '#suffix' => $suffix,
      '#default_value' => isset($items[$delta][$subfield]) ? $items[$delta][$subfield] : NULL,
      '#title' => $instance['label'],
      '#title_display' => 'invisible',
      '#subfield_settings' => $field['settings'][$subfield],
    );
    $field_type = $field['settings'][$subfield]['type'];

    // Avoid PDOException: String data, right truncated.
    if ($field_type == 'varchar') {
      $double_field[$subfield]['#maxlength'] = $field['settings'][$subfield]['maxlength'];
    }
    elseif ($field_type == 'int' || $field_type == 'float' || $field_type == 'decimal') {
      $double_field[$subfield]['#element_validate'][] = 'double_field_validate_number';
    }
    switch ($subfield_types[$key]) {
      case 'textfield':
        $double_field[$subfield]['#size'] = $settings[$subfield]['textfield']['size'];
        if ($settings[$subfield]['textfield']['placeholder']) {
          $double_field[$subfield]['#attributes']['placeholder'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-textfield-placeholder', $settings[$subfield]['textfield']['placeholder']);
        }
        break;
      case 'checkbox':
        $double_field[$subfield]['#element_validate'][] = 'double_field_checkbox_to_storage';
        $double_field[$subfield]['#on_value'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-checkbox-on_value', $settings[$subfield]['checkbox']['on_value']);
        $double_field[$subfield]['#off_value'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-checkbox-off_value', $settings[$subfield]['checkbox']['off_value']);
        $double_field[$subfield]['#off_value'] = $settings[$subfield]['checkbox']['off_value'];
        $double_field[$subfield]['#default_value'] = $double_field[$subfield]['#default_value'] == $double_field[$subfield]['#on_value'];
        break;
      case 'select':
        $allowed_values = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-select-allowed_values', $settings[$subfield]['select']['allowed_values']);
        $label = $settings[$subfield]['general']['required'] ? t('- Select a value -') : t('- None -');
        $double_field[$subfield]['#options'] = array(
          '' => $label,
        ) + $allowed_values;
        break;
      case 'textarea':
        $double_field[$subfield]['#cols'] = $settings[$subfield]['textarea']['cols'];
        $double_field[$subfield]['#rows'] = $settings[$subfield]['textarea']['rows'];
        $double_field[$subfield]['#resizable'] = $settings[$subfield]['textarea']['resizable'];
        if ($settings[$subfield]['textarea']['placeholder']) {
          $double_field[$subfield]['#attributes']['placeholder'] = double_field_i18n_strings_translate($i18n_context_prefix . $subfield . '-textarea-placeholder', $settings[$subfield]['textarea']['placeholder']);
        }
        break;
    }
  }
  if ($settings['inline']) {
    $double_field['#attributes']['class'][] = 'container-inline';
  }
  return $element + $double_field;
}