diff --git a/mail/inc/class.mail_compose.inc.php b/mail/inc/class.mail_compose.inc.php index 15cb345903..d51bb3f772 100644 --- a/mail/inc/class.mail_compose.inc.php +++ b/mail/inc/class.mail_compose.inc.php @@ -2142,10 +2142,11 @@ class mail_compose * @param egw_mailer $_mailObject * @param array $_formData * @param array $_identity - * @param boolean $_send =false true: create to send message: false: create to save as draft + * @param boolean $_autosaving =false true: autosaving, false: save-as-draft or send */ - function createMessage(egw_mailer $_mailObject, array $_formData, array $_identity, $_send=false) + function createMessage(egw_mailer $_mailObject, array $_formData, array $_identity, $_autosaving=false) { + //error_log(__METHOD__."(, formDate[filemode]=$_formData[filemode], _autosaving=".array2string($_autosaving).') '.function_backtrace()); $mail_bo = $this->mail_bo; $activeMailProfile = emailadmin_account::read($this->mail_bo->profileID); @@ -2233,7 +2234,7 @@ class mail_compose $signature = mail_bo::merge($signature,array($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id'))); } */ - if ($_formData['attachments'] && $_formData['filemode'] != egw_sharing::ATTACH && $_send) + if ($_formData['attachments'] && $_formData['filemode'] != egw_sharing::ATTACH && !$_autosaving) { $attachment_links = $this->getAttachmentLinks($_formData['attachments'], $_formData['filemode'], $_formData['mimeType'] == 'html', @@ -2267,7 +2268,7 @@ class mail_compose $_mailObject->setBody($this->convertHTMLToText($body, true, true)); } // convert URL Images to inline images - if possible - if ($_send) mail_bo::processURL2InlineImages($_mailObject, $body); + if (!$_autosaving) mail_bo::processURL2InlineImages($_mailObject, $body); if (strpos($body,"")!==false) { $body = str_replace(array('',''),'',$body); @@ -2343,7 +2344,8 @@ class mail_compose break; } } - elseif ($_formData['filemode'] == egw_sharing::ATTACH) + // attach files not for autosaving + elseif ($_formData['filemode'] == egw_sharing::ATTACH && !$_autosaving) { if (isset($attachment['file']) && parse_url($attachment['file'],PHP_URL_SCHEME) == 'vfs') { @@ -2431,9 +2433,11 @@ class mail_compose * Save compose mail as draft * * @param array $content content sent from client-side + * @param string $action ='button[saveAsDraft]' 'autosaving', 'button[saveAsDraft]' or 'button[saveAsDraftAndPrint]' */ - public function ajax_saveAsDraft ($content) + public function ajax_saveAsDraft ($content, $action='button[saveAsDraft]') { + //error_log(__METHOD__."(, action=$action)"); $response = egw_json_response::get(); $success = true; @@ -2455,7 +2459,7 @@ class mail_compose $folder = $this->mail_bo->getDraftFolder(); $this->mail_bo->reopen($folder); $status = $this->mail_bo->getFolderStatus($folder); - if (($messageUid = $this->saveAsDraft($formData,$folder))) + if (($messageUid = $this->saveAsDraft($formData, $folder, $action))) { // saving as draft, does not mean closing the message $messageUid = ($messageUid===true ? $status['uidnext'] : $messageUid); @@ -2538,13 +2542,14 @@ class mail_compose /** * Save message as draft to specific folder * - * @param type $_formData content - * @param type $savingDestination destination folder + * @param array $_formData content + * @param string &$savingDestination ='' destination folder + * @param string $action ='button[saveAsDraft]' 'autosaving', 'button[saveAsDraft]' or 'button[saveAsDraftAndPrint]' * @return boolean return messageUID| false due to an error */ - function saveAsDraft($_formData, &$savingDestination='') + function saveAsDraft($_formData, &$savingDestination='', $action='button[saveAsDraft]') { - //error_log(__METHOD__.__LINE__); + //error_log(__METHOD__."(..., $savingDestination, action=$action)"); $mail_bo = $this->mail_bo; $mail = new egw_mailer($this->mail_bo->profileID); @@ -2568,7 +2573,7 @@ class mail_compose $flags = '\\Seen \\Draft'; - $this->createMessage($mail, $_formData, $identity); + $this->createMessage($mail, $_formData, $identity, $action === 'autosaving'); // folder list as Customheader if (!empty($this->sessionData['folder'])) diff --git a/mail/js/app.js b/mail/js/app.js index bf590420eb..cf7755be72 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -176,7 +176,7 @@ app.classes.mail = AppJS.extend( // Prepare display dialog for printing // copies iframe content to a DIV, as iframe causes // trouble for multipage printing - jQuery('#mail-display_mailDisplayBodySrc').on('load', function(){self.mail_prepare_print()}); + jQuery('#mail-display_mailDisplayBodySrc').on('load', function(){self.mail_prepare_print();}); this.mail_isMainWindow = false; this.mail_display(); @@ -199,7 +199,7 @@ app.classes.mail = AppJS.extend( // Set autosaving interval to 2 minutes for compose message this.W_INTERVALS.push(window.setInterval(function (){ - that.saveAsDraft(null,that.et2.getWidgetById('button[saveAsDraft]'),'autosaving'); + that.saveAsDraft(null, 'autosaving'); }, 120000)); /* Control focus actions on subject to handle expanders properly.*/ @@ -3157,20 +3157,21 @@ app.classes.mail = AppJS.extend( * Save as Draft (VFS) * -handel both actions save as draft and save as draft and print * - * @param {egw object} _egw - * @param {widget object} _widget - * @param {string} _action autosaving trigger action + * @param {egwAction} _egw_action + * @param {array|string} _action string "autosaving", if that triggered the action */ saveAsDraft: function(_egw_action, _action) { //this.et2_obj.submit(); var content = this.et2.getArrayMgr('content').data; - if (_egw_action ) + var action = _action; + if (_egw_action && _action !== 'autosaving') { - var action = _action == 'autosaving'?_action: _egw_action.id; + action = _egw_action.id; } - var widgets = ['from','to','cc','bcc','subject','folder','replyto','mailaccount', 'mail_htmltext', 'mail_plaintext', 'lastDrafted']; + var widgets = ['from','to','cc','bcc','subject','folder','replyto','mailaccount', + 'mail_htmltext', 'mail_plaintext', 'lastDrafted', 'filemode', 'expiration', 'password']; var widget = {}; for (var index in widgets) { @@ -3183,7 +3184,7 @@ app.classes.mail = AppJS.extend( var self = this; if (content) { - this.egw.json('mail.mail_compose.ajax_saveAsDraft',[content],function(_data){ + this.egw.json('mail.mail_compose.ajax_saveAsDraft',[content, action],function(_data){ self.savingDraft_response(_data,action); }).sendRequest(true); }