* Mail: composed mails saved as draft contains again attachments, drafts created by autosaving every 2 minutes do not for performance reasons

This commit is contained in:
Ralf Becker 2015-02-18 10:10:35 +00:00
parent 69e780fab8
commit 6c139e1fdb
2 changed files with 27 additions and 21 deletions

View File

@ -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,"<!-- HTMLSIGBEGIN -->")!==false)
{
$body = str_replace(array('<!-- HTMLSIGBEGIN -->','<!-- HTMLSIGEND -->'),'',$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']))

View File

@ -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);
}