Index: filefield_field.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield_field.inc,v retrieving revision 1.25 diff -u -r1.25 filefield_field.inc --- filefield_field.inc 23 Mar 2009 16:10:37 -0000 1.25 +++ filefield_field.inc 26 Mar 2009 05:40:18 -0000 @@ -156,8 +156,11 @@ function filefield_field_delete($node, $field, &$items, $teaser, $page) { foreach ($items as $delta => $item) { - // For hook_file_references, remember that this is being deleted. + // For hook_file_references(), remember that this is being deleted. $item['field_name'] = $field['field_name']; + // Pass in the nid of the node that is being removed so all references can + // be counted in hook_file_references(). + $item['delete_nid'] = $node->nid; field_file_delete($item); } } Index: field_file.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/field_file.inc,v retrieving revision 1.27 diff -u -r1.27 field_file.inc --- field_file.inc 19 Mar 2009 01:50:08 -0000 1.27 +++ field_file.inc 26 Mar 2009 05:40:17 -0000 @@ -383,9 +383,20 @@ )); // If a field_name is present in the file object, the file is being deleted - // from this field, decrement the number of total references by one. + // from this field. if (isset($file->field_name) && $field['field_name'] == $file->field_name) { - --$references; + // If deleting the entire node, count how many references to decrement. + if (isset($file->delete_nid)) { + $node_references = db_result(db_query( + 'SELECT count('. $db_info['columns']['fid']['column'] .') + FROM {'. $db_info['table'] .'} + WHERE '. $db_info['columns']['fid']['column'] .' = %d AND nid = %d', $file->fid, $file->delete_nid + )); + $references = $references - $node_references; + } + else { + $references = $references - 1; + } } return $references; }