function translation_node_prepare

Implements hook_node_prepare().

File

drupal/core/modules/translation/translation.module, line 309
Manages content translations.

Code

function translation_node_prepare(EntityInterface $node) {
  $query = Drupal::request()->query;
  $translation = $query
    ->get('translation');
  $target = $query
    ->get('target');

  // Only act if we are dealing with a content type supporting translations.
  if (translation_supported_type($node->type) && empty($node->nid) && !empty($translation) && !empty($target) && is_numeric($translation)) {
    $source_node = node_load($translation);
    $language_list = language_list();
    $langcode = $target;
    if (!isset($language_list[$langcode]) || $source_node->langcode == $langcode) {

      // If not supported language, or same language as source node, break.
      return;
    }

    // Ensure we don't have an existing translation in this language.
    if (!empty($source_node->tnid)) {
      $translations = translation_node_get_translations($source_node->tnid);
      if (isset($translations[$langcode])) {
        drupal_set_message(t('A translation of %title in %language already exists, a new %type will be created instead of a translation.', array(
          '%title' => $source_node
            ->label(),
          '%language' => $language_list[$langcode]->name,
          '%type' => $node->type,
        )), 'error');
        return;
      }
    }

    // Populate fields based on source node.
    $node->langcode = $langcode;
    $node->translation_source = $source_node;
    $node->title = $source_node->title;

    // Add field translations and let other modules module add custom translated
    // fields.
    field_attach_prepare_translation($node, $node->langcode, $source_node, $source_node->langcode);
  }
}