function translation_remove_from_set

Removes a node from its translation set and updates accordingly.

Parameters

$node: A node entity.

1 call to translation_remove_from_set()
translation_node_predelete in drupal/core/modules/translation/translation.module
Implements hook_node_predelete().

File

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

Code

function translation_remove_from_set($node) {
  if (isset($node->tnid)) {
    $query = db_update('node')
      ->fields(array(
      'tnid' => 0,
      'translate' => 0,
    ));
    if (db_query('SELECT COUNT(*) FROM {node} WHERE tnid = :tnid', array(
      ':tnid' => $node->tnid,
    ))
      ->fetchField() == 1) {

      // There is only one node left in the set: remove the set altogether.
      $query
        ->condition('tnid', $node->tnid)
        ->execute();
    }
    else {
      $query
        ->condition('nid', $node->nid)
        ->execute();

      // If the node being removed was the source of the translation set,
      // we pick a new source - preferably one that is up to date.
      if ($node->tnid == $node->nid) {
        $new_tnid = db_query('SELECT nid FROM {node} WHERE tnid = :tnid ORDER BY translate ASC, nid ASC', array(
          ':tnid' => $node->tnid,
        ))
          ->fetchField();
        db_update('node')
          ->fields(array(
          'tnid' => $new_tnid,
        ))
          ->condition('tnid', $node->tnid)
          ->execute();
      }
    }
  }
}