fiddle some stuff regarding the new vfs-file select widget; fix lable1-5 capability;

This commit is contained in:
Klaus Leithoff 2013-10-02 14:50:24 +00:00
parent 499c9f3c22
commit 3733ef6d4c
6 changed files with 217 additions and 305 deletions

View File

@ -398,7 +398,7 @@ class mail_bo
*/ */
function restoreSessionData() function restoreSessionData()
{ {
$this->sessionData = $GLOBALS['egw']->session->appsession('session_data','mail'); $this->sessionData = egw_cache::getCache(egw_cache::SESSION,'mail','session_data',$callback=null,$callback_params=array(),$expiration=60*60*1);
$this->sessionData['folderStatus'] = egw_cache::getCache(egw_cache::INSTANCE,'email','folderStatus'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1); $this->sessionData['folderStatus'] = egw_cache::getCache(egw_cache::INSTANCE,'email','folderStatus'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1);
} }
@ -412,7 +412,7 @@ class mail_bo
egw_cache::setCache(egw_cache::INSTANCE,'email','folderStatus'.trim($GLOBALS['egw_info']['user']['account_id']),$this->sessionData['folderStatus'], $expiration=60*60*1); egw_cache::setCache(egw_cache::INSTANCE,'email','folderStatus'.trim($GLOBALS['egw_info']['user']['account_id']),$this->sessionData['folderStatus'], $expiration=60*60*1);
unset($this->sessionData['folderStatus']); unset($this->sessionData['folderStatus']);
} }
$GLOBALS['egw']->session->appsession('session_data','mail',$this->sessionData); egw_cache::setCache(egw_cache::SESSION,'mail','session_data',$this->sessionData, $expiration=60*60*1);
} }
/** /**
@ -4874,6 +4874,35 @@ class mail_bo
return $rv; return $rv;
} }
/**
* Returns a string showing the size of the message/attachment
*
* @param integer $bytes
* @return string formatted string
*/
static function show_readable_size($bytes)
{
$bytes /= 1024;
$type = 'k';
if ($bytes / 1024 > 1)
{
$bytes /= 1024;
$type = 'M';
}
if ($bytes < 10)
{
$bytes *= 10;
settype($bytes, 'integer');
$bytes /= 10;
}
else
settype($bytes, 'integer');
return $bytes . ' ' . $type ;
}
/** /**
* checkFileBasics * checkFileBasics
* check if formdata meets basic restrictions (in tmp dir, or vfs, mimetype, etc.) * check if formdata meets basic restrictions (in tmp dir, or vfs, mimetype, etc.)

View File

@ -115,11 +115,8 @@ class mail_compose
else else
$this->composeID = $_GET['composeid']; $this->composeID = $_GET['composeid'];
$this->restoreSessionData();
} }
$this->mailPreferences =& $this->mail_bo->mailPreferences; $this->mailPreferences =& $this->mail_bo->mailPreferences;
} }
@ -260,12 +257,12 @@ class mail_compose
$this->preferencesArray['message_forwarding'] = 'asmail'; $this->preferencesArray['message_forwarding'] = 'asmail';
foreach($replyIds as $key => $id) foreach($replyIds as $key => $id)
{ {
$this->getForwardData($icServer, $folder, $id,NULL); $content = $this->getForwardData($icServer, $folder, $id,NULL);
} }
$this->preferencesArray['message_forwarding'] = $buff; $this->preferencesArray['message_forwarding'] = $buff;
} }
} }
$this->compose(null,null,$_focusElement); $this->compose($content,null,$_focusElement);
} }
/** /**
@ -284,20 +281,61 @@ class mail_compose
error_log(__METHOD__.__LINE__.array2string($_content)); error_log(__METHOD__.__LINE__.array2string($_content));
if (isset($_GET['reply_id'])) $replyID = $_GET['reply_id']; if (isset($_GET['reply_id'])) $replyID = $_GET['reply_id'];
// VFS Selector was used
if (is_array($_content['selectFromVFSForCompose']))
{
foreach ($_content['selectFromVFSForCompose'] as $i => $path)
{
$_content['uploadForCompose'][] = array(
'name' => egw_vfs::basename($path),
'type' => egw_vfs::mime_content_type($path),
'file' => egw_vfs::PREFIX.$path,
'size' => filesize(egw_vfs::PREFIX.$path),
);
}
unset($_content['selectFromVFSForCompose']);
}
// check everything that was uploaded
if (is_array($_content['uploadForCompose'])) if (is_array($_content['uploadForCompose']))
{ {
foreach ($_content['uploadForCompose'] as $i => &$upload) foreach ($_content['uploadForCompose'] as $i => &$upload)
{ {
if (!isset($upload['file'])) $upload['file'] = $upload['tmp_name']; if (!isset($upload['file'])) $upload['file'] = $upload['tmp_name'];
$tmp_filename = mail_bo::checkFileBasics($upload,'compose',false); try
{
$tmp_filename = mail_bo::checkFileBasics($upload,$this->composeID,false);
}
catch (egw_exception_wrong_userinput $e)
{
$attachfailed = true;
$alert_msg = $e->getMessage();
}
$upload['file'] = $upload['tmp_name'] = $tmp_filename; $upload['file'] = $upload['tmp_name'] = $tmp_filename;
$upload['size'] = mail_bo::show_readable_size($upload['size']);
}
}
// check if someone did hit delete on the attachments list
$keysToDelete = array();
if (!empty($_content['attachments']['delete']))
{
$toDelete = $_content['attachments']['delete'];
unset($_content['attachments']['delete']);
$attachments = $_content['attachments'];
unset($_content['attachments']);
foreach($attachments as $i => $att)
{
$remove=false;
foreach($toDelete as $k =>$pressed)
{
if ($att['tmp_name']==$k) $remove=true;
}
if (!$remove) $_content['attachments'][] = $att;
} }
} }
$CAtFStart = array2string($_content); $CAtFStart = array2string($_content);
// read the data from session
// all values are empty for a new compose window // all values are empty for a new compose window
$insertSigOnTop = false; $insertSigOnTop = false;
$sessionData = /*$content; // */$this->getSessionData(); $content = array();
$alwaysAttachVCardAtCompose = false; // we use this to eliminate double attachments, if users VCard is already present/attached $alwaysAttachVCardAtCompose = false; // we use this to eliminate double attachments, if users VCard is already present/attached
if ( isset($GLOBALS['egw_info']['apps']['stylite']) && (isset($this->preferencesArray['attachVCardAtCompose']) && if ( isset($GLOBALS['egw_info']['apps']['stylite']) && (isset($this->preferencesArray['attachVCardAtCompose']) &&
$this->preferencesArray['attachVCardAtCompose'])) $this->preferencesArray['attachVCardAtCompose']))
@ -333,17 +371,17 @@ $CAtFStart = array2string($_content);
$_REQUEST['preset']['file'][] = $f; $_REQUEST['preset']['file'][] = $f;
} }
} }
$sessionData['subject'] = lang($app).' #'.$res['id'].': '; $content['subject'] = lang($app).' #'.$res['id'].': ';
foreach(array('subject','body','mimetype') as $name) { foreach(array('subject','body','mimetype') as $name) {
$sName = $name; $sName = $name;
if ($name=='mimetype') if ($name=='mimetype')
{ {
$sName = 'mimeType'; $sName = 'mimeType';
$sessionData[$sName] = $res[$name]; $content[$sName] = $res[$name];
} }
else else
{ {
if ($res[$name]) $sessionData[$sName] .= (strlen($sessionData[$sName])>0 ? ' ':'') .$res[$name]; if ($res[$name]) $content[$sName] .= (strlen($content[$sName])>0 ? ' ':'') .$res[$name];
} }
} }
} }
@ -367,13 +405,13 @@ $CAtFStart = array2string($_content);
foreach ($addRequests as $key => $reqval) { foreach ($addRequests as $key => $reqval) {
// the additional requests should have a =, to separate key from value. // the additional requests should have a =, to separate key from value.
$keyValuePair = explode('=',$reqval,2); $keyValuePair = explode('=',$reqval,2);
$sessionData[$keyValuePair[0]] .= (strlen($sessionData[$keyValuePair[0]])>0 ? ' ':'') . $keyValuePair[1]; $content[$keyValuePair[0]] .= (strlen($content[$keyValuePair[0]])>0 ? ' ':'') . $keyValuePair[1];
} }
} }
$sessionData['to']=$mailtoArray[0]; $content['to']=$mailtoArray[0];
// if the mailto string is not htmlentity decoded the arguments are passed as simple requests // if the mailto string is not htmlentity decoded the arguments are passed as simple requests
foreach(array('cc','bcc','subject','body') as $name) { foreach(array('cc','bcc','subject','body') as $name) {
if ($_REQUEST[$name]) $sessionData[$name] .= (strlen($sessionData[$name])>0 ? ( $name == 'cc' || $name == 'bcc' ? ',' : ' ') : '') . $_REQUEST[$name]; if ($_REQUEST[$name]) $content[$name] .= (strlen($content[$name])>0 ? ( $name == 'cc' || $name == 'bcc' ? ',' : ' ') : '') . $_REQUEST[$name];
} }
} }
@ -442,7 +480,7 @@ $CAtFStart = array2string($_content);
} }
} }
//error_log(__METHOD__.__LINE__.array2string($mailtoArray)); //error_log(__METHOD__.__LINE__.array2string($mailtoArray));
$sessionData['to']=$mailtoArray; $content['to']=$mailtoArray;
} }
} }
} }
@ -501,41 +539,40 @@ $CAtFStart = array2string($_content);
$remember = array(); $remember = array();
if (isset($_REQUEST['preset']['mailto']) || (isset($_REQUEST['app']) && isset($_REQUEST['method']) && isset($_REQUEST['id']))) if (isset($_REQUEST['preset']['mailto']) || (isset($_REQUEST['app']) && isset($_REQUEST['method']) && isset($_REQUEST['id'])))
{ {
foreach(array_keys($sessionData) as $k) foreach(array_keys($content) as $k)
{ {
if (in_array($k,array('to','cc','bcc','subject','body','mimeType'))) $remember[$k] = $sessionData[$k]; if (in_array($k,array('to','cc','bcc','subject','body','mimeType'))) $remember[$k] = $sessionData[$k];
} }
} }
$sessionData = $this->getSessionData(); if(!empty($remember)) $content = array_merge($content,$remember);
if(!empty($remember)) $sessionData = array_merge($sessionData,$remember);
} }
foreach(array('to','cc','bcc','subject','body') as $name) foreach(array('to','cc','bcc','subject','body') as $name)
{ {
if ($_REQUEST['preset'][$name]) $sessionData[$name] = $_REQUEST['preset'][$name]; if ($_REQUEST['preset'][$name]) $content[$name] = $_REQUEST['preset'][$name];
} }
} }
// is the to address set already? // is the to address set already?
if (!empty($_REQUEST['send_to'])) if (!empty($_REQUEST['send_to']))
{ {
$sessionData['to'] = base64_decode($_REQUEST['send_to']); $content['to'] = base64_decode($_REQUEST['send_to']);
// first check if there is a questionmark or ampersand // first check if there is a questionmark or ampersand
if (strpos($sessionData['to'],'?')!== false) list($sessionData['to'],$rest) = explode('?',$sessionData['to'],2); if (strpos($content['to'],'?')!== false) list($content['to'],$rest) = explode('?',$content['to'],2);
$sessionData['to'] = html_entity_decode($sessionData['to']); $content['to'] = html_entity_decode($content['to']);
if (($at_pos = strpos($sessionData['to'],'@')) !== false) if (($at_pos = strpos($content['to'],'@')) !== false)
{ {
if (($amp_pos = strpos(substr($sessionData['to'],$at_pos),'&')) !== false) if (($amp_pos = strpos(substr($content['to'],$at_pos),'&')) !== false)
{ {
//list($email,$addoptions) = explode('&',$value,2); //list($email,$addoptions) = explode('&',$value,2);
$email = substr($sessionData['to'],0,$amp_pos+$at_pos); $email = substr($content['to'],0,$amp_pos+$at_pos);
$rest = substr($sessionData['to'], $amp_pos+$at_pos+1); $rest = substr($content['to'], $amp_pos+$at_pos+1);
//error_log(__METHOD__.__LINE__.$email.' '.$rest); //error_log(__METHOD__.__LINE__.$email.' '.$rest);
$sessionData['to'] = $email; $content['to'] = $email;
} }
} }
if (strpos($sessionData['to'],'%40')!== false) $sessionData['to'] = html::purify(str_replace('%40','@',$sessionData['to'])); if (strpos($content['to'],'%40')!== false) $content['to'] = html::purify(str_replace('%40','@',$content['to']));
$rarr = array(html::purify($rest)); $rarr = array(html::purify($rest));
if (isset($rest)&&!empty($rest) && strpos($rest,'&')!== false) $rarr = explode('&',$rest); if (isset($rest)&&!empty($rest) && strpos($rest,'&')!== false) $rarr = explode('&',$rest);
//error_log(__METHOD__.__LINE__.$sessionData['to'].'->'.array2string($rarr)); //error_log(__METHOD__.__LINE__.$content['to'].'->'.array2string($rarr));
$karr = array(); $karr = array();
foreach ($rarr as $ri => $rval) foreach ($rarr as $ri => $rval)
{ {
@ -547,18 +584,18 @@ $CAtFStart = array2string($_content);
$karr[$k] = $v; $karr[$k] = $v;
} }
} }
//error_log(__METHOD__.__LINE__.$sessionData['to'].'->'.array2string($karr)); //error_log(__METHOD__.__LINE__.$content['to'].'->'.array2string($karr));
foreach(array('cc','bcc','subject','body') as $name) foreach(array('cc','bcc','subject','body') as $name)
{ {
if ($karr[$name]) $sessionData[$name] = $karr[$name]; if ($karr[$name]) $content[$name] = $karr[$name];
} }
if (!empty($_REQUEST['subject'])) $sessionData['subject'] = html::purify(trim(html_entity_decode($_REQUEST['subject']))); if (!empty($_REQUEST['subject'])) $content['subject'] = html::purify(trim(html_entity_decode($_REQUEST['subject'])));
} }
//is the MimeType set/requested //is the MimeType set/requested
if (!empty($_REQUEST['mimeType'])) if (!empty($_REQUEST['mimeType']))
{ {
$sessionData['mimeType'] = $_REQUEST['mimeType']; $content['mimeType'] = $_REQUEST['mimeType'];
} }
else else
{ {
@ -566,32 +603,32 @@ $CAtFStart = array2string($_content);
if ($isReply) if ($isReply)
{ {
if (!empty($this->preferencesArray['replyOptions']) && $this->preferencesArray['replyOptions']=="text" && if (!empty($this->preferencesArray['replyOptions']) && $this->preferencesArray['replyOptions']=="text" &&
$sessionData['mimeType'] == 'html') $content['mimeType'] == 'html')
{ {
$sessionData['mimeType'] = 'plain'; $content['mimeType'] = 'plain';
$sessionData['body'] = $this->convertHTMLToText(str_replace(array("\n\r","\n"),' ',$sessionData['body'])); $content['body'] = $this->convertHTMLToText(str_replace(array("\n\r","\n"),' ',$content['body']));
} }
if (!empty($this->preferencesArray['replyOptions']) && $this->preferencesArray['replyOptions']=="html" && if (!empty($this->preferencesArray['replyOptions']) && $this->preferencesArray['replyOptions']=="html" &&
$sessionData['mimeType'] != 'html') $content['mimeType'] != 'html')
{ {
$sessionData['mimeType'] = 'html'; $content['mimeType'] = 'html';
$sessionData['body'] = "<pre>".$sessionData['body']."</pre>"; $content['body'] = "<pre>".$content['body']."</pre>";
// take care this assumption is made on the creation of the reply header in bocompose::getReplyData // take care this assumption is made on the creation of the reply header in bocompose::getReplyData
if (strpos($sessionData['body'],"<pre> \r\n \r\n---")===0) $sessionData['body'] = substr_replace($sessionData['body']," <br>\r\n<pre>---",0,strlen("<pre> \r\n \r\n---")-1); if (strpos($content['body'],"<pre> \r\n \r\n---")===0) $content['body'] = substr_replace($content['body']," <br>\r\n<pre>---",0,strlen("<pre> \r\n \r\n---")-1);
} }
} }
} }
if ($sessionData['mimeType'] == 'html' && html::htmlarea_availible()===false) if ($content['mimeType'] == 'html' && html::htmlarea_availible()===false)
{ {
$sessionData['mimeType'] = 'plain'; $content['mimeType'] = 'plain';
$sessionData['body'] = $this->convertHTMLToText($sessionData['body']); $content['body'] = $this->convertHTMLToText($content['body']);
} }
// removal of possible script elements in HTML; getCleanHTML is the choice here, if not only for consistence // removal of possible script elements in HTML; getCleanHTML is the choice here, if not only for consistence
// we use the preg of common_functions (slightly altered) to meet eGroupwares behavior on posted variables // we use the preg of common_functions (slightly altered) to meet eGroupwares behavior on posted variables
if ($sessionData['mimeType'] == 'html') if ($content['mimeType'] == 'html')
{ {
// this is now moved to egw_htmLawed (triggered by default config) which is called with ckeditor anyway // this is now moved to egw_htmLawed (triggered by default config) which is called with ckeditor anyway
//mail_bo::getCleanHTML($sessionData['body'],true); //mail_bo::getCleanHTML($content['body'],true);
} }
// is a certain signature requested? // is a certain signature requested?
@ -603,10 +640,10 @@ $CAtFStart = array2string($_content);
{ {
$presetSig = (strtolower($_REQUEST['signature']) == 'no' ? -2 : -1); $presetSig = (strtolower($_REQUEST['signature']) == 'no' ? -2 : -1);
} }
if (($suppressSigOnTop || $sessionData['isDraft']) && !empty($sessionData['signatureID'])) $presetSig = (int)$sessionData['signatureID']; if (($suppressSigOnTop || $content['isDraft']) && !empty($content['signatureID'])) $presetSig = (int)$content['signatureID'];
if (($suppressSigOnTop || $sessionData['isDraft']) && !empty($sessionData['stationeryID'])) $presetStationery = $sessionData['stationeryID']; if (($suppressSigOnTop || $content['isDraft']) && !empty($content['stationeryID'])) $presetStationery = $content['stationeryID'];
$presetId = NULL; $presetId = NULL;
if (($suppressSigOnTop || $sessionData['isDraft']) && !empty($sessionData['identity'])) $presetId = (int)$sessionData['identity']; if (($suppressSigOnTop || $content['isDraft']) && !empty($content['identity'])) $presetId = (int)$content['identity'];
/* /*
@ -656,7 +693,7 @@ $CAtFStart = array2string($_content);
'composeid' => $this->composeID 'composeid' => $this->composeID
); );
$this->t->set_var("link_action",egw::link('/index.php',$linkData)); $this->t->set_var("link_action",egw::link('/index.php',$linkData));
$this->t->set_var('folder_name',$this->mail_bo->sessionData['mailbox']); $this->t->set_var('folder_name',$this->mail_bo->content['mailbox']);
$this->t->set_var('compose_id',$this->composeID); $this->t->set_var('compose_id',$this->composeID);
// the editorobject is needed all the time (since we use CKEDITOR // the editorobject is needed all the time (since we use CKEDITOR
//$editorObject = html::initCKEditor('400px','simple'); //$editorObject = html::initCKEditor('400px','simple');
@ -682,7 +719,7 @@ $CAtFStart = array2string($_content);
// navbar(, kind of) // navbar(, kind of)
*/ */
// handle subject // handle subject
$subject = mail_bo::htmlentities($sessionData['subject'],$this->displayCharset); $subject = mail_bo::htmlentities($content['subject'],$this->displayCharset);
/* /*
$this->t->set_var("subject",$subject); $this->t->set_var("subject",$subject);
@ -763,7 +800,7 @@ $CAtFStart = array2string($_content);
//_debug_array($singleIdentity); //_debug_array($singleIdentity);
$defaultIdentity = $singleIdentity->id; $defaultIdentity = $singleIdentity->id;
//$defaultIdentity = $key; //$defaultIdentity = $key;
$sessionData['signatureID'] = (!empty($singleIdentity->signature) ? $singleIdentity->signature : $sessionData['signatureID']); $content['signatureID'] = (!empty($singleIdentity->signature) ? $singleIdentity->signature : $content['signatureID']);
} }
} }
@ -771,12 +808,12 @@ $CAtFStart = array2string($_content);
$boSignatures = new mail_signatures(); $boSignatures = new mail_signatures();
$signatures = $boSignatures->getListOfSignatures(); $signatures = $boSignatures->getListOfSignatures();
if (empty($sessionData['signatureID'])) { if (empty($content['signatureID'])) {
if ($signatureData = $boSignatures->getDefaultSignature()) { if ($signatureData = $boSignatures->getDefaultSignature()) {
if (is_array($signatureData)) { if (is_array($signatureData)) {
$sessionData['signatureID'] = $signatureData['signatureid']; $content['signatureID'] = $signatureData['signatureid'];
} else { } else {
$sessionData['signatureID'] =$signatureData; $content['signatureID'] =$signatureData;
} }
} }
} }
@ -788,7 +825,7 @@ $CAtFStart = array2string($_content);
$selectSignatures[$signature['fm_signatureid']] = lang('Signature').': '.$signature['fm_description']; $selectSignatures[$signature['fm_signatureid']] = lang('Signature').': '.$signature['fm_description'];
} }
$disableRuler = false; $disableRuler = false;
$signature = $boSignatures->getSignature(($presetSig ? $presetSig : $sessionData['signatureID'])); $signature = $boSignatures->getSignature(($presetSig ? $presetSig : $content['signatureID']));
if ((isset($this->preferencesArray['disableRulerForSignatureSeparation']) && if ((isset($this->preferencesArray['disableRulerForSignatureSeparation']) &&
$this->preferencesArray['disableRulerForSignatureSeparation']) || $this->preferencesArray['disableRulerForSignatureSeparation']) ||
empty($signature->fm_signature) || trim($this->convertHTMLToText($signature->fm_signature,true,true)) =='') empty($signature->fm_signature) || trim($this->convertHTMLToText($signature->fm_signature,true,true)) =='')
@ -796,7 +833,7 @@ $CAtFStart = array2string($_content);
$disableRuler = true; $disableRuler = true;
} }
$font_span =''; $font_span ='';
if($sessionData['mimeType'] == 'html' /*&& trim($sessionData['body'])==''*/) { if($content['mimeType'] == 'html' /*&& trim($content['body'])==''*/) {
// User preferences for style // User preferences for style
$font = $GLOBALS['egw_info']['user']['preferences']['common']['rte_font']; $font = $GLOBALS['egw_info']['user']['preferences']['common']['rte_font'];
$font_size = egw_ckeditor_config::font_size_from_prefs(); $font_size = egw_ckeditor_config::font_size_from_prefs();
@ -804,7 +841,7 @@ $CAtFStart = array2string($_content);
if (empty($font) && empty($font_size)) $font_span = ''; if (empty($font) && empty($font_size)) $font_span = '';
} }
//remove possible html header stuff //remove possible html header stuff
if (stripos($sessionData['body'],'<html><head></head><body>')!==false) $sessionData['body'] = str_ireplace(array('<html><head></head><body>','</body></html>'),array('',''),$sessionData['body']); if (stripos($content['body'],'<html><head></head><body>')!==false) $content['body'] = str_ireplace(array('<html><head></head><body>','</body></html>'),array('',''),$content['body']);
//error_log(__METHOD__.__LINE__.array2string($this->preferencesArray)); //error_log(__METHOD__.__LINE__.array2string($this->preferencesArray));
$blockElements = array('address','blockquote','center','del','dir','div','dl','fieldset','form','h1','h2','h3','h4','h5','h6','hr','ins','isindex','menu','noframes','noscript','ol','p','pre','table','ul'); $blockElements = array('address','blockquote','center','del','dir','div','dl','fieldset','form','h1','h2','h3','h4','h5','h6','hr','ins','isindex','menu','noframes','noscript','ol','p','pre','table','ul');
if (isset($this->preferencesArray['insertSignatureAtTopOfMessage']) && if (isset($this->preferencesArray['insertSignatureAtTopOfMessage']) &&
@ -814,7 +851,7 @@ $CAtFStart = array2string($_content);
{ {
$insertSigOnTop = ($insertSigOnTop?$insertSigOnTop:true); $insertSigOnTop = ($insertSigOnTop?$insertSigOnTop:true);
$sigText = mail_bo::merge($signature->fm_signature,array($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id'))); $sigText = mail_bo::merge($signature->fm_signature,array($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id')));
if ($sessionData['mimeType'] == 'html') if ($content['mimeType'] == 'html')
{ {
$sigTextStartsWithBlockElement = ($disableRuler?false:true); $sigTextStartsWithBlockElement = ($disableRuler?false:true);
foreach($blockElements as $e) foreach($blockElements as $e)
@ -823,73 +860,73 @@ $CAtFStart = array2string($_content);
if (stripos(trim($sigText),'<'.$e)===0) $sigTextStartsWithBlockElement = true; if (stripos(trim($sigText),'<'.$e)===0) $sigTextStartsWithBlockElement = true;
} }
} }
if($sessionData['mimeType'] == 'html') { if($content['mimeType'] == 'html') {
$before = (!empty($font_span) && !($insertSigOnTop === 'below')?$font_span:'&nbsp;').($disableRuler?''/*($sigTextStartsWithBlockElement?'':'<p style="margin:0px;"/>')*/:'<hr style="border:1px dotted silver; width:90%;">'); $before = (!empty($font_span) && !($insertSigOnTop === 'below')?$font_span:'&nbsp;').($disableRuler?''/*($sigTextStartsWithBlockElement?'':'<p style="margin:0px;"/>')*/:'<hr style="border:1px dotted silver; width:90%;">');
$inbetween = '&nbsp;<br>'; $inbetween = '&nbsp;<br>';
} else { } else {
$before = ($disableRuler ?"\r\n\r\n":"\r\n\r\n-- \r\n"); $before = ($disableRuler ?"\r\n\r\n":"\r\n\r\n-- \r\n");
$inbetween = "\r\n"; $inbetween = "\r\n";
} }
if ($sessionData['mimeType'] == 'html') if ($content['mimeType'] == 'html')
{ {
$sigText = ($sigTextStartsWithBlockElement?'':"<div>")."<!-- HTMLSIGBEGIN -->".$sigText."<!-- HTMLSIGEND -->".($sigTextStartsWithBlockElement?'':"</div>"); $sigText = ($sigTextStartsWithBlockElement?'':"<div>")."<!-- HTMLSIGBEGIN -->".$sigText."<!-- HTMLSIGEND -->".($sigTextStartsWithBlockElement?'':"</div>");
} }
if ($insertSigOnTop === 'below') if ($insertSigOnTop === 'below')
{ {
$sessionData['body'] = $font_span.$sessionData['body'].$before.($sessionData['mimeType'] == 'html'?$sigText:$this->convertHTMLToText($sigText,true,true)); $content['body'] = $font_span.$content['body'].$before.($content['mimeType'] == 'html'?$sigText:$this->convertHTMLToText($sigText,true,true));
} }
else else
{ {
$sessionData['body'] = $before.($sessionData['mimeType'] == 'html'?$sigText:$this->convertHTMLToText($sigText,true,true)).$inbetween.$sessionData['body']; $content['body'] = $before.($content['mimeType'] == 'html'?$sigText:$this->convertHTMLToText($sigText,true,true)).$inbetween.$content['body'];
} }
} }
else else
{ {
$sessionData['body'] = ($font_span?$font_span:'&nbsp;').$sessionData['body']; $content['body'] = ($font_span?$font_span:'&nbsp;').$content['body'];
} }
//error_log(__METHOD__.__LINE__.$sessionData['body']); //error_log(__METHOD__.__LINE__.$content['body']);
// prepare body // prepare body
// in a way, this tests if we are having real utf-8 (the displayCharset) by now; we should if charsets reported (or detected) are correct // in a way, this tests if we are having real utf-8 (the displayCharset) by now; we should if charsets reported (or detected) are correct
if (strtoupper($this->displayCharset) == 'UTF-8') if (strtoupper($this->displayCharset) == 'UTF-8')
{ {
$test = @json_encode($sessionData['body']); $test = @json_encode($content['body']);
//error_log(__METHOD__.__LINE__.' ->'.strlen($singleBodyPart['body']).' Error:'.json_last_error().'<- BodyPart:#'.$test.'#'); //error_log(__METHOD__.__LINE__.' ->'.strlen($singleBodyPart['body']).' Error:'.json_last_error().'<- BodyPart:#'.$test.'#');
//if (json_last_error() != JSON_ERROR_NONE && strlen($singleBodyPart['body'])>0) //if (json_last_error() != JSON_ERROR_NONE && strlen($singleBodyPart['body'])>0)
if ($test=="null" && strlen($sessionData['body'])>0) if ($test=="null" && strlen($content['body'])>0)
{ {
// try to fix broken utf8 // try to fix broken utf8
$x = (function_exists('mb_convert_encoding')?mb_convert_encoding($sessionData['body'],'UTF-8','UTF-8'):(function_exists('iconv')?@iconv("UTF-8","UTF-8//IGNORE",$sessionData['body']):$sessionData['body'])); $x = (function_exists('mb_convert_encoding')?mb_convert_encoding($content['body'],'UTF-8','UTF-8'):(function_exists('iconv')?@iconv("UTF-8","UTF-8//IGNORE",$content['body']):$content['body']));
$test = @json_encode($x); $test = @json_encode($x);
if ($test=="null" && strlen($sessionData['body'])>0) if ($test=="null" && strlen($content['body'])>0)
{ {
// this should not be needed, unless something fails with charset detection/ wrong charset passed // this should not be needed, unless something fails with charset detection/ wrong charset passed
error_log(__METHOD__.__LINE__.' Charset problem detected; Charset Detected:'.mail_bo::detect_encoding($sessionData['body'])); error_log(__METHOD__.__LINE__.' Charset problem detected; Charset Detected:'.mail_bo::detect_encoding($content['body']));
$sessionData['body'] = utf8_encode($sessionData['body']); $content['body'] = utf8_encode($content['body']);
} }
else else
{ {
$sessionData['body'] = $x; $content['body'] = $x;
} }
} }
} }
//error_log(__METHOD__.__LINE__.$sessionData['body']); //error_log(__METHOD__.__LINE__.$content['body']);
if($sessionData['mimeType'] == 'html') { if($content['mimeType'] == 'html') {
$mode = 'simple-withimage'; $mode = 'simple-withimage';
//$mode ='advanced';// most helpful for debuging //$mode ='advanced';// most helpful for debuging
#if (isset($GLOBALS['egw_info']['server']['enabled_spellcheck'])) $mode = 'egw_simple_spellcheck'; #if (isset($GLOBALS['egw_info']['server']['enabled_spellcheck'])) $mode = 'egw_simple_spellcheck';
$style="border:0px; width:100%; height:500px;"; $style="border:0px; width:100%; height:500px;";
// dont run purify, as we already did that (getCleanHTML). // dont run purify, as we already did that (getCleanHTML).
/* /*
$this->t->set_var('tinymce', html::fckEditorQuick('body', $mode, $sessionData['body'],'500px','100%',false,'0px',($_focusElement=='body'?true:false),($_focusElement!='body'?'parent.setToFocus("'.$_focusElement.'");':''))); $this->t->set_var('tinymce', html::fckEditorQuick('body', $mode, $content['body'],'500px','100%',false,'0px',($_focusElement=='body'?true:false),($_focusElement!='body'?'parent.setToFocus("'.$_focusElement.'");':'')));
$this->t->set_var('mimeType', 'html'); $this->t->set_var('mimeType', 'html');
*/ */
$ishtml=1; $ishtml=1;
} else { } else {
$border="1px solid gray; margin:1px"; $border="1px solid gray; margin:1px";
// initalize the CKEditor Object to enable switching back and force // initalize the CKEditor Object to enable switching back and force
//$editor = html::fckEditorQuick('body', 'ascii', $sessionData['body'],'500px','99%',false,$border); //$editor = html::fckEditorQuick('body', 'ascii', $content['body'],'500px','99%',false,$border);
$ishtml=0; $ishtml=0;
} }
@ -908,7 +945,7 @@ $CAtFStart = array2string($_content);
*/ */
// signature stuff set earlier // signature stuff set earlier
$sel_options['signatureID'] = $selectSignatures; $sel_options['signatureID'] = $selectSignatures;
$content['signatureID'] = ($presetSig ? $presetSig : $sessionData['signatureID']); $content['signatureID'] = ($presetSig ? $presetSig : $content['signatureID']);
// end signature stuff // end signature stuff
// stationery stuff // stationery stuff
@ -928,11 +965,11 @@ $CAtFStart = array2string($_content);
// if ID of signature Select Box is set, we allow for changing the sig onChange of the signatueSelect // if ID of signature Select Box is set, we allow for changing the sig onChange of the signatueSelect
$content['stationeryID'] = ($presetStationery ? $presetStationery : 0); $content['stationeryID'] = ($presetStationery ? $presetStationery : 0);
// end stationery stuff // end stationery stuff
//$sessionData['bcc'] = array('kl@stylite.de','kl@leithoff.net'); //$content['bcc'] = array('kl@stylite.de','kl@leithoff.net');
// address stuff like from, to, cc, replyto // address stuff like from, to, cc, replyto
$destinationRows = 0; $destinationRows = 0;
foreach(array('to','cc','bcc','replyto','folder') as $destination) { foreach(array('to','cc','bcc','replyto','folder') as $destination) {
foreach((array)$sessionData[$destination] as $key => $value) { foreach((array)$content[$destination] as $key => $value) {
if ($value=="NIL@NIL") continue; if ($value=="NIL@NIL") continue;
if ($destination=='replyto' && str_replace('"','',$value) == str_replace('"','',$identities[($presetId ? $presetId : $defaultIdentity)])) continue; if ($destination=='replyto' && str_replace('"','',$value) == str_replace('"','',$identities[($presetId ? $presetId : $defaultIdentity)])) continue;
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value))); //error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
@ -954,24 +991,27 @@ $CAtFStart = array2string($_content);
if (!empty($content['FOLDER'])) $sel_options['FOLDER']=$this->ajax_searchFolder(0,true); if (!empty($content['FOLDER'])) $sel_options['FOLDER']=$this->ajax_searchFolder(0,true);
$content['SENDER'] = (empty($content['SENDER'])?($selectedSender?(array)$selectedSender:''):$content['SENDER']); $content['SENDER'] = (empty($content['SENDER'])?($selectedSender?(array)$selectedSender:''):$content['SENDER']);
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:''); $content['is_html'] = ($this->content['mimeType'] == 'html'?true:'');
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true); $content['is_plain'] = ($this->content['mimeType'] == 'html'?'':true);
$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text'] =$CAtFStart.$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text']; $content['mail_'.($this->content['mimeType'] == 'html'?'html':'plain').'text'] =$CAtFStart.$content['mail_'.($this->content['mimeType'] == 'html'?'html':'plain').'text'];
} }
else else
{ {
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:''); $content['is_html'] = ($this->content['mimeType'] == 'html'?true:'');
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true); $content['is_plain'] = ($this->content['mimeType'] == 'html'?'':true);
//error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender))); //error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender)));
$content['SENDER'] = ($selectedSender?(array)$selectedSender:''); $content['SENDER'] = ($selectedSender?(array)$selectedSender:'');
//error_log(__METHOD__.__LINE__.$sessionData['body']); //error_log(__METHOD__.__LINE__.$content['body']);
$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text'] = $sessionData['body']; $content['mail_'.($this->content['mimeType'] == 'html'?'html':'plain').'text'] = $content['body'];
} }
$content['showtempname']=0; $content['showtempname']=0;
$content['attachments']=(is_array($content['attachments'])&&is_array($content['uploadForCompose'])?array_merge($content['attachments'],$content['uploadForCompose']):(is_array($content['uploadForCompose'])?$content['uploadForCompose']:(is_array($content['attachments'])?$content['attachments']:null))); error_log(__METHOD__.__LINE__.array2string($content['attachments']));
$content['attachments']=(is_array($content['attachments'])&&is_array($content['uploadForCompose'])?array_merge($content['attachments'],(!empty($content['uploadForCompose'])?$content['uploadForCompose']:array())):(is_array($content['uploadForCompose'])?$content['uploadForCompose']:(is_array($content['attachments'])?$content['attachments']:null)));
//if (is_array($content['attachments'])) foreach($content['attachments'] as $k => &$file) $file['delete['.$file['tmp_name'].']']=0; //if (is_array($content['attachments'])) foreach($content['attachments'] as $k => &$file) $file['delete['.$file['tmp_name'].']']=0;
$content['no_griddata'] = empty($content['attachments']); $content['no_griddata'] = empty($content['attachments']);
$preserv['attachments'] = $content['attachments']; $preserv['attachments'] = $content['attachments'];
error_log(__METHOD__.__LINE__.array2string($content['attachments']));
$preserv['is_html'] = $content['is_html']; $preserv['is_html'] = $content['is_html'];
$preserv['is_plain'] = $content['is_plain']; $preserv['is_plain'] = $content['is_plain'];
$etpl = new etemplate_new('mail.compose'); $etpl = new etemplate_new('mail.compose');
@ -984,19 +1024,19 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
error_log(__METHOD__.__LINE__.array2string($content)); error_log(__METHOD__.__LINE__.array2string($content));
if ($content) if ($content)
{ {
$this->sessionData['mimeType'] = 'plain'; $this->content['mimeType'] = 'plain';
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:''); $content['is_html'] = ($this->content['mimeType'] == 'html'?true:'');
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true); $content['is_plain'] = ($this->content['mimeType'] == 'html'?'':true);
} }
else else
{ {
$sessionData['body'] = 'bla bla bla'; $content['body'] = 'bla bla bla';
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:''); $content['is_html'] = ($this->content['mimeType'] == 'html'?true:'');
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true); $content['is_plain'] = ($this->content['mimeType'] == 'html'?'':true);
//error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender))); //error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender)));
$content['SENDER'] = ($selectedSender?(array)$selectedSender:''); $content['SENDER'] = ($selectedSender?(array)$selectedSender:'');
//error_log(__METHOD__.__LINE__.$sessionData['body']); //error_log(__METHOD__.__LINE__.$content['body']);
$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text'] = $sessionData['body']; $content['mail_'.($this->content['mimeType'] == 'html'?'html':'plain').'text'] = $content['body'];
} }
$etpl = new etemplate_new('mail.testhtmlarea'); $etpl = new etemplate_new('mail.testhtmlarea');
$etpl->exec('mail.mail_compose.testhtmlarea',$content,$sel_options,$readonlys,$preserv,2); $etpl->exec('mail.mail_compose.testhtmlarea',$content,$sel_options,$readonlys,$preserv,2);
@ -1009,101 +1049,9 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
if (!empty($folder) && !empty($replyID) ) { if (!empty($folder) && !empty($replyID) ) {
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
$this->getDraftData($icServer, $folder, $replyID); $content = $this->getDraftData($icServer, $folder, $replyID);
} }
$this->compose('body',$suppressSigOnTop=true); $this->compose($content,null,'body',$suppressSigOnTop=true);
}
/**
* Callback for filemanagers select file dialog
*
* @param string $composeid
* @param string|array $files path of file(s) in vfs (no egw_vfs::PREFIX, just the path)
* @return string javascript output by the file select dialog, usually to close it
*/
function vfsSelector($composeid,$files)
{
foreach((array) $files as $path)
{
$formData = array(
'name' => egw_vfs::basename($path),
'type' => egw_vfs::mime_content_type($path),
'file' => egw_vfs::PREFIX.$path,
'size' => filesize(egw_vfs::PREFIX.$path),
);
$this->addAttachment($formData);
}
return 'window.close();';
}
function fileSelector()
{
if(is_array($_FILES["addFileName"])) {
#phpinfo();
//_debug_array($_FILES);
$success=false;
if (is_array($_FILES["addFileName"]['name']))
{
// multiple uploads supported by newer firefox (>3.6) and chrome (>4) versions,
// upload array information is by key within the attribute (name, type, size, temp_name)
foreach($_FILES["addFileName"]['name'] as $key => $filename)
{
if($_FILES['addFileName']['error'][$key] == $UPLOAD_ERR_OK) {
$formData['name'] = $_FILES['addFileName']['name'][$key];
$formData['type'] = $_FILES['addFileName']['type'][$key];
$formData['file'] = $_FILES['addFileName']['tmp_name'][$key];
$formData['size'] = $_FILES['addFileName']['size'][$key];
$this->addAttachment($formData);
$success = true;
}
}
}
else // should not happen as upload form name is defined as addFileName[]
{
if($_FILES['addFileName']['error'] == $UPLOAD_ERR_OK) {
$formData['name'] = $_FILES['addFileName']['name'];
$formData['type'] = $_FILES['addFileName']['type'];
$formData['file'] = $_FILES['addFileName']['tmp_name'];
$formData['size'] = $_FILES['addFileName']['size'];
$this->addAttachment($formData);
$success = true;
}
}
if ($success == true)
{
print "<script type='text/javascript'>window.close();</script>";
}
else
{
print "<script type='text/javascript'>document.getElementById('fileSelectorDIV1').style.display = 'inline';document.getElementById('fileSelectorDIV2').style.display = 'none';</script>";
}
}
// this call loads js and css for the treeobject
html::tree(false,false,false,null,'foldertree','','',false,'/',null,false);
egw_framework::validate_file('jscode','composeMessage','felamimail');
#$uiwidgets =& CreateObject('felamimail.uiwidgets');
/*
$this->t->set_file(array("composeForm" => "composeForm.tpl"));
$this->t->set_block('composeForm','fileSelector','fileSelector');
$this->translate();
$linkData = array
(
'menuaction' => 'felamimail.uicompose.fileSelector',
'composeid' => $this->composeID
);
$this->t->set_var('file_selector_url', egw::link('/index.php',$linkData));
$maxUploadSize = ini_get('upload_max_filesize');
$this->t->set_var('max_uploadsize', $maxUploadSize);
$this->t->set_var('ajax-loader', common::image('felamimail','ajax-loader'));
$this->t->pparse("out","fileSelector");
*/
} }
function forward() { function forward() {
@ -1116,10 +1064,10 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
if (!empty($replyID)) if (!empty($replyID))
{ {
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
$this->getForwardData($icServer, $folder, $replyID, $partID, $mode); $content = $this->getForwardData($icServer, $folder, $replyID, $partID, $mode);
} }
$handleAsReply = ($mode?$mode=='inline':$this->preferencesArray['message_forwarding'] == 'inline'); $handleAsReply = ($mode?$mode=='inline':$this->preferencesArray['message_forwarding'] == 'inline');
$this->compose('to',false, $handleAsReply); $this->compose($content,null,'to',false, $handleAsReply);
} }
function getAttachment() function getAttachment()
@ -1197,9 +1145,9 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
$partID = $_GET['part_id']; $partID = $_GET['part_id'];
if (!empty($folder) && !empty($replyID) ) { if (!empty($folder) && !empty($replyID) ) {
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
$this->getDraftData($icServer, $folder, $replyID, $partID); $content = $this->getDraftData($icServer, $folder, $replyID, $partID);
} }
$this->compose('body',true); $this->compose($content,null,'body',true);
} }
function reply() { function reply() {
@ -1209,9 +1157,9 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
$partID = $_GET['part_id']; $partID = $_GET['part_id'];
if (!empty($folder) && !empty($replyID) ) { if (!empty($folder) && !empty($replyID) ) {
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
$this->getReplyData('single', $icServer, $folder, $replyID, $partID); $content = $this->getReplyData('single', $icServer, $folder, $replyID, $partID);
} }
$this->compose('body',false,true); $this->compose($content,null,'body',false,true);
} }
function replyAll() { function replyAll() {
@ -1221,83 +1169,15 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
$partID = $_GET['part_id']; $partID = $_GET['part_id'];
if (!empty($folder) && !empty($replyID) ) { if (!empty($folder) && !empty($replyID) ) {
// this fill the session data with the values from the original email // this fill the session data with the values from the original email
$this->getReplyData('all', $icServer, $folder, $replyID, $partID); $content = $this->getReplyData('all', $icServer, $folder, $replyID, $partID);
} }
$this->compose('body',false,true); $this->compose($content,null,'body',false,true);
} }
/** /**
* previous bocompose stuff * previous bocompose stuff
*/ */
/**
* adds uploaded files or files in eGW's temp directory as attachments
*
* It also stores the given data in the session
*
* @param array $_formData fields of the compose form (to,cc,bcc,reply_to,subject,body,priority,signature), plus data of the file (name,file,size,type)
*/
function addAttachment($_formData,$eliminateDoubleAttachments=false)
{
$attachfailed = false;
// to guard against exploits the file must be either uploaded or be in the temp_dir
// check if formdata meets basic restrictions (in tmp dir, or vfs, mimetype, etc.)
try
{
$tmpFileName = mail_bo::checkFileBasics($_formData,$this->composeID,false);
}
catch (egw_exception_wrong_userinput $e)
{
$attachfailed = true;
$alert_msg = $e->getMessage();
}
if ($eliminateDoubleAttachments == true)
foreach ((array)$this->sessionData['attachments'] as $k =>$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(
'name' => $_formData['name'],
'type' => $_formData['type'],
'file' => $tmpFileName,
'size' => $_formData['size']
);
// trying different ID-ing Method, as getRandomString seems to produce non Random String on certain systems.
$attachmentID = md5(time().serialize($buffer));
//error_log(__METHOD__." add Attachment with ID:".$attachmentID." (md5 of serialized array)");
if (!is_array($this->sessionData['attachments'])) $this->sessionData['attachments']=array();
$this->sessionData['attachments'][$attachmentID] = $buffer;
unset($buffer);
}
else
{
error_log(__METHOD__.__LINE__.array2string($alert_msg));
}
$this->saveSessionData();
//print"<pre>";
//error_log(__METHOD__.__LINE__.print_r($this->sessionData,true));
//print"</pre>";exit;
}
function addMessageAttachment($_uid, $_partID, $_folder, $_name, $_type, $_size)
{
$this->sessionData['attachments'][]=array (
'uid' => $_uid,
'partID' => $_partID,
'name' => $_name,
'type' => $_type,
'size' => $_size,
'folder' => $_folder
);
$this->saveSessionData();
}
/** /**
* replace emailaddresses eclosed in <> (eg.: <me@you.de>) with the emailaddress only (e.g: me@you.de) * replace emailaddresses eclosed in <> (eg.: <me@you.de>) with the emailaddress only (e.g: me@you.de)
* always returns 1 * always returns 1
@ -1526,7 +1406,6 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
} }
$mail_bo->closeConnection(); $mail_bo->closeConnection();
$this->saveSessionData();
} }
function getErrorInfo() function getErrorInfo()
@ -1593,7 +1472,6 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
{ {
$this->preferencesArray['message_forwarding'] = $modebuff; $this->preferencesArray['message_forwarding'] = $modebuff;
} }
$this->saveSessionData();
} }
/** /**
@ -1839,7 +1717,6 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
$mail_bo->closeConnection(); $mail_bo->closeConnection();
$this->saveSessionData();
} }
static function _getCleanHTML($_body, $usepurify = false, $cleanTags=true) static function _getCleanHTML($_body, $usepurify = false, $cleanTags=true)
@ -1853,27 +1730,8 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
return $_body; return $_body;
} }
function getSessionData()
{
return $this->sessionData;
}
function removeAttachment($_attachmentID) { function removeAttachment($_attachmentID) {
if (parse_url($this->sessionData['attachments'][$_attachmentID]['file'],PHP_URL_SCHEME) != 'vfs') {
unlink($this->sessionData['attachments'][$_attachmentID]['file']);
}
unset($this->sessionData['attachments'][$_attachmentID]);
$this->saveSessionData();
}
function restoreSessionData()
{
$this->sessionData = $GLOBALS['egw']->session->appsession('compose_session_data_'.$this->composeID, 'felamimail');
}
function saveSessionData()
{
$GLOBALS['egw']->session->appsession('compose_session_data_'.$this->composeID,'felamimail',$this->sessionData);
} }
function createMessage(&$_mailObject, $_formData, $_identity, $_signature = false, $_convertLinks=false) function createMessage(&$_mailObject, $_formData, $_identity, $_signature = false, $_convertLinks=false)
@ -2460,7 +2318,6 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
} }
$this->sessionData = ''; $this->sessionData = '';
$this->saveSessionData();
return true; return true;
} }
@ -2472,24 +2329,24 @@ $content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text
if($signatureData = $boSignatures->getDefaultSignature()) { if($signatureData = $boSignatures->getDefaultSignature()) {
if (is_array($signatureData)) { if (is_array($signatureData)) {
$this->sessionData['signatureID'] = $signatureData['signatureid']; $content['signatureID'] = $signatureData['signatureid'];
} else { } else {
$this->sessionData['signatureID'] = $signatureData; $content['signatureID'] = $signatureData;
} }
} else { } else {
$this->sessionData['signatureID'] = -1; $content['signatureID'] = -1;
} }
// retrieve the signature accociated with the identity // retrieve the signature accociated with the identity
$accountData = $this->bopreferences->getAccountData($this->preferences,'active'); $accountData = $this->bopreferences->getAccountData($this->preferences,'active');
if ($accountData['identity']->signature) $this->sessionData['signatureID'] = $accountData['identity']->signature; if ($accountData['identity']->signature) $content['signatureID'] = $accountData['identity']->signature;
// apply the current mailbox to the compose session data of the/a new email // apply the current mailbox to the compose session data of the/a new email
$appsessionData = $GLOBALS['egw']->session->appsession('session_data'); $appsessionData = $GLOBALS['egw']->session->appsession('session_data');
$this->sessionData['mailbox'] = $appsessionData['mailbox']; $content['mailbox'] = $appsessionData['mailbox'];
$this->sessionData['mimeType'] = 'html'; $content['mimeType'] = 'html';
if (!empty($this->preferencesArray['composeOptions']) && $this->preferencesArray['composeOptions']=="text") $this->sessionData['mimeType'] = 'plain'; if (!empty($this->preferencesArray['composeOptions']) && $this->preferencesArray['composeOptions']=="text") $content['mimeType'] = 'plain';
return $content;
$this->saveSessionData();
} }
function stripSlashes($_string) function stripSlashes($_string)

View File

@ -160,6 +160,12 @@ class mail_ui
*/ */
function index(array $content=null,$msg=null) function index(array $content=null,$msg=null)
{ {
$this->mail_bo->restoreSessionData();
$sessionFolder = $this->mail_bo->sessionData['maibox'];
if ($this->mail_bo->folderExists($sessionFolder))
{
$this->mail_bo->reopen($sessionFolder); // needed to fetch full set of capabilities
}
//_debug_array($content); //_debug_array($content);
if (!is_array($content)) if (!is_array($content))
{ {
@ -199,7 +205,6 @@ class mail_ui
unset($content['msg']); unset($content['msg']);
} }
//$content['preview'] = "<html><body style='background-color: pink;'/></html>"; //$content['preview'] = "<html><body style='background-color: pink;'/></html>";
$this->mail_bo->restoreSessionData();
// filter is used to choose the mailbox // filter is used to choose the mailbox
//if (!isset($content[self::$nm_index]['foldertree'])) // maybe we fetch the folder here //if (!isset($content[self::$nm_index]['foldertree'])) // maybe we fetch the folder here
@ -219,11 +224,11 @@ class mail_ui
$sel_options[self::$nm_index]['foldertree'] = $this->getFolderTree(false); $sel_options[self::$nm_index]['foldertree'] = $this->getFolderTree(false);
$sessionFolder = $this->mail_bo->sessionData['maibox']; //$sessionFolder = $this->mail_bo->sessionData['maibox'];// already set and tested this earlier
if ($this->mail_bo->folderExists($sessionFolder)) if ($this->mail_bo->folderExists($sessionFolder))
{ {
$content[self::$nm_index]['selectedFolder'] = $this->mail_bo->profileID.self::$delimiter.$this->mail_bo->sessionData['maibox']; $content[self::$nm_index]['selectedFolder'] = $this->mail_bo->profileID.self::$delimiter.$this->mail_bo->sessionData['maibox'];
$this->mail_bo->reopen($sessionFolder); // needed to fetch full set of capabilities //$this->mail_bo->reopen($sessionFolder); // needed to fetch full set of capabilities: but did that earlier
} }
// since we are connected,(and selected the folder) we check for capabilities SUPPORTS_KEYWORDS to eventually add the keyword filters // since we are connected,(and selected the folder) we check for capabilities SUPPORTS_KEYWORDS to eventually add the keyword filters
if ($this->mail_bo->icServer->_connected == 1 && $this->mail_bo->icServer->hasCapability('SUPPORTS_KEYWORDS')) if ($this->mail_bo->icServer->_connected == 1 && $this->mail_bo->icServer->hasCapability('SUPPORTS_KEYWORDS'))

View File

@ -1288,6 +1288,20 @@ app.mail = AppJS.extend(
} }
}, },
vfsUploadForCompose: function(_egw, _widget, _window)
{
console.log(_egw, _widget, _window);
if (!jQuery.isEmptyObject(_widget.getValue()))
{
this.et2_obj.submit();
}
},
saveAsDraft: function(_egw, _widget, _window)
{
this.et2_obj.submit();
},
sieve_editRules_radiobtn: function() sieve_editRules_radiobtn: function()
{ {
console.log("hi i am radiobtn"); console.log("hi i am radiobtn");

View File

@ -319,6 +319,14 @@ input[type=button] {
background-repeat: no-repeat; background-repeat: no-repeat;
} }
#mail-compose_button\[send\] {
text-align: left;
padding-left: 25px;
background-image: url(images/mail_send.png) !important;
background-position: left;
background-repeat: no-repeat;
}
.mailDisplay, #mail-index_mailPreview { .mailDisplay, #mail-index_mailPreview {
overflow: hidden; overflow: hidden;
position: relative; position: relative;

