function ContentTranslationController::prepareTranslation

Same name and namespace in other branches
  1. 9 core/modules/content_translation/src/Controller/ContentTranslationController.php \Drupal\content_translation\Controller\ContentTranslationController::prepareTranslation()
  2. 8.9.x core/modules/content_translation/src/Controller/ContentTranslationController.php \Drupal\content_translation\Controller\ContentTranslationController::prepareTranslation()
  3. 10 core/modules/content_translation/src/Controller/ContentTranslationController.php \Drupal\content_translation\Controller\ContentTranslationController::prepareTranslation()

Populates target values with the source values.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity being translated.

\Drupal\Core\Language\LanguageInterface $source: The language to be used as source.

\Drupal\Core\Language\LanguageInterface $target: The language to be used as target.

1 call to ContentTranslationController::prepareTranslation()
ContentTranslationController::add in core/modules/content_translation/src/Controller/ContentTranslationController.php
Builds an add translation page.

File

core/modules/content_translation/src/Controller/ContentTranslationController.php, line 61

Class

ContentTranslationController
Base class for entity translation controllers.

Namespace

Drupal\content_translation\Controller

Code

public function prepareTranslation(ContentEntityInterface $entity, LanguageInterface $source, LanguageInterface $target) {
    $source_langcode = $source->getId();
    
    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
    $storage = $this->entityTypeManager()
        ->getStorage($entity->getEntityTypeId());
    // Once translations from the default revision are added, there may be
    // additional draft translations that don't exist in the default revision.
    // Add those translations too so that they aren't deleted when the new
    // translation is saved.
    
    /** @var \Drupal\Core\Entity\ContentEntityInterface $default_revision */
    $default_revision = $storage->load($entity->id());
    // Check the entity isn't missing any translations.
    $languages = $this->languageManager()
        ->getLanguages();
    foreach ($languages as $language) {
        $langcode = $language->getId();
        if ($entity->hasTranslation($langcode) || $target->getId() === $langcode) {
            continue;
        }
        $latest_revision_id = $storage->getLatestTranslationAffectedRevisionId($entity->id(), $langcode);
        if ($latest_revision_id) {
            if ($default_revision->hasTranslation($langcode)) {
                $existing_translation = $default_revision->getTranslation($langcode);
                $existing_translation->setNewRevision(FALSE);
                $existing_translation->isDefaultRevision(FALSE);
                $existing_translation->setRevisionTranslationAffected(FALSE);
                $entity->addTranslation($langcode, $existing_translation->toArray());
            }
        }
    }
    
    /** @var \Drupal\Core\Entity\ContentEntityInterface $source_translation */
    $source_translation = $entity->getTranslation($source_langcode);
    $target_translation = $entity->addTranslation($target->getId(), $source_translation->toArray());
    // Make sure we do not inherit the affected status from the source values.
    if ($entity->getEntityType()
        ->isRevisionable()) {
        $target_translation->setRevisionTranslationAffected(NULL);
    }
    
    /** @var \Drupal\user\UserInterface $user */
    $user = $this->entityTypeManager()
        ->getStorage('user')
        ->load($this->currentUser()
        ->id());
    $metadata = $this->manager
        ->getTranslationMetadata($target_translation);
    // Update the translation author to current user, as well the translation
    // creation time.
    $metadata->setAuthor($user);
    $metadata->setCreatedTime($this->time
        ->getRequestTime());
    $metadata->setSource($source_langcode);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.