Index: imagefield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/imagefield/imagefield.module,v
retrieving revision 1.30.2.6.2.16
diff -u -r1.30.2.6.2.16 imagefield.module
--- imagefield.module	22 Apr 2007 09:45:30 -0000	1.30.2.6.2.16
+++ imagefield.module	24 Apr 2007 10:42:13 -0000
@@ -89,6 +89,14 @@
   }
 }
 
+function imagefield_default_item() {
+  return array(
+    'fid' => 0,
+    'title' => '',
+    'alt' => '',
+  );
+}
+
 /**
  * insert a file into the database.
  * @param $node
@@ -158,35 +166,55 @@
   switch ($op) {
     // called after content.module loads default data.
     case 'load':
-      $output = array();
       if (count($items)) {
-        $values = array();
         foreach ($items as $delta => $file) {
-          $items[$delta]  = array_merge((array)$items[$delta], _imagefield_file_load($file['fid']));
+          if (!empty($file)) {
+            // only load the image if it has got a valid database entry
+            $file = _imagefield_file_load($file['fid']);
+            if (empty($file)) {
+              unset($items[$delta]);
+            }
+            else {
+              $items[$delta] = array_merge((array)$items[$delta], $file);
+            }
+          }
         }
+        $items = array_values($items); // compact deltas
         return array($fieldname => $items);
-      };
-      break; 
+      }
+      return array();
 
     // called before content.module defaults.
     case 'insert':
-      foreach ($items as  $delta => $item) {
-        $items[$delta] = imagefield_file_insert($node, $item, $field); 
+      foreach ($items as $delta => $item) {
+        $items[$delta] = imagefield_file_insert($node, $item, $field);
+        // Remove non-existant images from items
+        if (empty($items[$delta])) {
+          unset($items[$delta]);
+        }
       }
+      $items = array_values($items); // compact deltas
       imagefield_clear_field_session($fieldname);
       break;
 
     // called before content.module defaults.
     case 'update':
       foreach ($items as $delta => $item) {
-        $items[$delta] = imagefield_file_update($node, $item, $field); 
-        // Remove non-existant files from items
+        $items[$delta] = imagefield_file_update($node, $item, $field);
+
+        // If the file has been deleted, unset the file entry so that it's
+        // actually deleted from the database, or at least set it to a
+        // default item if CCK won't delete it.
         if (empty($items[$delta])) {
-          unset($items[$delta]);
+          if ($field['multiple']) {
+            unset($items[$delta]);
+          }
+          else {
+            $items[$delta] = imagefield_default_item();
+          }
         }
       }
-      // Compact deltas.
-      $items = array_values($items);
+      $items = array_values($items); // compact deltas
       imagefield_clear_field_session($fieldname);
       break;
 
@@ -686,8 +714,12 @@
   if (!empty($fid) && is_numeric($fid)) { 
     $result = db_query('SELECT * FROM {files} WHERE fid = %d', $fid);
     $file = db_fetch_array($result);
+    if ($file) {
+      return $file;
+    }
   }
-  return is_array($file) ? $file : array();
+  // return an empty array if nothing was found.
+  return array();
 }
 
 function theme_imagefield_view_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
