Currently FileField is only invoking the FileField module to check for file references when validating the contents of a Filefield. So, if a file isn't already used in a FileField, you can't add it to a FileField. If it did module_invoke_all to check for any file references from any module, people would be able to use files they uploaded by other means. FileField already uses module_invoke_all() when checking for file references before deleting a file, so it would only delete files that were no longer referenced by anything else.

See #441280: Editing node causes Referencing to the file used in the field is not allowed for discussion related to this issue.


boabjohn’s picture

+1 and thanks very much Adamo for pushing this along...and thanks quicksketch for following up with the code.

Now waiting for a fix that's better than the (much appreciated) hack at

quicksketch’s picture

Status: Active » Needs review
2.45 KB

Here's the basic idea implemented in a patch. This introduces an implementation of hook_file_delete() for FileField, since it is necessary if a file were uploaded by FileField but then force-deleted by some other module (like IMCE). I haven't actually tested this in any capacity, just an idea of how we should go about this.

Stephen Scholtz’s picture


As per Adamo's original post, I have the same use case with IMCE as all purpose file/image-browser in conjunction with File Field + File Field Sources.

quicksketch’s picture

Version: 6.x-3.x-dev » 6.x-3.3
Status: Needs review » Fixed
4.39 KB

This problem was a bit more complicated than I thought, but the patch in #2 had the right idea. There were a few caveats where FileField shouldn't be calling node_save() multiple times when a node is saved and file has been removed. Likewise, FileField should not be attempting to delete a file multiple times if field_file_delete($file, TRUE) is called to force the deletion of a file.

I've committed this patch so that we can get it in as part of the 3.4 release.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.