From 08da302af04f118bf3d43029b7e0d5d8b9bf9901 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 20 Mar 2014 17:07:02 -0400
Subject: [PATCH] Don't hide upload dialog if no file was selected. Display an alert message for all empty file uploads (#1489685)

---
 program/steps/mail/compose.inc |    3 ++-
 program/js/app.js              |   15 ++++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index ce87fdf..332d984 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -564,7 +564,7 @@
   // execute a specific command on the web client
   this.command = function(command, props, obj, event)
   {
-    var ret, uid, cid, url, flag;
+    var ret, uid, cid, url, flag, aborted = false;
 
     if (obj && obj.blur)
       obj.blur();
@@ -1054,7 +1054,10 @@
         // Reset the auto-save timer
         clearTimeout(this.save_timer);
 
-        this.upload_file(props || this.gui_objects.uploadform, 'upload');
+        if (!this.upload_file(props || this.gui_objects.uploadform, 'upload')) {
+          alert(this.get_label('selectimportfile'));
+          aborted = true;
+        }
         break;
 
       case 'insert-sig':
@@ -1182,6 +1185,7 @@
         if (!this.upload_file(form, 'import')) {
           this.set_busy(false, null, importlock);
           alert(this.get_label('selectimportfile'));
+          aborted = true;
         }
         break;
 
@@ -1190,6 +1194,7 @@
           var file = document.getElementById('rcmimportfile');
           if (file && !file.value) {
             alert(this.get_label('selectimportfile'));
+            aborted = true;
             break;
           }
           this.gui_objects.importform.submit();
@@ -1241,9 +1246,9 @@
         break;
     }
 
-    if (this.triggerEvent('after'+command, props) === false)
+    if (!aborted && this.triggerEvent('after'+command, props) === false)
       ret = false;
-    this.triggerEvent('actionafter', {props:props, action:command});
+    this.triggerEvent('actionafter', { props:props, action:command, aborted:aborted });
 
     return ret === false ? false : obj ? false : true;
   };
@@ -3985,7 +3990,7 @@
     if (numfiles) {
       if (this.env.max_filesize && this.env.filesizeerror && size > this.env.max_filesize) {
         this.display_message(this.env.filesizeerror, 'error');
-        return;
+        return false;
       }
 
       var frame_name = this.async_upload_form(form, action || 'upload', function(e) {
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index c76da14..4628029 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -81,7 +81,8 @@
     'nobodywarning', 'notsentwarning', 'notuploadedwarning', 'savingmessage', 'sendingmessage', 
     'messagesaved', 'converting', 'editorwarning', 'searching', 'uploading', 'uploadingmany',
     'fileuploaderror', 'sendmessage', 'savenewresponse', 'responsename', 'responsetext', 'save',
-    'savingresponse', 'restoresavedcomposedata', 'restoremessage', 'delete', 'restore', 'ignore');
+    'savingresponse', 'restoresavedcomposedata', 'restoremessage', 'delete', 'restore', 'ignore',
+    'selectimportfile');
 
 $OUTPUT->set_pagetitle($RCMAIL->gettext('compose'));
 

--
Gitblit v1.9.1