function translation_remove_from_set
Removes a node from its translation set and updates accordingly.
Parameters
$node: A node object.
1 call to translation_remove_from_set()
- translation_node_delete in modules/
translation/ translation.module - Implements hook_node_delete().
File
-
modules/
translation/ translation.module, line 430
Code
function translation_remove_from_set($node) {
if (isset($node->tnid) && $node->tnid) {
$query = db_update('node')->fields(array(
'tnid' => 0,
'translate' => 0,
));
// Determine which nodes to apply the update to.
$set_nids = db_query('SELECT nid FROM {node} WHERE tnid = :tnid', array(
':tnid' => $node->tnid,
))
->fetchCol();
if (count($set_nids) == 1) {
// There is only one node left in the set: remove the set altogether.
$query->condition('tnid', $node->tnid)
->execute();
$flush_set = TRUE;
}
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();
$flush_set = TRUE;
}
}
// Flush the modified nodes from the load cache.
$nids = !empty($flush_set) ? $set_nids : array(
$node->nid,
);
entity_get_controller('node')->resetCache($nids);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.