Index: filefield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield.module,v
retrieving revision 1.23
diff -u -r1.23 filefield.module
--- filefield.module	30 Mar 2007 03:20:24 -0000	1.23
+++ filefield.module	24 Apr 2007 16:53:54 -0000
@@ -130,7 +130,7 @@
  */
 function filefield_file_update($node, $field, &$file) {
   $file = (array)$file; 
-  if ($file['remove'] == TRUE) {
+  if ($file['delete'] == TRUE) {
      module_invoke_all('filefield', 'file_delete', $node, $field, $file);
      _filefield_file_delete($node, $field, $file);
      // should I return an array here instead as imagefield does, or is that a bug in 
@@ -339,7 +339,7 @@
     if (!$field['multiple']) {
       if (is_array($node_field)) {
         foreach($node_field as $delta => $session_file) {
-          $node_field[$delta]['remove'] = TRUE;
+          $node_field[$delta]['delete'] = TRUE;
         }
       }
       // Remove old temporary file from session.
@@ -392,13 +392,13 @@
   if (is_array($node_field) && count($node_field)) {
     foreach($node_field as $delta => $file) {
       // @todo: split into its own form and theme functions per file like imagefield
-      if ($file['filepath'] && !$file['remove']) {
+      if ($file['filepath'] && !$file['delete']) {
         $form[$fieldname][$delta] = _filefield_file_form($node, $field, $file);
       }
-      elseif ($file['filepath'] && $file['remove']) {
-        $form[$fieldname][$delta]['remove'] = array(
+      elseif ($file['filepath'] && $file['delete']) {
+        $form[$fieldname][$delta]['delete'] = array(
           '#type' => 'hidden',
-          '#value' => $file['remove'],
+          '#value' => $file['delete'],
         );
       }
     }
@@ -436,10 +436,10 @@
     '#prefix' => '<div class="filefield-edit-file-size">',
     '#suffix' => '</div>',
   );
-  $form['remove'] = array(
-    '#type' => 'checkbox', 
-    '#default_value' => $file['remove'],
-    '#title' => t('Remove'),
+  $form['delete'] = array(
+    '#type' => 'checkbox',
+    '#default_value' => $file['delete'],
+    '#title' => t('Delete'),
   );
   $form['list'] = array(
     '#type' => 'checkbox', 
@@ -469,10 +469,26 @@
   return $form;
 }
 
+
+/**
+ * Validate the widget.
+ */
 function _filefield_widget_validate($node, $field, $node_field) {
   if ($field['required']) {
-    if (!count($node_field)) {
-      form_set_error($fieldname, $field['widget']['label'] .' is required.');
+    // Sum all the items marked for deletion, so we can make sure the end user
+    // isn't deleting all of the files.
+    $deleted = 0;
+    foreach($items as $item) {
+      if ($item['delete']) {
+        $deleted++;
+      }
+    }
+
+    if (!count($items)) {
+      form_set_error($field['field_name'], $field['widget']['label'] .' is required. Please upload a file.');
+    }
+    else if (count($items) == $deleted ) {
+      form_set_error($field['field_name'], $field['widget']['label'] .' is required. Please uncheck at least one delete checkbox or upload another file.');
     }
   }
 }
