You are here

function activity_nodeapi in Activity 6.2

Same name and namespace in other branches
  1. 5 includes/node.inc \activity_nodeapi()

Implementation of hook_nodeapi().

File

./activity.module, line 373
Primarily Drupal hooks and global API functions to manipulate activity.

Code

function activity_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  if ($op == 'delete') {

    // Remove all activity records for this node.
    $db_result = db_query("SELECT aid FROM {activity} WHERE nid = %d", $node->nid);
    $aids = array();
    while ($aid_obj = db_fetch_object($db_result)) {
      $aids[] = $aid_obj->aid;
    }
    activity_delete($aids);
  }
  if ($op == 'update') {

    // Find all the Activities for this node and determine status bit for each.
    $db_result = db_query("SELECT a.aid, u.status as user_status, a.status as activity_status FROM {activity} a INNER JOIN {users} u ON u.uid = a.uid WHERE a.uid <> 0 AND a.nid = %d", $node->nid);
    $update_statuses = array();
    while ($row = db_fetch_object($db_result)) {
      $new_status = $row->user_status == 1 && $node->status == 1 ? 1 : 0;
      if ($new_status != $row->activity_status) {
        $update_statuses[$new_status][] = $row->aid;
      }
    }
    foreach ($update_statuses as $status => $aids) {
      $arguments = $aids;

      // Shift the status on top of $aids. This allows us to pass in one array
      // to db_query.
      array_unshift($arguments, $status);
      db_query("UPDATE {activity} SET status = %d WHERE aid IN (" . db_placeholders($aids) . ")", $arguments);
    }
  }
}