* Mail: combine account and identity/signature selection, allows now to send with a different identity

also fixed tons of IDE warnings
r49532: fix compose ID and random string generation to use API auth::randomstring() method
This commit is contained in:
Ralf Becker 2014-11-21 16:21:40 +00:00
parent 10b106619a
commit 424f904fbb
2 changed files with 93 additions and 189 deletions

View File

@ -5302,13 +5302,13 @@ class emailadmin_imapbase
}
/**
* getRandomString - function to be used to fetch a random string and md5 encode that one
* @param none
* @return string - a random number which is md5 encoded
* Get a random string of 32 chars
*
* @return string
*/
static function getRandomString() {
mt_srand((float) microtime() * 1000000);
return md5(mt_rand (100000, 999999));
static function getRandomString()
{
return auth::randomstring(32);
}
/**

View File

@ -10,15 +10,11 @@
* @version $Id$
*/
include_once(EGW_INCLUDE_ROOT.'/etemplate/inc/class.etemplate.inc.php');
/**
* Mail interface class for compose mails in popup
*/
class mail_compose
{
var $public_functions = array
(
'compose' => True,
@ -70,20 +66,16 @@ class mail_compose
//error_log(__METHOD__.__LINE__.' js_link_registry not set, force it:'.array2string($GLOBALS['egw_info']['flags']['js_link_registry']));
$GLOBALS['egw_info']['flags']['js_link_registry']=true;
}
$this->displayCharset = $GLOBALS['egw']->translation->charset();
$profileID = 0;
if (isset($GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID']))
$profileID = (int)$GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'];
$this->mail_bo = mail_bo::getInstance(true,$profileID);
$this->displayCharset = translation::charset();
$profileID = (int)$GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'];
$this->mail_bo = mail_bo::getInstance(true,$profileID);
$GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'] = $this->mail_bo->profileID;
$profileID = $GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'] = $this->mail_bo->profileID;
$this->mailPreferences =& $this->mail_bo->mailPreferences;
//force the default for the forwarding -> asmail
if (is_array($this->mailPreferences)) {
if (!array_key_exists('message_forwarding',$this->mailPreferences)
|| !isset($this->mailPreferences['message_forwarding'])
|| empty($this->mailPreferences['message_forwarding'])) $this->mailPreferences['message_forwarding'] = 'asmail';
} else {
if (!is_array($this->mailPreferences) || empty($this->mailPreferences['message_forwarding']))
{
$this->mailPreferences['message_forwarding'] = 'asmail';
}
if (is_null(mail_bo::$mailConfig)) mail_bo::$mailConfig = config::read('mail');
@ -122,7 +114,9 @@ class mail_compose
*/
function compose(array $_content=null,$msg=null, $_focusElement='to',$suppressSigOnTop=false, $isReply=false)
{
if (isset($GLOBALS['egw_info']['user']['preferences']['mail']['LastSignatureIDUsed']) && !empty($GLOBALS['egw_info']['user']['preferences']['mail']['LastSignatureIDUsed']))
unset($msg); // not used
if (!empty($GLOBALS['egw_info']['user']['preferences']['mail']['LastSignatureIDUsed']))
{
$sigPref = $GLOBALS['egw_info']['user']['preferences']['mail']['LastSignatureIDUsed'];
}
@ -130,6 +124,11 @@ class mail_compose
{
$sigPref = array();
}
// split mailaccount (acc_id) and signature (ident_id)
if ($_content && isset($_content['mailaccount']))
{
list($_content['mailaccount'], $_content['signatureid']) = explode(':', $_content['mailaccount']);
}
//error_log(__METHOD__.__LINE__.array2string($sigPref));
//lang('compose'),lang('from') // needed to be found by translationtools
//error_log(__METHOD__.__LINE__.array2string($_REQUEST).function_backtrace());
@ -180,7 +179,7 @@ class mail_compose
// is some style already set and our initalStyle always adds a span with  
// and we want to avoid that
$isFirstLoad = !($actionToProcess=='composeasnew');//true;
$this->composeID = $_content['composeID'] = $this->getComposeID();
$this->composeID = $_content['composeID'] = $this->generateComposeID();
if (!is_array($_content))
{
$_content = $this->setDefaults();
@ -238,7 +237,7 @@ class mail_compose
foreach($attachments as $i => $att)
{
$remove=false;
foreach($toDelete as $k =>$pressed)
foreach(array_keys($toDelete) as $k)
{
if ($att['tmp_name']==$k) $remove=true;
}
@ -515,8 +514,8 @@ class mail_compose
$_htmlConfig = mail_bo::$htmLawed_config;
mail_bo::$htmLawed_config['comment'] = 2;
mail_bo::$htmLawed_config['transform_anchor'] = false;
$oldSigText = str_replace(array("\r","\t","<br />\n",": "),array("","","<br />",":"),($_currentMode == 'html'?html::purify($oldSigText,null,array(),true):$oldSigText));
//error_log(__METHOD__.'Old(clean):'.$oldSigText.'#');
$oldSigTextCleaned = str_replace(array("\r","\t","<br />\n",": "),array("","","<br />",":"),($_currentMode == 'html'?html::purify($oldSigText,null,array(),true):$oldSigText));
//error_log(__METHOD__.'Old(clean):'.$oldSigTextCleaned.'#');
if ($_currentMode == 'html')
{
$content['body'] = str_replace("\n",'\n',$content['body']); // dont know why, but \n screws up preg_replace
@ -527,10 +526,12 @@ class mail_compose
mail_bo::$htmLawed_config = $_htmlConfig;
if ($_currentMode == 'html')
{
$replaced = null;
$content['body'] = preg_replace($reg='|'.preg_quote('<!-- HTMLSIGBEGIN -->','|').'.*'.preg_quote('<!-- HTMLSIGEND -->','|').'|u',
$rep='<!-- HTMLSIGBEGIN -->'.$sigText.'<!-- HTMLSIGEND -->', $in=$content['body'], -1, $replaced);
$content['body'] = str_replace(array('\n',"\xe2\x80\x93","\xe2\x80\x94","\xe2\x82\xac"),array("\n",'&ndash;','&mdash;','&euro;'),$content['body']);
//error_log(__METHOD__."() preg_replace('$reg', '$rep', '$in', -1)='".$content['body']."', replaced=$replaced");
unset($rep, $in);
if ($replaced)
{
$content['signatureid'] = $_content['signatureid'] = $presetSig = $_signatureid;
@ -539,31 +540,31 @@ class mail_compose
else
{
// try the old way
$found = (strlen(trim($oldSigText))>0?strpos($content['body'],trim($oldSigText)):false);
$found = (strlen(trim($oldSigTextCleaned))>0?strpos($content['body'],trim($oldSigTextCleaned)):false);
}
}
else
{
$found = (strlen(trim($oldSigText))>0?strpos($content['body'],trim($oldSigText)):false);
$found = (strlen(trim($oldSigTextCleaned))>0?strpos($content['body'],trim($oldSigTextCleaned)):false);
}
if ($found !== false && $_oldSig != -2 && !(empty($oldSigText) || trim($this->convertHTMLToText($oldSigText,true,true)) ==''))
if ($found !== false && $_oldSig != -2 && !(empty($oldSigTextCleaned) || trim($this->convertHTMLToText($oldSigTextCleaned,true,true)) ==''))
{
//error_log(__METHOD__.'Old Content:'.$content['body'].'#');
$_oldSigText = preg_quote($oldSigText,'~');
$_oldSigText = preg_quote($oldSigTextCleaned,'~');
//error_log(__METHOD__.'Old(masked):'.$_oldSigText.'#');
$content['body'] = preg_replace('~'.$_oldSigText.'~mi',$sigText,$content['body'],1);
//error_log(__METHOD__.'new Content:'.$content['body'].'#');
}
if ($_oldSig == -2 && (empty($oldSigText) || trim($this->convertHTMLToText($oldSigText,true,true)) ==''))
if ($_oldSig == -2 && (empty($oldSigTextCleaned) || trim($this->convertHTMLToText($oldSigTextCleaned,true,true)) ==''))
{
// if there is no sig selected, there is no way to replace a signature
}
if ($found === false)
{
if($this->_debug) error_log(__METHOD__." Old Signature failed to match:".$oldSigText);
if($this->_debug) error_log(__METHOD__." Old Signature failed to match:".$oldSigTextCleaned);
if($this->_debug) error_log(__METHOD__." Compare content:".$content['body']);
}
else
@ -730,7 +731,6 @@ class mail_compose
if($innerCounter==0 && !empty($email) && in_array($completeMailString ,$mailtoArray) === false) {
$i++;
$innerCounter++;
$str = $GLOBALS['egw']->translation->convert(trim($contact['n_fn'] ? $contact['n_fn'] : $contact['fn']) .' <'. trim($email) .'>', $this->charset, 'utf-8');
$mailtoArray[$i] = $completeMailString;
}
}
@ -837,9 +837,9 @@ class mail_compose
//must contain =
if (strpos($rval,'=')!== false)
{
$k = $v = '';
list($k,$v) = explode('=',$rval,2);
$karr[$k] = $v;
$karr[$k] = (string)$v;
unset($k,$v);
}
}
//error_log(__METHOD__.__LINE__.$content['to'].'->'.array2string($karr));
@ -908,104 +908,6 @@ class mail_compose
if (($suppressSigOnTop || $content['isDraft']) && !empty($content['mailaccount'])) $presetId = (int)$content['mailaccount'];
if (!empty($sigPref[$this->mail_bo->profileID]) && (empty($presetSig) || $presetSig==-1 || empty($content['signatureid']) || $content['signatureid']==-1)) $presetSig=$sigPref[$this->mail_bo->profileID];
/*
$this->t->set_var("focusElement",$_focusElement);
*/
/*
lang('No recipient address given!');
lang('No subject given!');
lang("You can either choose to save as infolog OR tracker, not both.");
*/
// prepare signatures, the selected sig may be used on top of the body
//identities and signature stuff
$allIdentities = mail_bo::getAllIdentities(null,true);
$selectedMailAccount = ($content['mailaccount']?$content['mailaccount']:$this->mail_bo->profileID);
$acc = emailadmin_account::read($this->mail_bo->profileID);
$selectSignatures = array(
'-2' => lang('no signature')
);
//unset($allIdentities[0]);
//_debug_array($allIdentities);
if (is_null(mail_bo::$mailConfig)) mail_bo::$mailConfig = config::read('mail');
// not set? -> use default, means full display of all available data
if (!isset(mail_bo::$mailConfig['how2displayIdentities'])) mail_bo::$mailConfig['how2displayIdentities'] ='';
$defaultIds = array();
$identities = array();
foreach($allIdentities as $key => $singleIdentity) {
if (isset($identities[$singleIdentity['acc_id']])) continue; // only use the first
$iS = mail_bo::generateIdentityString($singleIdentity);
if (mail_bo::$mailConfig['how2displayIdentities']=='' || count($allIdentities) ==1)
{
$id_prepend ='';
}
else
{
$id_prepend = '('.$singleIdentity['ident_id'].') ';
}
if(empty($defaultIds)&& $singleIdentity['ident_id']==$acc['ident_id'])
{
$defaultIds[$singleIdentity['ident_id']] = $singleIdentity['ident_id'];
$selectedSender = $singleIdentity['acc_id'];
}
//if ($singleIdentity->default) error_log(__METHOD__.__LINE__.':'.$presetId.'->'.$key.'('.$singleIdentity->id.')'.'#'.$iS.'#');
if (array_search($id_prepend.$iS,$identities)===false)
{
$identities[$singleIdentity['acc_id']] = $id_prepend.$iS;
$sel_options['mailaccount'][$singleIdentity['acc_id']] = $id_prepend.$iS;
}
}
$sel_options['mailaccount'] = iterator_to_array(emailadmin_account::search());
//error_log(__METHOD__.__LINE__.' Identities regarded/marked as default:'.array2string($defaultIds). ' MailProfileActive:'.$this->mail_bo->profileID);
// if there are 2 defaultIDs, its most likely, that the user choose to set
// the one not being the activeServerProfile to be his default Identity
//if (count($defaultIds)>1) unset($defaultIds[$this->mail_bo->profileID]);
$allSignatures = $this->mail_bo->getAccountIdentities($selectedMailAccount);
$defaultIdentity = 0;
// we want identity info in a length approx between 50 and 100 char
$longestName = 50;
foreach($allSignatures as $key => $singleIdentity) {
if (strlen($singleIdentity['ident_name'])>$longestName) $longestName=strlen($singleIdentity['ident_name']);
}
if ($longestName>100) $longestName=100;
foreach($allSignatures as $key => $singleIdentity) {
//error_log(__METHOD__.__LINE__.array2string($singleIdentity));
//$identities[$singleIdentity['ident_id']] = $singleIdentity['ident_realname'].' <'.$singleIdentity['ident_email'].'>';
$iS = mail_bo::generateIdentityString($singleIdentity);
if (mail_bo::$mailConfig['how2displayIdentities']=='' || count($allIdentities) ==1)
{
$id_prepend ='';
}
else
{
$id_prepend = '('.$singleIdentity['ident_id'].') ';
}
$buff='';
if (!empty($singleIdentity['ident_name']) && !in_array(lang('Signature').': '.$id_prepend.$singleIdentity['ident_name'],$selectSignatures))
{
$buff = $singleIdentity['ident_name'];
if (strlen($buff)<$longestName)$buff = $singleIdentity['ident_name'].': '.trim(substr(str_replace(array("\r\n","\r","\n","\t"),array(" "," "," "," "),translation::convertHTMLToText($singleIdentity['ident_signature'])),0,$longestName-strlen($buff)));
}
else
{
$buff = trim(substr(str_replace(array("\r\n","\r","\n","\t"),array(" "," "," "," "),translation::convertHTMLToText($singleIdentity['ident_signature'])),0,$longestName));
}
$sigDesc = $buff?$buff:lang('none');
if ($sigDesc == lang('none')) $sigDesc = (!empty($singleIdentity['ident_name'])?$singleIdentity['ident_name']:$singleIdentity['ident_realname'].($singleIdentity['ident_org']?' ('.$singleIdentity['ident_org'].')':''));
$selectSignatures[$singleIdentity['ident_id']] = lang('Signature').': '.$id_prepend.$sigDesc;
if(in_array($singleIdentity['ident_id'],$defaultIds) && $defaultIdentity==0)
{
//_debug_array($singleIdentity);
$defaultIdentity = $singleIdentity['ident_id'];
//$defaultIdentity = $key;
if (empty($content['signatureid'])) $content['signatureid'] = (!empty($singleIdentity['ident_signature']) ? $singleIdentity['ident_id'] : $content['signatureid']);
}
}
// fetch the signature, prepare the select box, ...
if (empty($content['signatureid'])) {
$content['signatureid'] = $acc['ident_id'];
@ -1116,11 +1018,21 @@ class mail_compose
} else {
$ishtml=0;
}
// get identities of all accounts as "$acc_id:$ident_id" => $identity
$sel_options['mailaccount'] = $identities = array();
foreach(emailadmin_account::search() as $acc_id => $account)
{
foreach(emailadmin_account::identities($acc_id) as $ident_id => $identity)
{
$sel_options['mailaccount'][$acc_id.':'.$ident_id] = $identity;
$identities[$ident_id] = $identity;
}
unset($account);
}
// signature stuff set earlier
//_debug_array($selectSignatures);
$sel_options['signatureid'] = $selectSignatures;
$content['signatureid'] = ($presetSig ? $presetSig : $content['signatureid']);
//_debug_array($sel_options['signatureid'][$content['signatureid']]);
if ($presetSig) $content['signatureid'] = $presetSig;
// end signature stuff
//$content['bcc'] = array('kl@stylite.de','kl@leithoff.net');
@ -1136,15 +1048,15 @@ class mail_compose
unset($content[strtolower($destination)]);
foreach((array)$addr_content as $key => $value) {
if ($value=="NIL@NIL") continue;
if ($destination=='replyto' && str_replace('"','',$value) == str_replace('"','',$identities[($presetId ? $presetId : $defaultIdentity)]))
if ($destination=='replyto' && str_replace('"','',$value) ==
str_replace('"','',$identities[$presetId ? $presetId : $this->mail_bo->getDefaultIdentity()]))
{
// preserve/restore the value to content.
$content[strtolower($destination)][]=$value;
continue;
}
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
$value = htmlspecialchars_decode($value,ENT_COMPAT);
$value = str_replace("\"\"",'"',$value);
$value = str_replace("\"\"",'"', htmlspecialchars_decode($value, ENT_COMPAT));
foreach(emailadmin_imapbase::parseAddressList($value) as $addressObject) {
if ($addressObject->host == '.SYNTAX-ERROR.') continue;
$address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal);
@ -1161,12 +1073,12 @@ class mail_compose
$content = array_merge($content,$_content);
if (!empty($content['folder'])) $sel_options['folder']=$this->ajax_searchFolder(0,true);
$content['mailaccount'] = (empty($content['mailaccount'])?($selectedSender?$selectedSender:$this->mail_bo->profileID):$content['mailaccount']);
if (empty($content['mailaccount'])) $content['mailaccount'] = $this->mail_bo->profileID;
}
else
{
//error_log(__METHOD__.__LINE__.array2string(array($sel_options['mailaccount'],$selectedSender)));
$content['mailaccount'] = ($selectedSender?$selectedSender:$this->mail_bo->profileID);
$content['mailaccount'] = $this->mail_bo->profileID;
//error_log(__METHOD__.__LINE__.$content['body']);
}
$content['is_html'] = ($content['mimeType'] == 'html'?true:'');
@ -1257,6 +1169,9 @@ class mail_compose
$content['mimeType']=0;
}
// join mailaccount and signatureid together again
$content['mailaccount'] .= ':'.$content['signatureid'];
//error_log(__METHOD__.__LINE__.array2string($content));
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2);
}
@ -1291,7 +1206,6 @@ class mail_compose
if ($icServerID != $this->mail_bo->profileID)
{
$this->changeProfile($icServerID);
$composeProfile = $this->mail_bo->profileID;
}
$icServer = $this->mail_bo->icServer;
if (!empty($folder) && !empty($msgUID) )
@ -1345,17 +1259,16 @@ class mail_compose
* Use ajax_merge to merge & send multiple
*/
// Merge selected ID (in mailtocontactbyid or $mail_id) into given document
preg_match('/^([a-z_-]+_merge)$/', $_REQUEST['merge'], $merge_class);
$merge_class = $merge_class[1] ? $merge_class[1] : 'addressbook_merge';
$merge_class = preg_match('/^([a-z_-]+_merge)$/', $_REQUEST['merge']) ? $_REQUEST['merge'] : 'addressbook_merge';
$document_merge = new $merge_class();
$this->mail_bo->openConnection();
$merge_ids = $_REQUEST['preset']['mailtocontactbyid'] ? $_REQUEST['preset']['mailtocontactbyid'] : $mail_id;
$merge_ids = is_array($merge_ids) ? $merge_ids : explode(',',$merge_ids);
if (!is_array($merge_ids)) $merge_ids = explode(',',$merge_ids);
try
{
$merged_mail_id = '';
$folder = '';
if($error = $document_merge->check_document($_REQUEST['document'],''))
if(($error = $document_merge->check_document($_REQUEST['document'],'')))
{
$content['msg'] = $error;
return $content;
@ -1428,13 +1341,12 @@ class mail_compose
}
}
// create a hopefully unique id, to keep track of different compose windows
// if you do this, you are creating a new email
function getComposeID()
/**
* create a unique id, to keep track of different compose windows
*/
function generateComposeID()
{
$this->composeID = $this->getRandomString();
return $this->composeID;
return mail_bo::getRandomString();
}
// $_mode can be:
@ -1442,6 +1354,7 @@ class mail_compose
// all: for a reply to all
function getDraftData($_icServer, $_folder, $_uid, $_partID=NULL)
{
unset($_icServer); // not used
$this->sessionData['to'] = array();
$mail_bo = $this->mail_bo;
@ -1463,7 +1376,7 @@ class mail_compose
// with the new system it would be the identity
try
{
$identity = emailadmin_account::read_identity($addHeadInfo['X-SIGNATURE']);
emailadmin_account::read_identity($addHeadInfo['X-SIGNATURE']);
$this->sessionData['signatureid'] = $addHeadInfo['X-SIGNATURE'];
}
catch (Exception $e)
@ -1479,7 +1392,7 @@ class mail_compose
// with the new system it would the identity is the account id
try
{
$acc = emailadmin_account::read($addHeadInfo['X-IDENTITY']);
emailadmin_account::read($addHeadInfo['X-IDENTITY']);
$this->sessionData['mailaccount'] = $addHeadInfo['X-IDENTITY'];
}
catch (Exception $e)
@ -1493,6 +1406,7 @@ class mail_compose
$this->sessionData['uid'] = $_uid;
$this->sessionData['messageFolder'] = $_folder;
$this->sessionData['isDraft'] = true;
$foundAddresses = array();
foreach((array)$headers['CC'] as $val) {
$rfcAddr=emailadmin_imapbase::parseAddressList($val);
$_rfcAddr = $rfcAddr[0];
@ -1502,8 +1416,7 @@ class mail_compose
}
$keyemail=$_rfcAddr->mailbox.'@'.$_rfcAddr->host;
if(!$foundAddresses[$keyemail]) {
$address = $val;
$address = $this->mail_bo->decode_header($address,true);
$address = $this->mail_bo->decode_header($val,true);
$this->sessionData['cc'][] = $val;
$foundAddresses[$keyemail] = true;
}
@ -1523,8 +1436,7 @@ class mail_compose
}
$keyemail=$_rfcAddr->mailbox.'@'.$_rfcAddr->host;
if(!$foundAddresses[$keyemail]) {
$address = $val;
$address = $this->mail_bo->decode_header($address,true);
$address = $this->mail_bo->decode_header($val,true);
$this->sessionData['to'][] = $val;
$foundAddresses[$keyemail] = true;
}
@ -1539,8 +1451,7 @@ class mail_compose
}
$keyemail=$_rfcAddr->mailbox.'@'.$_rfcAddr->host;
if(!$foundAddresses[$keyemail]) {
$address = $val;
$address = $this->mail_bo->decode_header($address,true);
$address = $this->mail_bo->decode_header($val,true);
$this->sessionData['replyto'][] = $val;
$foundAddresses[$keyemail] = true;
}
@ -1555,8 +1466,7 @@ class mail_compose
}
$keyemail=$_rfcAddr->mailbox.'@'.$_rfcAddr->host;
if(!$foundAddresses[$keyemail]) {
$address = $val;
$address = $this->mail_bo->decode_header($address,true);
$address = $this->mail_bo->decode_header($val,true);
$this->sessionData['bcc'][] = $val;
$foundAddresses[$keyemail] = true;
}
@ -1711,11 +1621,14 @@ class mail_compose
//error_log(__METHOD__.__LINE__.array2string($tmpFileName));
if ($eliminateDoubleAttachments == true)
foreach ((array)$_content['attachments'] as $k =>$attach)
{
foreach ((array)$_content['attachments'] as $attach)
{
if ($attach['name'] && $attach['name'] == $_formData['name'] &&
strtolower($_formData['type'])== strtolower($attach['type']) &&
stripos($_formData['file'],'vfs://') !== false) return;
}
}
if ($attachfailed === false)
{
$buffer = array(
@ -1842,22 +1755,14 @@ class mail_compose
}
/**
* getRandomString - function to be used to fetch a random string and md5 encode that one
* @param none
* @return string - a random number which is md5 encoded
*/
function getRandomString() {
return mail_bo::getRandomString();
}
/**
* testIfOneKeyInArrayDoesExistInString - function to be used to fetch a random string and md5 encode that one
* Test if string contains one of the keys of an array
*
* @param array arrayToTestAgainst to test its keys against haystack
* @param string haystack
* @return boolean
*/
function testIfOneKeyInArrayDoesExistInString($arrayToTestAgainst,$haystack) {
foreach ($arrayToTestAgainst as $k => $v)
foreach (array_keys($arrayToTestAgainst) as $k)
{
//error_log(__METHOD__.__LINE__.':'.$k.'<->'.$haystack);
if (stripos($haystack,$k)!==false)
@ -1870,7 +1775,8 @@ class mail_compose
}
/**
* getReplyData - function to gather the replyData and save it with the session, to be used then.
* Gather the replyData and save it with the session, to be used then
*
* @param $_mode can be:
* single: for a reply to one address
* all: for a reply to all
@ -1882,6 +1788,7 @@ class mail_compose
*/
function getReplyData($_mode, $_icServer, $_folder, $_uid, $_partID)
{
unset($_icServer); // not used
$foundAddresses = array();
$mail_bo = $this->mail_bo;
@ -2050,10 +1957,9 @@ class mail_compose
$newBody = translation::convert($bodyParts[$i]['body'], $bodyParts[$i]['charSet']);
#error_log( "GetReplyData (Plain) CharSet:".mb_detect_encoding($bodyParts[$i]['body'] . 'a' , strtoupper($bodyParts[$i]['charSet']).','.strtoupper($this->displayCharset).',UTF-8, ISO-8859-1'));
$newBody = explode("\n",$newBody);
$this->sessionData['body'] .= "\r\n";
// create body new, with good line breaks and indention
foreach($newBody as $value) {
foreach(explode("\n",$newBody) as $value) {
// the explode is removing the character
if (trim($value) != '') {
#if ($value != "\r") $value .= "\n";
@ -2085,9 +1991,7 @@ class mail_compose
'[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
'[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
mail_bo::getCleanHTML($_body, $usepurify, $cleanTags);
$_body = preg_replace($nonDisplayAbleCharacters, '', $_body);
return $_body;
return preg_replace($nonDisplayAbleCharacters, '', $_body);
}
static function _getHostName()
@ -2695,7 +2599,7 @@ class mail_compose
$folder[] = $draftFolder;
}
}
$folder = array_unique($folder);
if ($folder) $folder = array_unique($folder);
if (($this->mailPreferences['sendOptions'] != 'send_only' && $sentFolder != 'none') && !(count($folder) > 0) &&
!($_formData['to_infolog']=='on' || $_formData['to_tracker']=='on'))
{
@ -2850,8 +2754,8 @@ class mail_compose
}
catch (egw_exception $e)
{
$error = str_replace('"',"'",$e->getMessage());
//error_log(__METHOD__.__LINE__." ". $error);
//error_log(__METHOD__.__LINE__." ". str_replace('"',"'",$e->getMessage()));
unset($e);
}
}
unset($this->sessionData['lastDrafted']);
@ -2964,11 +2868,11 @@ class mail_compose
{
try
{
$identity = emailadmin_account::read_identity($sigPref[$this->mail_bo->profileID]);
$id = $sigPref[$this->mail_bo->profileID];
}
catch (Exception $e)
{
unset($e);
unset($GLOBALS['egw_info']['user']['preferences']['mail']['LastSignatureIDUsed'][$this->mail_bo->profileID]);
}
}
@ -2995,7 +2899,7 @@ class mail_compose
}
function ajax_searchFolder($_searchStringLength=2, $_returnList=false) {
static $useCacheIfPossible;
static $useCacheIfPossible = null;
if (is_null($useCacheIfPossible)) $useCacheIfPossible = true;
$_searchString = trim($_REQUEST['query']);
$results = array();
@ -3121,7 +3025,6 @@ class mail_compose
'title' => $email
);
}
if ($i > 10) break; // we check for # of results here, as we might have empty email addresses
}
}
}
@ -3169,7 +3072,7 @@ class mail_compose
$document_merge = new addressbook_merge();
$this->mail_bo->openConnection();
if($error = $document_merge->check_document($_REQUEST['document'],''))
if(($error = $document_merge->check_document($_REQUEST['document'],'')))
{
$response->error($error);
return;
@ -3179,6 +3082,7 @@ class mail_compose
//$GLOBALS['egw_info']['flags']['currentapp'] = 'addressbook';
// Actually do the merge
$folder = $merged_mail_id = null;
$results = $this->mail_bo->importMessageToMergeAndSend(
$document_merge, egw_vfs::PREFIX . $_REQUEST['document'],
// Send an extra non-numeric ID to force actual send of document