function entity_translation_unified_form_node_insert_other_language_fields in Entity Translation Unified Form 8
Same name and namespace in other branches
- 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'],
];
}
}
}
}