function filefield_delete_file_references in FileField 6.3
Delete all node references of a file.
Parameters
$file: The file object for which to find references.
$field: Optional. The CCK field array or field name as a string.
1 call to filefield_delete_file_references()
- filefield_file_delete in ./
filefield.module - Implementation of hook_file_delete().
File
- ./
filefield.module, line 1112 - FileField: Defines a CCK file field type.
Code
function filefield_delete_file_references($file, $field = NULL) {
$fields = filefield_get_field_list(NULL, $field);
$file = (object) $file;
$references = filefield_get_file_references($file, $field);
foreach ($references as $nid => $node_references) {
// Do not update a node if it is already being deleted directly by the user.
if (isset($file->delete_nid) && $file->delete_nid == $nid) {
continue;
}
foreach ($node_references as $vid) {
// Do not update the node revision if that revision is already being
// saved or deleted directly by the user.
if (isset($file->delete_vid) && $file->delete_vid == $vid) {
continue;
}
$node = node_load($nid, $vid);
foreach ($fields as $field_name => $field) {
if (isset($node->{$field_name})) {
foreach ($node->{$field_name} as $delta => $item) {
if ($item['fid'] == $file->fid) {
unset($node->{$field_name}[$delta]);
}
}
$node->{$field_name} = array_values(array_filter($node->{$field_name}));
}
}
// Save the node after removing the file references. This flag prevents
// FileField from attempting to delete the file again.
$node->skip_filefield_delete = TRUE;
node_save($node);
}
}
}