function _tracker_remove
Same name in other branches
- 9 core/modules/tracker/tracker.module \_tracker_remove()
- 8.9.x core/modules/tracker/tracker.module \_tracker_remove()
- 10 core/modules/tracker/tracker.module \_tracker_remove()
- 11.x core/modules/tracker/tracker.module \_tracker_remove()
Cleans up indexed data when nodes or comments are removed.
Parameters
$nid: The node ID.
$uid: The author of the node or comment.
$changed: The last changed timestamp of the node.
3 calls to _tracker_remove()
- tracker_comment_delete in modules/
tracker/ tracker.module - Implements hook_comment_delete().
- tracker_comment_unpublish in modules/
tracker/ tracker.module - Implements hook_comment_unpublish().
- tracker_comment_update in modules/
tracker/ tracker.module - Implements hook_comment_update().
File
-
modules/
tracker/ tracker.module, line 319
Code
function _tracker_remove($nid, $uid = NULL, $changed = NULL) {
$node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(
':nid' => $nid,
))->fetchObject();
// The user only keeps his or her subscription if both of the following are true:
// (1) The node exists.
// (2) The user is either the node author or has commented on the node.
$keep_subscription = FALSE;
if ($node) {
// Self-authorship is one reason to keep the user's subscription.
$keep_subscription = $node->uid == $uid;
// Comments are a second reason to keep the user's subscription.
if (!$keep_subscription) {
// Check if the user has commented at least once on the given nid.
$keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = :status', 0, 1, array(
':nid' => $nid,
':uid' => $uid,
':status' => COMMENT_PUBLISHED,
))->fetchField();
}
// If we haven't found a reason to keep the user's subscription, delete it.
if (!$keep_subscription) {
db_delete('tracker_user')->condition('nid', $nid)
->condition('uid', $uid)
->execute();
}
// Now we need to update the (possibly) changed timestamps for other users
// and the node itself.
// We only need to do this if the removed item has a timestamp that equals
// or exceeds the listed changed timestamp for the node.
$tracker_node = db_query('SELECT nid, changed FROM {tracker_node} WHERE nid = :nid', array(
':nid' => $nid,
))->fetchObject();
if ($tracker_node && $changed >= $tracker_node->changed) {
// If we're here, the item being removed is *possibly* the item that
// established the node's changed timestamp.
// We just have to recalculate things from scratch.
$changed = _tracker_calculate_changed($nid);
// And then we push the out the new changed timestamp to our denormalized
// tables.
db_update('tracker_node')->fields(array(
'changed' => $changed,
'published' => $node->status,
))
->condition('nid', $nid)
->execute();
db_update('tracker_node')->fields(array(
'changed' => $changed,
'published' => $node->status,
))
->condition('nid', $nid)
->execute();
}
}
else {
// If the node doesn't exist, remove everything.
db_delete('tracker_node')->condition('nid', $nid)
->execute();
db_delete('tracker_user')->condition('nid', $nid)
->execute();
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.