View File

@ -9,9 +9,8 @@
<taglist-email id="SENDER" width="88%" allowFreeEntries="false" maxSelection="1" autocomplete_url="mail.mail_compose.ajax_searchIdentities" onclick="app.mail.address_click"/> <taglist-email id="SENDER" width="88%" allowFreeEntries="false" maxSelection="1" autocomplete_url="mail.mail_compose.ajax_searchIdentities" onclick="app.mail.address_click"/>
</hbox> </hbox>
<hbox> <hbox>
<button label="Submit" id="button[apply]"/><button label="Save" id="button[save]"/> <button label="Send" id="button[send]"/> <buttononly value="saveAsDraft" id="saveAsDraft" image="fileexport" onclick="app.mail.saveAsDraft"/>
<buttononly id="selectFromVFSForCompose" value="Select" image="filemanager/navbar" onclick="app.mail.import_displayVfsSelector('compose')" /> <vfs-select id="selectFromVFSForCompose" onchange="app.mail.vfsUploadForCompose"/>
<textbox align="left" width="1px" id="vfsfile" />
<file statustext="Select file to attach to message" multiple='true' progress='mailUploadProgress' onFinish="app.mail.uploadForCompose" id="uploadForCompose" drop_target ="mailUploadSection"/> <file statustext="Select file to attach to message" multiple='true' progress='mailUploadProgress' onFinish="app.mail.uploadForCompose" id="uploadForCompose" drop_target ="mailUploadSection"/>
</hbox> </hbox>
<hbox class="mailComposeHeaders" width="99%"> <hbox class="mailComposeHeaders" width="99%">
@ -74,7 +73,7 @@
<description id="${row}[tmp_name]" /> <description id="${row}[tmp_name]" />
<description id="${row}[name]" /> <description id="${row}[name]" />
<description id="${row}[type]" /> <description id="${row}[type]" />
<vfs-size align="right" id="${row}[size]" no_lang="1" readonly="true"/> <description align="right" id="${row}[size]" />
<button id="delete[$row_cont[tmp_name]]" value="Delete" image="delete" /> <button id="delete[$row_cont[tmp_name]]" value="Delete" image="delete" />
</row> </row>
</rows> </rows>