You are here

function entity_translation_unified_form_node_insert_other_language_fields in Entity Translation Unified Form 8

Same name and namespace in other branches
  1. 7 entity_translation_unified_form.module \entity_translation_unified_form_node_insert_other_language_fields()

Add all enabled language fields for a single field.

1 call to entity_translation_unified_form_node_insert_other_language_fields()
entity_translation_unified_form_add_fields in ./entity_translation_unified_form.module
Add opposite-language ET fields to a form.

File

./entity_translation_unified_form.module, line 701

Code

function entity_translation_unified_form_node_insert_other_language_fields(&$form, &$form_state, $field_definition, $mode_plugin) {
  $language_manager = \Drupal::languageManager();
  $language = $language_manager
    ->getCurrentLanguage();
  $form_object = $form_state
    ->getFormObject();
  $entity = NULL;
  if ($form_object instanceof EntityForm) {
    $entity = $form_object
      ->getEntity();
    $entity_type = $entity
      ->getEntityTypeId();
    $bundle = $entity
      ->bundle();
    $sbs = entity_translation_unified_form_sbs_enabled($entity_type, $bundle);
    $field_name = $field_definition
      ->getName();
    $field = FieldStorageConfig::loadByName($entity_type, $field_name);
    $form_display = EntityFormDisplay::collectRenderDisplay($entity, 'default');
    $display_options = $field_definition
      ->getDisplayOptions('form');
    $hidden = empty($display_options) || isset($display_options['type']) && $display_options['type'] == 'hidden';

    // Only process entity-translatable fields.
    if ($field_definition
      ->isTranslatable() && !$hidden) {
      $other_languages = EtufHelper::getOtherEnabledLanguages();
      foreach ($other_languages as $other_langcode => $other_language) {
        $current_language = $language_manager
          ->getLanguage($other_langcode);

        // Get the field definition for this language
        $field_form = entity_translation_unified_form_build_field($form, $form_state, $entity, $entity_type, $bundle, $field_name, $other_langcode);

        // Build and attach the translated field.
        if (!empty($field_form)) {
          $field_form['widget']['#field_name'] = $field_name . '-etuf-' . $other_langcode;

          // Update the parents array.
          if (!is_array($field_form['widget']['#parents'])) {
            $field_form['widget']['#parents'] = [];
          }
          $field_form['widget']['#parents'] = [];
          $field_form['widget']['#parents'][] = $field_form['widget']['#field_name'];

          // Update the "Add another item" button's name.
          if (isset($field_form['widget']['add_more'])) {
            $field_form['widget']['add_more']['#name'] = $field_form['widget']['#field_name'] . '_add_more';
          }

          // Add the language to the render array, for additional information.
          $field_form['#etuf_field_language'] = $current_language;

          // Add the language field's theme wrapper, if any.
          $field_wrapper = $mode_plugin
            ->getFieldThemeWrapper($form, $form_state, $field_form, $field_name, $current_language);
          if (!empty($field_wrapper)) {
            $field_form['#theme_wrappers'][] = $field_wrapper;
          }

          // Give plugins a chance to alter the language field.
          $mode_plugin
            ->fieldformAlter($form, $form_state, $field_form, $field_name, $current_language);

          // Add the new field to the form.
          $form[$field_name][$other_langcode] = $field_form;
        }
      }

      // Mark this field as a multilingual field
      // Without this, Content Translation will incorrectly add the "all languages" hints.
      $form[$field_name]['#multilingual'] = TRUE;

      // Add the language to the render array, for additional information.
      $form[$field_name]['#etuf_field_language'] = $language;
      if (!isset($form[$field_name]['#access'])) {
        $form[$field_name]['#access'] = NULL;
      }

      // Add CSS class to identify translated fields.
      $form[$field_name]['#attributes']['class'][] = 'etuf-translated-field';

      // Add the original language field's theme wrapper, if any.
      $field_wrapper = $mode_plugin
        ->getFieldThemeWrapper($form, $form_state, $form[$field_name], $field_name, $language);
      if (!empty($field_wrapper)) {
        $form[$field_name]['#theme_wrappers'][] = $field_wrapper;
      }

      // Give plugins a chance to alter the language field.
      $mode_plugin
        ->fieldFormAlter($form, $form_state, $form[$field_name], $field_name, $language);

      // Add a wrapper for the group of unified form fields.
      $field_group_wrapper = $mode_plugin
        ->getFieldGroupThemeWrapper($form, $form_state, $form[$field_name], $field_name);
      if (!empty($field_group_wrapper)) {
        $form[$field_name]['#theme_wrappers'][] = $field_group_wrapper;
      }
    }
    elseif (entity_translation_unified_form_sbs_enabled($entity_type, $bundle) && !$hidden) {

      // In case of side-by-side add a wrapper to prevent moving to the right in case of field height change
      if (isset($form[$field_name]['#prefix'])) {
        $form[$field_name]['#prefix'] = '<div class="etuf-sbs-none">' . $form[$field_name]['#prefix'];
      }
      else {
        $form[$field_name]['#prefix'] = '<div class="etuf-sbs-none">';
      }
      if (isset($form[$field_name]['#suffix'])) {
        $form[$field_name]['#suffix'] = $form[$field_name]['#suffix'] . '</div>';
      }
      else {
        $form[$field_name]['#suffix'] = '</div>';
      }
    }
    if (entity_translation_unified_form_sbs_enabled($entity_type, $bundle)) {
      if (!$hidden && isset($form[$field_name]['#weight'])) {
        $form['etuf-' . $field_name . '-sep'] = [
          '#markup' => '',
          '#prefix' => '<div class="etuf-sbs-none">',
          '#suffix' => '</div>',
          '#weight' => $form[$field_name]['#weight'],
        ];
      }
    }
  }
}