disable thread-topic handling, as horde does not support encoding it (thus avoiding utf-8 header field errors); Better handling of drafts with attachments to make sure possible attachments of the original draft are available on send

This commit is contained in:
Klaus Leithoff 2015-03-06 09:28:46 +00:00
parent c3b75cdbf4
commit 2577268d21

View File

@ -1287,7 +1287,9 @@ class mail_compose
$preserv['processedmail_id'] = $content['processedmail_id']; $preserv['processedmail_id'] = $content['processedmail_id'];
$preserv['references'] = $content['references']; $preserv['references'] = $content['references'];
$preserv['in-reply-to'] = $content['in-reply-to']; $preserv['in-reply-to'] = $content['in-reply-to'];
$preserv['thread-topic'] = $content['thread-topic']; // thread-topic is a proprietary microsoft header and deprecated with the current version
// horde does not support the encoding of thread-topic, and probably will not no so in the future
//$preserv['thread-topic'] = $content['thread-topic'];
$preserv['thread-index'] = $content['thread-index']; $preserv['thread-index'] = $content['thread-index'];
$preserv['list-id'] = $content['list-id']; $preserv['list-id'] = $content['list-id'];
$preserv['mode'] = $content['mode']; $preserv['mode'] = $content['mode'];
@ -1343,8 +1345,9 @@ class mail_compose
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
switch($from) switch($from)
{ {
case 'composeasnew':
case 'composefromdraft': case 'composefromdraft':
$content['mode'] = 'composefromdraft';
case 'composeasnew':
$content = $this->getDraftData($icServer, $folder, $msgUID, $part_id); $content = $this->getDraftData($icServer, $folder, $msgUID, $part_id);
$content['processedmail_id'] = $mail_id; $content['processedmail_id'] = $mail_id;
@ -1494,8 +1497,11 @@ class mail_compose
// get message headers for specified message // get message headers for specified message
#$headers = $mail_bo->getMessageHeader($_folder, $_uid); #$headers = $mail_bo->getMessageHeader($_folder, $_uid);
$headers = $mail_bo->getMessageEnvelope($_uid, $_partID); $headers = $mail_bo->getMessageEnvelope($_uid, $_partID);
//_debug_array($headers); exit;
$addHeadInfo = $mail_bo->getMessageHeader($_uid, $_partID); $addHeadInfo = $mail_bo->getMessageHeader($_uid, $_partID);
// thread-topic is a proprietary microsoft header and deprecated with the current version
// horde does not support the encoding of thread-topic, and probably will not no so in the future
//if ($addHeadInfo['THREAD-TOPIC']) $this->sessionData['thread-topic'] = $addHeadInfo['THREAD-TOPIC'];
//error_log(__METHOD__.__LINE__.array2string($headers)); //error_log(__METHOD__.__LINE__.array2string($headers));
if (!empty($addHeadInfo['X-MAILFOLDER'])) { if (!empty($addHeadInfo['X-MAILFOLDER'])) {
foreach ( explode('|',$addHeadInfo['X-MAILFOLDER']) as $val ) { foreach ( explode('|',$addHeadInfo['X-MAILFOLDER']) as $val ) {
@ -1951,7 +1957,9 @@ class mail_compose
$this->sessionData['messageFolder'] = $_folder; $this->sessionData['messageFolder'] = $_folder;
$this->sessionData['in-reply-to'] = ($headers['IN-REPLY-TO']?$headers['IN-REPLY-TO']:$headers['MESSAGE_ID']); $this->sessionData['in-reply-to'] = ($headers['IN-REPLY-TO']?$headers['IN-REPLY-TO']:$headers['MESSAGE_ID']);
$this->sessionData['references'] = ($headers['REFERENCES']?$headers['REFERENCES']:$headers['MESSAGE_ID']); $this->sessionData['references'] = ($headers['REFERENCES']?$headers['REFERENCES']:$headers['MESSAGE_ID']);
if ($headers['THREAD-TOPIC']) $this->sessionData['thread-topic'] = $headers['THREAD-TOPIC']; // thread-topic is a proprietary microsoft header and deprecated with the current version
// horde does not support the encoding of thread-topic, and probably will not no so in the future
//if ($headers['THREAD-TOPIC']) $this->sessionData['thread-topic'] = $headers['THREAD-TOPIC'];
if ($headers['THREAD-INDEX']) $this->sessionData['thread-index'] = $headers['THREAD-INDEX']; if ($headers['THREAD-INDEX']) $this->sessionData['thread-index'] = $headers['THREAD-INDEX'];
if ($headers['LIST-ID']) $this->sessionData['list-id'] = $headers['LIST-ID']; if ($headers['LIST-ID']) $this->sessionData['list-id'] = $headers['LIST-ID'];
//error_log(__METHOD__.__LINE__.' Mode:'.$_mode.':'.array2string($headers)); //error_log(__METHOD__.__LINE__.' Mode:'.$_mode.':'.array2string($headers));
@ -2185,10 +2193,13 @@ class mail_compose
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(References', $_formData['references'].")"); //error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(References', $_formData['references'].")");
$_mailObject->addHeader('References', $_formData['references']); $_mailObject->addHeader('References', $_formData['references']);
} }
if(!empty($_formData['thread-topic'])) { // thread-topic is a proprietary microsoft header and deprecated with the current version
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(Tread-Topic', $_formData['thread-topic'].")"); // horde does not support the encoding of thread-topic, and probably will not no so in the future
$_mailObject->addHeader('Thread-Topic', $_formData['thread-topic']); //if(!empty($_formData['thread-topic']) && class_exists('Horde_Mime_Headers_ThreadTopic')) {
} // //$_mailObject->addHeader('Thread-Topic', Horde_Mime::encode($_formData['thread-topic']));
// $_mailObject->addHeader('Thread-Topic', $_formData['thread-topic']);
//}
if(!empty($_formData['thread-index'])) { if(!empty($_formData['thread-index'])) {
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(Tread-Index', $_formData['thread-index'].")"); //error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(Tread-Index', $_formData['thread-index'].")");
$_mailObject->addHeader('Thread-Index', $_formData['thread-index']); $_mailObject->addHeader('Thread-Index', $_formData['thread-index']);
@ -2485,15 +2496,30 @@ class mail_compose
$dhA = mail_ui::splitRowID($content['lastDrafted']); $dhA = mail_ui::splitRowID($content['lastDrafted']);
$duid = $dhA['msgUID']; $duid = $dhA['msgUID'];
$dmailbox = $dhA['folder']; $dmailbox = $dhA['folder'];
try // beware: do not delete the original mail as found in processedmail_id
$pMuid='';
if ($content['processedmail_id'])
{ {
$this->mail_bo->deleteMessages($duid,$dmailbox,'remove_immediately'); $pMhA = mail_ui::splitRowID($content['processedmail_id']);
$pMuid = $pMhA['msgUID'];
$pMmailbox = $pMhA['folder'];
} }
catch (egw_exception $e) error_log(__METHOD__.__LINE__.' processedID#'.$content['processedmail_id']);
error_log(__METHOD__.__LINE__.' lastDrafted#'.$content['lastDrafted']);
//error_log(__METHOD__.__LINE__."#$pMuid#$pMuid!=$duid#".array2string($content['attachments']));
// do not delete the original message if attachments are present
if (empty($pMuid) || $pMuid!=$duid || empty($content['attachments']))
{ {
$msg = str_replace('"',"'",$e->getMessage()); try
$success = false; {
error_log(__METHOD__.__LINE__.$msg); $this->mail_bo->deleteMessages($duid,$dmailbox,'remove_immediately');
}
catch (egw_exception $e)
{
$msg = str_replace('"',"'",$e->getMessage());
$success = false;
error_log(__METHOD__.__LINE__.$msg);
}
} }
} }
} }
@ -2686,6 +2712,12 @@ class mail_compose
$this->sessionData['uid'] = $rhA['msgUID']; $this->sessionData['uid'] = $rhA['msgUID'];
$this->sessionData['messageFolder'] = $rhA['folder']; $this->sessionData['messageFolder'] = $rhA['folder'];
} }
if ($_formData['mode']=='composefromdraft' && !empty($_formData['processedmail_id']))
{
$dhA = mail_ui::splitRowID($_formData['processedmail_id']);
$this->sessionData['uid'] = $dhA['msgUID'];
$this->sessionData['messageFolder'] = $dhA['folder'];
}
} }
// if the body is empty, maybe someone pasted something with scripts, into the message body // if the body is empty, maybe someone pasted something with scripts, into the message body
// this should not happen anymore, unless you call send directly, since the check was introduced with the action command // this should not happen anymore, unless you call send directly, since the check was introduced with the action command
@ -2959,6 +2991,7 @@ class mail_compose
$lastDrafted['folder'] = $dhA['folder']; $lastDrafted['folder'] = $dhA['folder'];
if (isset($lastDrafted['uid']) && !empty($lastDrafted['uid'])) $lastDrafted['uid']=trim($lastDrafted['uid']); if (isset($lastDrafted['uid']) && !empty($lastDrafted['uid'])) $lastDrafted['uid']=trim($lastDrafted['uid']);
// manually drafted, do not delete // manually drafted, do not delete
// will be handled later on IF mode was $_formData['mode']=='composefromdraft'
if (isset($lastDrafted['uid']) && (empty($lastDrafted['uid']) || $lastDrafted['uid'] == $this->sessionData['uid'])) $lastDrafted=false; if (isset($lastDrafted['uid']) && (empty($lastDrafted['uid']) || $lastDrafted['uid'] == $this->sessionData['uid'])) $lastDrafted=false;
//error_log(__METHOD__.__LINE__.array2string($lastDrafted)); //error_log(__METHOD__.__LINE__.array2string($lastDrafted));
} }
@ -2986,14 +3019,31 @@ class mail_compose
// unless your templatefolder is a subfolder of your draftfolder, and the message is in there // unless your templatefolder is a subfolder of your draftfolder, and the message is in there
if ($mail_bo->isDraftFolder($this->sessionData['messageFolder']) && !$mail_bo->isTemplateFolder($this->sessionData['messageFolder'])) if ($mail_bo->isDraftFolder($this->sessionData['messageFolder']) && !$mail_bo->isTemplateFolder($this->sessionData['messageFolder']))
{ {
$mail_bo->deleteMessages(array($this->sessionData['uid']),$this->sessionData['messageFolder']); //error_log(__METHOD__.__LINE__."#".$this->sessionData['uid'].'#'.$this->sessionData['messageFolder']);
try // message may be deleted already, as it maybe done by autosave
{
if ($_formData['mode']=='composefromdraft') $mail_bo->deleteMessages(array($this->sessionData['uid']),$this->sessionData['messageFolder']);
}
catch (egw_exception $e)
{
//error_log(__METHOD__.__LINE__." ". str_replace('"',"'",$e->getMessage()));
unset($e);
}
} else { } else {
$mail_bo->flagMessages("answered", $this->sessionData['uid'],($this->sessionData['messageFolder']?$this->sessionData['messageFolder']:$this->sessionData['sourceFolder'])); $mail_bo->flagMessages("answered", $this->sessionData['uid'],($this->sessionData['messageFolder']?$this->sessionData['messageFolder']:$this->sessionData['sourceFolder']));
//error_log(__METHOD__.__LINE__.array2string(array_keys($this->sessionData)).':'.array2string($this->sessionData['forwardedUID']).' F:'.$this->sessionData['sourceFolder']); //error_log(__METHOD__.__LINE__.array2string(array_keys($this->sessionData)).':'.array2string($this->sessionData['forwardedUID']).' F:'.$this->sessionData['sourceFolder']);
if (array_key_exists('forwardFlag',$this->sessionData) && $this->sessionData['forwardFlag']=='forwarded') if (array_key_exists('forwardFlag',$this->sessionData) && $this->sessionData['forwardFlag']=='forwarded')
{ {
//error_log(__METHOD__.__LINE__.':'.array2string($this->sessionData['forwardedUID']).' F:'.$this->sessionData['sourceFolder']); try
$mail_bo->flagMessages("forwarded", $this->sessionData['forwardedUID'],$this->sessionData['sourceFolder']); {
//error_log(__METHOD__.__LINE__.':'.array2string($this->sessionData['forwardedUID']).' F:'.$this->sessionData['sourceFolder']);
$mail_bo->flagMessages("forwarded", $this->sessionData['forwardedUID'],$this->sessionData['sourceFolder']);
}
catch (egw_exception $e)
{
//error_log(__METHOD__.__LINE__." ". str_replace('"',"'",$e->getMessage()));
unset($e);
}
} }
} }
//$mail_bo->closeConnection(); //$mail_bo->closeConnection();