Author: sevein
Date: Thu Sep 17 17:20:31 2009
New Revision: 3398

Log:
New features and fixes in multi-file import:
- Uploads are removable by user before import.
- Files are renamed dinamically when you write into title field (placeholder).
- Almost ready repeated files detector...

Modified:
   trunk/apps/qubit/modules/digitalobject/templates/multiFileUploadSuccess.php
   trunk/web/js/multiFileUpload.js

Modified: 
trunk/apps/qubit/modules/digitalobject/templates/multiFileUploadSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/digitalobject/templates/multiFileUploadSuccess.php 
Thu Sep 17 16:58:03 2009        (r3397)
+++ trunk/apps/qubit/modules/digitalobject/templates/multiFileUploadSuccess.php 
Thu Sep 17 17:20:31 2009        (r3398)
@@ -12,7 +12,7 @@
 
     <div class="form-item">
       <label for="parent_id"><?php echo __('title'); ?></label>
-      <?php echo object_input_tag($infoObjectTemplate, 'getTitle', 
array('size' => 20)) ?>
+      <?php echo object_input_tag($infoObjectTemplate, 'getTitle', 
array('size' => 20, 'onkeyup' => 'renumerateUploads()')) ?>
       <span class="note"><?php echo __('The "<b>%dd%</b>" placeholder will be 
replaced with a incremental number (e.g. \'image <b>01</b>\', \'image 
<b>02</b>\')')?></span>
     </div>
 
@@ -66,6 +66,7 @@
   var i18nInfoObjectTitle = "'.__('%1% title', array('%1%' => 
sfConfig::get('app_ui_label_informationobject'))).'";
   var i18nFilename  = "'.__('file name').'";
   var i18nFilesize  = "'.__('file size').'";
+  var i18nDelete = "'.__('Delete').'";
   var i18nOversizedFileListMessage = "'.__('These files couldn\'t be uploaded 
because of file size upload limits').'";
 '); ?>
 
@@ -73,6 +74,7 @@
   var uploader = new YAHOO.widget.Uploader('uploaderOverlay');
 
   var fileList;
+  var uploadedList = Array();
 
   uploader.addListener('contentReady', handleContentReady);
   uploader.addListener('fileSelect', onFileSelect)

Modified: trunk/web/js/multiFileUpload.js
==============================================================================
--- trunk/web/js/multiFileUpload.js     Thu Sep 17 16:58:03 2009        (r3397)
+++ trunk/web/js/multiFileUpload.js     Thu Sep 17 17:20:31 2009        (r3398)
@@ -61,7 +61,6 @@
   if ('fileList' in event && event.fileList != null)
   {
     fileList = event.fileList;
-    var oversizedFileList = new Array();
 
     // Make space for a thumbnail and progress bar
     for (var i in fileList)
@@ -70,9 +69,19 @@
       var fileName = fileList[i].name;
       var fileSize = fileList[i].size; // bytes
 
+      if (-1 < jQuery.inArray(fileHash, uploadedList))
+      {
+        break;
+      }
+
       if (fileSize > maxUploadSize)
       {
-        oversizedFileList[oversizedFileList.length] = fileName;
+        // Create an upload block for this digital object
+        var uploadBlock = '<div id="upload-' + fileHash + '" 
class="multiFileUpload">';
+        uploadBlock    += '<ul class=\"validation_error\"><li>Warning, ' + 
fileName + ' exceeds maximum upload size.</li></ul>';
+        uploadBlock    += '</div>';
+        $('#uploads').append(uploadBlock);
+
         uploader.removeFile(fileHash);
       }
       else
@@ -92,28 +101,8 @@
         var progbar = '<div style="height:5px;width:' + thumbWidth + 
'px;background-color:#CCC;"></div>';
         $('#thumbnail-' + fileHash + ' div.progress-bar').html(progbar);
       }
-    }
-
-    // Show a list of files that couldn't be uploaded because maxUploadSize 
limit
-    if (oversizedFileList.length > 0)
-    {
-      if ($('#oversizedFileList').length)
-      {
-        $('#oversizedFileList').remove();
-      }
-
-      var oversizedFileListBlock = '<div id=\"oversizedFileList\">';
-      oversizedFileListBlock += '<p>' + i18nOversizedFileListMessage + ': ';
-
-      for (var j in oversizedFileList)
-      {
-        oversizedFileListBlock += oversizedFileList[j] + (j < 
(oversizedFileList.length - 1) ? ', ' : '');
-      }
-
-      oversizedFileListBlock += '.</p>';
-      oversizedFileListBlock += '</div>';
 
-      $('#uploads').before(oversizedFileListBlock);
+      uploadedList[uploadedList.length] = fileHash;
     }
 
     // Start upload
