function activity_nodeapi in Activity 6.2
Same name and namespace in other branches
- 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);
}
}
}