public function FieldInstanceEditForm::submitForm

Form submission handler.

Parameters

array $form: An associative array containing the structure of the form.

array $form_state: An associative array containing the current state of the form.

Overrides FormInterface::submitForm

File

drupal/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php, line 173
Contains \Drupal\field_ui\Form\FieldInstanceEditForm.

Class

FieldInstanceEditForm
Provides a form for the field instance settings form.

Namespace

Drupal\field_ui\Form

Code

public function submitForm(array &$form, array &$form_state) {
  $entity = $form['#entity'];
  $entity_form_display = $form['#entity_form_display'];

  // Handle the default value.
  if (isset($form['instance']['default_value_widget'])) {
    $element = $form['instance']['default_value_widget'];

    // Extract field values.
    $items = array();
    $entity_form_display
      ->getWidget($this->instance
      ->getField()->id)
      ->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
    $this->instance['default_value'] = $items ? $items : NULL;
  }

  // Handle widget settings.
  $options = $entity_form_display
    ->getComponent($this->instance
    ->getField()->id);
  $options['settings'] = $form_state['values']['instance']['widget']['settings'];
  $entity_form_display
    ->setComponent($this->instance
    ->getField()->id, $options)
    ->save();
  unset($form_state['values']['instance']['widget']);

  // Merge incoming values into the instance.
  foreach ($form_state['values']['instance'] as $key => $value) {
    $this->instance[$key] = $value;
  }
  $this->instance
    ->save();
  drupal_set_message(t('Saved %label configuration.', array(
    '%label' => $this->instance
      ->label(),
  )));
  if ($this->instance['required'] && empty($this->instance['default_value']) && empty($this->instance['default_value_function']) && $this->instance['widget']['type'] == 'field_hidden') {
    drupal_set_message(t('Field %label is required and uses the "hidden" widget. You might want to configure a default value.', array(
      '%label' => $this->instance['label'],
    )), 'warning');
  }
  $form_state['redirect'] = $this
    ->getNextDestination();
}