@@ -156,18 +145,10 @@
 function onUploadResponse(event)
 {
   var uploadFiles = eval('(' + event['data'] + ')');
-  var count = 0;
   var inputTag, imageTag;
 
   for (i in uploadFiles)
   {
-    if ($('input[type=hidden][name*=md5sum][value=' + uploadFiles[i].md5sum + 
']').length)
-    {
-      $('div#upload-' + event['id']).remove();
-      showWarning('Warning: duplicate of ', event['id']);
-      continue;
-    }
-
     var thumbnail = '<img src="' + uploadTmpDir + '/' + uploadFiles[i].thumb + 
'"/>';
     $('#thumbnail-' + event['id']).html(thumbnail);
 
@@ -176,30 +157,32 @@
       return $(this).attr('style') + '; min-height: 100px';
     });
 
-    // Get the file index counting objects already uploaded
-    var lastInputName = $('input[type=hidden][name*=files]:last').attr("name");
-    fileIndex = lastInputName ? 
parseInt(lastInputName.match(/[0-9]+/).shift()) + 1 : 0;
-
-    // Add 1 to the index to give a value > 0 and pad with a zero if < 10
-    fileCounter = parseInt(fileIndex) + 1;
-
-    // Match and replace %dd% placeholder
-    var titleTemplate = document.getElementById('uploadForm')['title'].value;
-    var ioTitle = replacePlaceHolder(titleTemplate, fileCounter);
+    // Get the file index from the id passed by YUI
+    var fileIndex = event['id'].match(/([0-9]+)$/).shift();
+    if (null == fileIndex || isNaN(parseInt(fileIndex)))
+    {
+      fileIndex = i;
+    }
 
     // Write upload file data
     var hiddenFields = '<input type="hidden" name="files[' + fileIndex + 
'][name]" value="' + uploadFiles[i].name + '" />';
-    hiddenFields += '<input type=\"hidden\" name=files[' + fileIndex + 
'][md5sum]" value="' + uploadFiles[i].md5sum + '" />';
+    hiddenFields += '<input type="hidden" name=files[' + fileIndex + 
'][md5sum]" value="' + uploadFiles[i].md5sum + '" />';
     hiddenFields += '<input type="hidden" name="files[' + fileIndex + 
'][tmpName]" value="' + uploadFiles[i].tmpName + '" />';
     hiddenFields += '<input type="hidden" name="files[' + fileIndex + 
'][thumb]" value="' + uploadFiles[i].thumb + '" />';
     $('#uploadForm').append(hiddenFields);
 
-    var uploadData = '<div class="form-item"><label>' + i18nInfoObjectTitle + 
'</label><input type="text" name="files[' + fileIndex + '][infoObjectTitle]" 
value="' + ioTitle + '" style="width: 250px"/></div>';
+    var uploadData = '<div class="form-item"><label>' + i18nInfoObjectTitle + 
'</label><input type="text" name="files[' + fileIndex + '][infoObjectTitle]" 
value="" style="width: 250px"/></div>';
     uploadData += '<div class="form-item"><label>' + i18nFilename + '</label>' 
+ uploadFiles[i].name + '</div>';
     uploadData += '<div class="form-item"><label>' + i18nFilesize + '</label>' 
+ uploadFiles[i].size + '</div>';
+
+    uploadData += '<div style="text-align: right;">';
+    uploadData += '<a href="#" onclick="deleteUpload(\'' + fileIndex + '\'); 
return false;">' + i18nDelete + '</a>';
+    uploadData += '</div>';
+
     $('#upload-' + event['id']).append(uploadData);
 
-    count++;
+    hilightRepeatedFiles();
+    renumerateUploads();
   }
 
   uploader.removeFile(event['id']);
@@ -233,13 +216,29 @@
   return fileName;
 }
 
-function showWarning(msg, id)
+function renumerateUploads()
+{
+  $('div.multiFileUpload').each(function(i) {
+    var newValue = 
replacePlaceHolder(document.getElementById('uploadForm')['title'].value, i + 1);
+    $(this).find('input[type=text]').val(newValue); });
+}
+
+function hilightRepeatedFiles()
 {
-  var warning = '<ul id=\"warning_' + id + '\" class=\"validation_error\" 
style=\"margin-bottom: 12px; display: none;\">';
-  warning += '<li>' + msg + '</li>';
-  warning += '<ul>';
+  // TODO: iterates over all div.multiFileUploads hilighting ones with same 
md5sum (ignore first ocurrence)
+}
+
+function deleteUpload(id)
+{
+  $('div#upload-file' + id).slideUp('fast', function() {
+    // Remove the HTML block
+    $(this).remove();
+
+    // Remove hidden fields
+    $('input[type=hidden][name*=\[' + id + '\]]').remove();
 
-  $('div#uploads').before(warning);
+    hilightRepeatedFiles();
+    renumerateUploads(); });
 
-  $('ul#warning_' + id).show();
+  // TODO: Ajax call to remove temporary file
 }
\ No newline at end of file

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.ca/group/qubit-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to