Issue #2835869 by hchonov, gease, tstoeckler: Prepare content translation for nested inline entity forms
parent
69e0b9feb9
commit
c4e5c497da
|
|
@ -314,18 +314,18 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
public function entityFormAlter(array &$form, FormStateInterface $form_state, EntityInterface $entity) {
|
public function entityFormAlter(array &$form, FormStateInterface $form_state, EntityInterface $entity) {
|
||||||
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
|
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
|
||||||
|
|
||||||
|
$metadata = $this->manager->getTranslationMetadata($entity);
|
||||||
$form_object = $form_state->getFormObject();
|
$form_object = $form_state->getFormObject();
|
||||||
$form_langcode = $form_object->getFormLangcode($form_state);
|
$form_langcode = $form_object->getFormLangcode($form_state);
|
||||||
$entity_langcode = $entity->getUntranslated()->language()->getId();
|
$entity_langcode = $entity->getUntranslated()->language()->getId();
|
||||||
$source_langcode = $this->getSourceLangcode($form_state);
|
|
||||||
|
|
||||||
$new_translation = !empty($source_langcode);
|
$new_translation = $entity->isNewTranslation();
|
||||||
$translations = $entity->getTranslationLanguages();
|
$translations = $entity->getTranslationLanguages();
|
||||||
if ($new_translation) {
|
if ($new_translation) {
|
||||||
// Make sure a new translation does not appear as existing yet.
|
// Make sure a new translation does not appear as existing yet.
|
||||||
unset($translations[$form_langcode]);
|
unset($translations[$form_langcode]);
|
||||||
}
|
}
|
||||||
$is_translation = !$form_object->isDefaultFormLangcode($form_state);
|
$is_translation = $new_translation || ($entity->language()->getId() != $entity_langcode);
|
||||||
$has_translations = count($translations) > 1;
|
$has_translations = count($translations) > 1;
|
||||||
|
|
||||||
// Adjust page title to specify the current language being edited, if we
|
// Adjust page title to specify the current language being edited, if we
|
||||||
|
|
@ -336,7 +336,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
// When editing the original values display just the entity label.
|
// When editing the original values display just the entity label.
|
||||||
if ($is_translation) {
|
if ($is_translation) {
|
||||||
$t_args = ['%language' => $languages[$form_langcode]->getName(), '%title' => $entity->label(), '@title' => $title];
|
$t_args = ['%language' => $languages[$form_langcode]->getName(), '%title' => $entity->label(), '@title' => $title];
|
||||||
$title = empty($source_langcode) ? t('@title [%language translation]', $t_args) : t('Create %language translation of %title', $t_args);
|
$title = $new_translation ? t('Create %language translation of %title', $t_args) : t('@title [%language translation]', $t_args);
|
||||||
}
|
}
|
||||||
$form['#title'] = $title;
|
$form['#title'] = $title;
|
||||||
}
|
}
|
||||||
|
|
@ -344,6 +344,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
// Display source language selector only if we are creating a new
|
// Display source language selector only if we are creating a new
|
||||||
// translation and there are at least two translations available.
|
// translation and there are at least two translations available.
|
||||||
if ($has_translations && $new_translation) {
|
if ($has_translations && $new_translation) {
|
||||||
|
$source_langcode = $metadata->getSource();
|
||||||
$form['source_langcode'] = [
|
$form['source_langcode'] = [
|
||||||
'#type' => 'details',
|
'#type' => 'details',
|
||||||
'#title' => t('Source language: @language', ['@language' => $languages[$source_langcode]->getName()]),
|
'#title' => t('Source language: @language', ['@language' => $languages[$source_langcode]->getName()]),
|
||||||
|
|
@ -435,7 +436,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
'#title' => t('Translation'),
|
'#title' => t('Translation'),
|
||||||
'#tree' => TRUE,
|
'#tree' => TRUE,
|
||||||
'#weight' => 10,
|
'#weight' => 10,
|
||||||
'#access' => $this->getTranslationAccess($entity, $source_langcode ? 'create' : 'update')->isAllowed(),
|
'#access' => $this->getTranslationAccess($entity, $new_translation ? 'create' : 'update')->isAllowed(),
|
||||||
'#multilingual' => TRUE,
|
'#multilingual' => TRUE,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -450,7 +451,6 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
}
|
}
|
||||||
|
|
||||||
// A new translation is enabled by default.
|
// A new translation is enabled by default.
|
||||||
$metadata = $this->manager->getTranslationMetadata($entity);
|
|
||||||
$status = $new_translation || $metadata->isPublished();
|
$status = $new_translation || $metadata->isPublished();
|
||||||
// If there is only one published translation we cannot unpublish it,
|
// If there is only one published translation we cannot unpublish it,
|
||||||
// since there would be nothing left to display.
|
// since there would be nothing left to display.
|
||||||
|
|
@ -680,11 +680,6 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
||||||
$metadata->setPublished(!empty($values['status']));
|
$metadata->setPublished(!empty($values['status']));
|
||||||
$metadata->setCreatedTime(!empty($values['created']) ? strtotime($values['created']) : REQUEST_TIME);
|
$metadata->setCreatedTime(!empty($values['created']) ? strtotime($values['created']) : REQUEST_TIME);
|
||||||
|
|
||||||
$source_langcode = $this->getSourceLangcode($form_state);
|
|
||||||
if ($source_langcode) {
|
|
||||||
$metadata->setSource($source_langcode);
|
|
||||||
}
|
|
||||||
|
|
||||||
$metadata->setOutdated(!empty($values['outdated']));
|
$metadata->setOutdated(!empty($values['outdated']));
|
||||||
if (!empty($values['retranslate'])) {
|
if (!empty($values['retranslate'])) {
|
||||||
$this->retranslate($entity, $form_langcode);
|
$this->retranslate($entity, $form_langcode);
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,9 @@ class ContentTranslationController extends ControllerBase {
|
||||||
* The language to be used as target.
|
* The language to be used as target.
|
||||||
*/
|
*/
|
||||||
public function prepareTranslation(ContentEntityInterface $entity, LanguageInterface $source, LanguageInterface $target) {
|
public function prepareTranslation(ContentEntityInterface $entity, LanguageInterface $source, LanguageInterface $target) {
|
||||||
|
$source_langcode = $source->getId();
|
||||||
/* @var \Drupal\Core\Entity\ContentEntityInterface $source_translation */
|
/* @var \Drupal\Core\Entity\ContentEntityInterface $source_translation */
|
||||||
$source_translation = $entity->getTranslation($source->getId());
|
$source_translation = $entity->getTranslation($source_langcode);
|
||||||
$target_translation = $entity->addTranslation($target->getId(), $source_translation->toArray());
|
$target_translation = $entity->addTranslation($target->getId(), $source_translation->toArray());
|
||||||
|
|
||||||
// Make sure we do not inherit the affected status from the source values.
|
// Make sure we do not inherit the affected status from the source values.
|
||||||
|
|
@ -88,6 +89,7 @@ class ContentTranslationController extends ControllerBase {
|
||||||
// creation time.
|
// creation time.
|
||||||
$metadata->setAuthor($user);
|
$metadata->setAuthor($user);
|
||||||
$metadata->setCreatedTime(REQUEST_TIME);
|
$metadata->setCreatedTime(REQUEST_TIME);
|
||||||
|
$metadata->setSource($source_langcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue