protected function EntityFormController::submitEntityLanguage

Handle possible entity language changes.

Parameters

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

array $form_state: A reference to a keyed array containing the current state of the form.

1 call to EntityFormController::submitEntityLanguage()

File

drupal/core/lib/Drupal/Core/Entity/EntityFormController.php, line 258
Definition of Drupal\Core\Entity\EntityFormController.

Class

EntityFormController
Base class for entity form controllers.

Namespace

Drupal\Core\Entity

Code

protected function submitEntityLanguage(array $form, array &$form_state) {

  // Update the form language as it might have changed.
  if (isset($form_state['values']['langcode']) && $this
    ->isDefaultFormLangcode($form_state)) {
    $form_state['langcode'] = $form_state['values']['langcode'];
  }
  $entity = $this
    ->getEntity($form_state);
  $entity_type = $entity
    ->entityType();
  if (field_has_translation_handler($entity_type)) {
    $form_langcode = $this
      ->getFormLangcode($form_state);

    // If we are editing the default language values, we use the submitted
    // entity language as the new language for fields to handle any language
    // change. Otherwise the current form language is the proper value, since
    // in this case it is not supposed to change.
    $current_langcode = $entity
      ->language()->langcode == $form_langcode ? $form_state['values']['langcode'] : $form_langcode;
    foreach (field_info_instances($entity_type, $entity
      ->bundle()) as $instance) {
      $field_name = $instance['field_name'];
      $field = field_info_field($field_name);
      $previous_langcode = $form[$field_name]['#language'];

      // Handle a possible language change: new language values are inserted,
      // previous ones are deleted.
      if ($field['translatable'] && $previous_langcode != $current_langcode) {
        $form_state['values'][$field_name][$current_langcode] = $form_state['values'][$field_name][$previous_langcode];
        $form_state['values'][$field_name][$previous_langcode] = array();
      }
    }
  }
}