Skip to content
Browse files

Correctly handle multiple file uploads (#1488820)

  • Loading branch information...
1 parent 19de536 commit 271c5c976433c8318510ab16071dd3fa4cfe87c0 @thomascube thomascube committed
Showing with 24 additions and 14 deletions.
  1. +18 −12 program/js/app.js
  2. +6 −2 program/steps/mail/attachments.inc
View
30 program/js/app.js
@@ -3493,20 +3493,26 @@ function rcube_webmail()
if (!form)
return false;
- // get file input field, count files on capable browser
- var i, size = 0, field = $('input[type=file]', form).get(0),
- files = field.files ? field.files.length : field.value ? 1 : 0;
+ // count files and size on capable browser
+ var size = 0, numfiles = 0;
+
+ $('input[type=file]', form).each(function(i, field) {
+ var files = field.files ? field.files.length : (field.value ? 1 : 0);
- // create hidden iframe and post upload form
- if (files) {
// check file size
- if (field.files && this.env.max_filesize && this.env.filesizeerror) {
- for (i=0; i<files; i++)
+ if (field.files) {
+ for (var i=0; i < files; i++)
size += field.files[i].size;
- if (size && size > this.env.max_filesize) {
- this.display_message(this.env.filesizeerror, 'error');
- return;
- }
+ }
+
+ numfiles += files;
+ });
+
+ // create hidden iframe and post upload form
+ if (numfiles) {
+ if (this.env.max_filesize && this.env.filesizeerror && size > this.env.max_filesize) {
+ this.display_message(this.env.filesizeerror, 'error');
+ return;
}
var frame_name = this.async_upload_form(form, 'upload', function(e) {
@@ -3531,7 +3537,7 @@ function rcube_webmail()
});
// display upload indicator and cancel button
- var content = '<span>' + this.get_label('uploading' + (files > 1 ? 'many' : '')) + '</span>',
+ var content = '<span>' + this.get_label('uploading' + (numfiles > 1 ? 'many' : '')) + '</span>',
ts = frame_name.replace(/^rcmupload/, '');
this.add2attachment_list(ts, { name:'', html:content, classname:'uploading', frame:frame_name, complete:false });
View
8 program/steps/mail/attachments.inc
@@ -89,6 +89,8 @@ $OUTPUT->reset();
$uploadid = get_input_value('_uploadid', RCUBE_INPUT_GET);
if (is_array($_FILES['_attachments']['tmp_name'])) {
+ $multiple = count($_FILES['_attachments']['tmp_name']) > 1;
+
foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath) {
// Process uploaded attachment if there is no error
$err = $_FILES['_attachments']['error'][$i];
@@ -149,8 +151,10 @@ if (is_array($_FILES['_attachments']['tmp_name'])) {
$msg = rcube_label('fileuploaderror');
}
- $OUTPUT->command('display_message', $msg, 'error');
- $OUTPUT->command('remove_from_attachment_list', $uploadid);
+ if ($attachment['error'] || $err != UPLOAD_ERR_NO_FILE) {
+ $OUTPUT->command('display_message', $msg, 'error');
+ $OUTPUT->command('remove_from_attachment_list', $uploadid);
+ }
}
}
}

0 comments on commit 271c5c9

Please sign in to comment.
Something went wrong with that request. Please try again.