1.20.x translation.module translation_node_prepare(Node $node)

Implements hook_node_prepare().

File

modules/translation/translation.module, line 319
Manages content translations.

Code

function translation_node_prepare(Node $node) {
  // Only act if we are dealing with a content type supporting translations.
  if (translation_supported_type($node->type) && 
    // And it's a new node.
    empty($node->nid) && 
    // And the user has permission to translate content.
    user_access('translate content') && 
    // And the $_GET variables are set properly.
    isset($_GET['translation']) && 
    isset($_GET['target']) && 
    is_numeric($_GET['translation'])) {

    $source_node = node_load($_GET['translation']);
    if (empty($source_node) || !node_access('view', $source_node)) {
      // Source node not found or no access to view. We should not check
      // for edit access, since the translator might not have permissions
      // to edit the source node but should still be able to translate.
      return;
    }

    $language_list = language_list();
    $langcode = $_GET['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])) {
        backdrop_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->title,
          '%language' => isset($language_list[$langcode]->native) ? $language_list[$langcode]->native : $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, $node->langcode, $source_node, $source_node->langcode);
  }
}