2, 'path' => drupal_get_path('module', 'project_package') .'/views', ); } /** * Implement hook_nodeapi(). */ function project_package_nodeapi(&$node, $op, $arg) { switch ($node->type) { case 'project_release': project_package_release_nodeapi($node, $op, $arg); break; } } /** * hook_nodeapi implementation specific to "project_release" nodes. * * @see project_package_nodeapi(). */ function project_package_release_nodeapi(&$node, $op, $arg) { switch ($op) { case 'insert': case 'update': // We can't rely on $node->project_package since nodeapi() doesn't have // a fully loaded $node object. :( $count = db_result(db_query("SELECT COUNT(*) FROM {project_package_local_release_item} WHERE package_nid = %d", $node->nid)); if (!empty($count)) { project_package_set_update_status($node->nid); } break; case 'load': $count = db_result(db_query("SELECT COUNT(*) FROM {project_package_local_release_item} WHERE package_nid = %d", $node->nid)); if (!empty($count)) { $node->project_package['count'] = $count; } break; } } /** * Set the {prn}.update_status for a package based on security updates. */ function project_package_set_update_status($package_nid) { $max = db_result(db_query("SELECT MAX(prn.update_status) FROM {project_release_nodes} prn INNER JOIN {project_package_local_release_item} pp ON prn.nid = pp.item_nid WHERE pp.package_nid = %d", $package_nid)); if ($max == PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE) { // Something included in this package is insecure, so we are, too. db_query("UPDATE {project_release_nodes} SET update_status = %d WHERE nid = %d", PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE, $package_nid); } } /** * Fix the {prn}.update_status column whenever the status changes on items. */ function project_package_check_update_status($item_nids) { $affected_packages = array(); $placeholders = db_placeholders($item_nids); $query = db_query("SELECT * FROM {project_package_local_release_item} WHERE item_nid IN ($placeholders) GROUP BY package_nid", $item_nids); while ($package = db_fetch_object($query)) { $affected_packages[] = $package->package_nid; } if (!empty($affected_packages)) { $placeholders = db_placeholders($affected_packages); db_query("UPDATE {project_release_nodes} SET update_status = %d WHERE nid IN ($placeholders)", array_merge(array(PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE), $affected_packages)); } }