Index: filefield_widget.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield_widget.inc,v retrieving revision 1.66 diff -u -r1.66 filefield_widget.inc --- filefield_widget.inc 20 Mar 2009 22:54:58 -0000 1.66 +++ filefield_widget.inc 26 Mar 2009 18:28:16 -0000 @@ -81,8 +81,10 @@ function filefield_widget_settings_save($widget) { return array( - 'file_extensions', 'file_path', 'max_filesize_per_file', - 'max_filesize_per_node', 'file_widgets' + 'file_extensions', + 'file_path', + 'max_filesize_per_file', + 'max_filesize_per_node', ); } @@ -153,19 +155,27 @@ */ function filefield_widget_value($element, $edit = FALSE) { if (!$edit) { - $file = field_file_load($element['#default_value']['fid']); + $file = field_file_load($element['#default_value']['fid']); $item = $element['#default_value']; } else { $item = array_merge($element['#default_value'], $edit); - // uploads take priority over value of fid text field. + $field = content_fields($element['#field_name'], $element['#type_name']); + + // Uploads take priority over value of fid text field. if ($fid = filefield_save_upload($element)) { $item['fid'] = $fid; } - // load file. + // Load file if the FID has changed so that it can be saved by CCK. $file = field_file_load($item['fid']); + + // Checkboxes loose their value when empty. + // If the list field is present make sure its unchecked value is saved. + if ($field['list_field'] && empty($edit['list'])) { + $item['list'] = 0; + } } - // merge file and item data so it is available to all widgets. + // Merge file and item data so it is available to all widgets. $item = array_merge($item, $file); return $item;