? bd_video.patch
? play-button.diff
? play.png
? threads.patch
Index: includes/modules/content.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/bd_video/includes/modules/content.inc,v
retrieving revision 1.1.2.8
diff -u -r1.1.2.8 content.inc
--- includes/modules/content.inc	3 Aug 2009 23:07:03 -0000	1.1.2.8
+++ includes/modules/content.inc	4 Aug 2009 11:33:13 -0000
@@ -226,8 +226,7 @@
   
     case 'validate':
 
-      if(!($items[0]['source_file']['uploaded']['file'] && 
-          !$items[0]['source_file']['uploaded']['ignore']) &&
+      if(!$items[0]['source_file']['uploaded']['file'] &&
         !$items[0]['source_file']['acquire_url'] &&
         $items[0]['source_file']['filepath'])
       {
@@ -237,16 +236,14 @@
       }
 
       if($field['required'] && !$items[0]['video_id'] &&
-        !($items[0]['source_file']['uploaded']['file'] && 
-          !$items[0]['source_file']['uploaded']['ignore']) &&
+        !$items[0]['source_file']['uploaded']['file'] &&
         !$items[0]['source_file']['acquire_url'] &&
         !$items[0]['source_file']['filepath'])
       {
         form_set_error($field['field_name'], t('You need to add a video.'));
       }
 
-      if(!($items[0]['preview_image']['source_file']['uploaded']['file'] && 
-          !$items[0]['preview_image']['source_file']['uploaded']['ignore']) &&
+      if(!$items[0]['preview_image']['source_file']['uploaded']['file'] &&
         !$items[0]['preview_image']['source_file']['acquire_url'] &&
         $items[0]['preview_image']['source_file']['filepath'])
       {
@@ -272,10 +269,10 @@
       );
       
       $file = $items[0]['source_file']['uploaded']['file'];
-
-      if($file && !$items[0]['source_file']['uploaded']['ignore']) {
+      
+      if($file) {
         $options['filename'] = $file->filename;
-          
+
         $items[0]['source_file_id'] = 
           storage_api_add_file_from_filepath($file->filepath, $selector_ids['source'], $options);
       }
@@ -302,7 +299,7 @@
 
         $file = $items[0]['preview_image']['source_file']['uploaded']['file'];
 
-        if($file && !$items[0]['preview_image']['source_file']['uploaded']['ignore']) {
+        if($file) {
           $options['filename'] = $file->filename;
             
           $items[0]['custom_image_file_id'] = 
@@ -312,13 +309,15 @@
           $options['get_filename'] = TRUE;
 
           $items[0]['custom_image_file_id'] = 
-            storage_api_add_file_from_url($items[0]['preview_image']['source_file']['acquire_url'], $selector_ids['source'], $options);
+            storage_api_add_file_from_url($items[0]['preview_image']['source_file']['acquire_url'], 
+              $selector_ids['source'], $options);
         }
         else if($items[0]['preview_image']['source_file']['filepath']) {
           $options['get_filename'] = TRUE;
 
           $items[0]['custom_image_file_id'] = 
-            storage_api_add_file_from_filepath($items[0]['preview_image']['source_file']['filepath'], $selector_ids['source'], $options);
+            storage_api_add_file_from_filepath($items[0]['preview_image']['source_file']['filepath'], 
+              $selector_ids['source'], $options);
         }
       }
 
@@ -461,8 +460,7 @@
     );
   }
 
-  if(!$state['uploaded']['ignore'])
-    $file = $storage[$field['field_name']];
+  $file = $storage[$field['field_name']];
 
   if($file) {
     $info = 'Filename: ' . $file->filename . '<br />';
@@ -550,7 +548,8 @@
   );
 
   $field['field_name'] .= '_image';
-  $item['source_file'] = _bd_video_widget_upload_form_item('custom image', $field, $items[0]['preview_image']['source_file'], $storage, $existing);
+  $item['source_file'] = _bd_video_widget_upload_form_item('custom image', $field, 
+    $items[0]['preview_image']['source_file'], $storage, $existing);
 
   return $item;
 }
@@ -603,7 +602,8 @@
   if(!$existing || $field['widget']['allow_replace'] || user_access('administer video')) {
   
     $fieldset['source_file'] = 
-      _bd_video_widget_upload_form_item('video', $field, $items[0]['source_file'], $form_state['storage'], $existing, $field['required']);
+      _bd_video_widget_upload_form_item('video', $field, $items[0]['source_file'], $form_state['storage'], 
+        $existing, $field['required']);
   }
   else {
     $fieldset[] = array(
@@ -619,7 +619,9 @@
 
   $form['#attributes']['enctype'] = "multipart/form-data";
 
-  $form['#validate'][] = 'bd_video_node_form_validate';
+  // we need our validate function to kick in before cck's
+  array_unshift($form['#validate'], 'bd_video_node_form_validate');
+
   $form['#submit'][] = 'bd_video_node_form_submit';
   
   return $fieldset;
@@ -627,21 +629,65 @@
 
 
 function bd_video_node_form_validate($form, &$form_state) {
+  static $fields_processed = array();
 
   foreach($form['#field_info'] as $field) {
     
     if($field['type'] != 'bd_video')
       continue;
       
+    
+    // ensure we only process each field once, or it will malfunction
+      
+    if($fields_processed[$field['field_name']])
+      continue;
+      
+    $fields_processed[$field['field_name']] = TRUE;
+
+      
     $file = file_save_upload($field['field_name']);
     
+    
+    // has a file been uploaded on a previous form submit?
+
+    if($form_state['storage'][$field['field_name']]) {
+    
+      // do we have a new upload, or has the user chosen to ignore the previous one?
+
+      if($file || $form_state['values'][$field['field_name']][0]['source_file']['uploaded']['ignore']) {
+      
+        // delete the previous file and remove it from form storage and values
+
+        file_delete($form_state['storage'][$field['field_name']]->filepath);
+        $form_state['storage'][$field['field_name']] = NULL;  // unset() does not work for some reason
+        unset($form_state['values'][$field['field_name']][0]['source_file']['uploaded']['file']);
+      }
+    }
+
+    
+    // if a file was uploaded, then store its details
+    
     if($file) {
       $form_state['storage'][$field['field_name']] = $file;
       $form_state['values'][$field['field_name']][0]['source_file']['uploaded']['file'] = $file;
     }
 
+
+    // do the same for preview images
+
     $file = file_save_upload($field['field_name'] . '_image');
     
+    if($form_state['storage'][$field['field_name'] . '_image']) {
+    
+      if($file || 
+        $form_state['values'][$field['field_name']][0]['preview_image']['source_file']['uploaded']['ignore']) {
+      
+        file_delete($form_state['storage'][$field['field_name'] . '_image']->filepath);
+        $form_state['storage'][$field['field_name'] . '_image'] = NULL;  // unset() does not work for some reason
+        unset($form_state['values'][$field['field_name']][0]['preview_image']['source_file']['uploaded']['file']);
+      }
+    }
+
     if($file) {
       $form_state['storage'][$field['field_name'] . '_image'] = $file;
       $form_state['values'][$field['field_name']][0]['preview_image']['source_file']['uploaded']['file'] = $file;
