_tracker_remove($nid, $uid = NULL, $changed = NULL)
Cleans up indexed data when nodes or comments are removed.
Parameters
int $nid: The node ID.
int $uid: The author of the node or comment.
int $changed: The last changed timestamp of the node.
File
- core/modules/tracker/tracker.module, line 313
- Tracks recent content posted by a user or users.
Code
function _tracker_remove($nid, $uid = NULL, $changed = NULL) { $node = Node::load($nid); // The user only keeps their subscription if the node exists. if ($node) { // And they are the author of the node. $keep_subscription = ($node->getOwnerId() == $uid); // Or if they have commented on the node. if (!$keep_subscription) { // Check if the user has commented at least once on the given nid. $keep_subscription = \Drupal::entityQuery('comment') ->condition('entity_type', 'node') ->condition('entity_id', $nid) ->condition('uid', $uid) ->condition('status', CommentInterface::PUBLISHED) ->range(0, 1) ->count() ->execute(); } // 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($node); // And then we push the out the new changed timestamp to our denormalized // tables. db_update('tracker_node') ->fields(array( 'changed' => $changed, 'published' => $node->isPublished(), )) ->condition('nid', $nid) ->execute(); db_update('tracker_node') ->fields(array( 'changed' => $changed, 'published' => $node->isPublished(), )) ->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(); } }
Please login to continue.