function upload_delete_revision($node) { if (is_array($node->files)) { $files = array(); foreach ($node->files as $file) { // Check if the file will be used after this revision is deleted $count = db_result(db_query('SELECT COUNT(fid) FROM {upload} WHERE fid = %d', $file->fid)); // if the file won't be used, delete it if ($count < 2) { drupal_delete_add_query('DELETE FROM {files} WHERE fid = %d', $file->fid); $files[$file->fid] = $file; } } } // Delete the revision. drupal_delete_add_query('DELETE FROM {upload} WHERE vid = %d', $node->vid); // Register a callback to delete the files. drupal_delete_add_callback(array('upload_delete_post' => array($files))); } function upload_delete_post($files) { foreach ($files as $file) { // Delete all files associated with the node or revision. file_delete($file->filepath); } }