_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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 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.