You are here

function select2widget_field_widget_form in Select2 Field Widget 7

Same name and namespace in other branches
  1. 7.2 select2widget.module \select2widget_field_widget_form()

Implements hook_field_widget_form().

File

./select2widget.module, line 49
Select2Widget module functionality.

Code

function select2widget_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {

  // Abstract over the actual field columns, to allow different field types to
  // reuse those widgets.
  $value_key = key($field['columns']);
  $type = str_replace('options_', '', $instance['widget']['type']);
  $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
  $required = $element['#required'];
  $has_value = isset($items[0][$value_key]);
  $properties = _select2widget_options_properties($type, $multiple, $required, $has_value);
  $entity_type = $element['#entity_type'];
  $entity = $element['#entity'];

  // Prepare the list of options.
  $options = _select2widget_options_get_options($field, $instance, $properties, $entity_type, $entity);

  // Put current field values in shape.
  $default_value = _options_storage_to_form($items, $options, $value_key, $properties);
  switch ($type) {
    case 'select2widget':
      $element += array(
        '#type' => 'select',
        '#default_value' => $default_value,
        // Do not display a 'multiple' select box if there is only one option.
        '#multiple' => $multiple && count($options) > 1,
        '#options' => $options,
        '#process' => array(
          'select2widget_process_callback',
          'ajax_process_form',
        ),
      );
      break;
  }
  $element += array(
    '#value_key' => $value_key,
    '#element_validate' => array(
      'select2widget_field_widget_validate',
    ),
    '#properties' => $properties,
  );
  return $element;
}