mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-21 23:43:17 +01:00
several stuff towards a compose window; a testhtmlarea template to test/figure out issues regarding disabled
This commit is contained in:
parent
1d9589db99
commit
102bc9d6a2
@ -213,7 +213,7 @@ class mail_bo
|
||||
else
|
||||
{
|
||||
// make sure the prefs are up to date for the profile to load
|
||||
$loadfailed = false;
|
||||
$loadfailed = $alreadytriedreloading = false;
|
||||
self::$instances[$_profileID]->mailPreferences = self::$instances[$_profileID]->bopreferences->getPreferences(true,$_profileID);
|
||||
//error_log(__METHOD__.__LINE__." ReRead the Prefs for ProfileID ".$_profileID.' called from:'.function_backtrace());
|
||||
if (self::$instances[$_profileID]->mailPreferences)
|
||||
@ -228,13 +228,29 @@ class mail_bo
|
||||
}
|
||||
else
|
||||
{
|
||||
$loadfailed=true;
|
||||
// first try reloading without restore
|
||||
if ($_restoreSession==true) self::$instances[$_profileID] = new mail_bo('utf-8',false,$_profileID);
|
||||
if (!self::$instances[$_profileID]->mailPreferences) {
|
||||
if (self::$debug) error_log(__METHOD__.__LINE__.' something wrong:'.array2string($_restoreSession).' mailPreferences could not be loaded!');
|
||||
$loadfailed=$alreadytriedreloading=true;
|
||||
}
|
||||
}
|
||||
if ($_profileID>0 && empty(self::$instances[$_profileID]->icServer->host)&&$alreadytriedreloading==false)
|
||||
{
|
||||
if ($_restoreSession==true) self::$instances[$_profileID] = new mail_bo('utf-8',false,$_profileID);
|
||||
if (empty(self::$instances[$_profileID]->icServer->host))
|
||||
{
|
||||
if (self::$debug) error_log(__METHOD__.__LINE__.' something critically wrong for '.$_profileID.' RestoreSession:'.array2string($_restoreSession).'->'.array2string(self::$instances[$_profileID]->icServer).' No Server host set!');
|
||||
$loadfailed=$alreadytriedreloading=true;
|
||||
}
|
||||
}
|
||||
if ($loadfailed)
|
||||
{
|
||||
error_log(__METHOD__.__LINE__." ReRead of the Prefs for ProfileID ".$_profileID.' failed for icServer; trigger new instance. called from:'.function_backtrace());
|
||||
// restore session seems to provide an incomplete session
|
||||
self::$instances[$_profileID] = new mail_bo('utf-8',false,$_profileID);
|
||||
$newprofileID = ($alreadytriedreloading ? emailadmin_bo::getUserDefaultProfileID():$_profileID);
|
||||
if ($alreadytriedreloading) error_log(__METHOD__.__LINE__." Loading the Profile for ProfileID ".$_profileID.' failed for icServer; trigger new instance for Default-Profile '.$newprofileID.'. called from:'.function_backtrace());
|
||||
// try loading the default profile for the user
|
||||
self::$instances[$newprofileID] = new mail_bo('utf-8',false,$newprofileID);
|
||||
$_profileID = $newprofileID;
|
||||
}
|
||||
}
|
||||
self::$instances[$_profileID]->profileID = $_profileID;
|
||||
@ -571,7 +587,7 @@ class mail_bo
|
||||
*/
|
||||
function closeConnection() {
|
||||
//if ($icServer->_connected) error_log(__METHOD__.__LINE__.' disconnect from Server');
|
||||
if ($icServer->_connected) $this->icServer->disconnect();
|
||||
if ($this->icServer->_connected) $this->icServer->disconnect();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1588,8 +1604,18 @@ class mail_bo
|
||||
{
|
||||
$rfcAddr = imap_rfc822_parse_adrlist($_string,'');
|
||||
if (!isset(self::$idna2)) self::$idna2 = new egw_idna;
|
||||
$stringA = array();
|
||||
//$_string = str_replace($rfcAddr[0]->host,self::$idna2->decode($rfcAddr[0]->host),$_string);
|
||||
$_string = imap_rfc822_write_address($rfcAddr[0]->mailbox,self::$idna2->decode($rfcAddr[0]->host),$rfcAddr[0]->personal);
|
||||
foreach ((array)$rfcAddr as $_rfcAddr)
|
||||
{
|
||||
if ($_rfcAddr->host=='.SYNTAX-ERROR.')
|
||||
{
|
||||
$stringA = array();
|
||||
break; // skip idna conversion if we encounter an error here
|
||||
}
|
||||
$stringA[] = imap_rfc822_write_address($_rfcAddr->mailbox,self::$idna2->decode($_rfcAddr->host),$_rfcAddr->personal);
|
||||
}
|
||||
if (!empty($stringA)) $_string = implode(',',$stringA);
|
||||
}
|
||||
if ($_tryIDNConversion==='FORCE')
|
||||
{
|
||||
@ -3956,6 +3982,11 @@ class mail_bo
|
||||
error_log(__METHOD__.__LINE__.array2string($retValue->message));
|
||||
$retValue = null;
|
||||
}
|
||||
// if SUBJECT is an array, use thelast one, as we assume something with the unfolding for the subject did not work
|
||||
if (is_array($retValue['SUBJECT']))
|
||||
{
|
||||
$retValue['SUBJECT'] = $retValue['SUBJECT'][count($retValue['SUBJECT'])-1];
|
||||
}
|
||||
return ($decode ? self::decode_header($retValue,true):$retValue);
|
||||
}
|
||||
|
||||
@ -4271,7 +4302,8 @@ class mail_bo
|
||||
//error_log(__METHOD__.__LINE__.array2string(substr($structure->parameters['NAME'],0,strlen('data:'))));
|
||||
if (!is_array($structure->parameters['NAME']) && substr($structure->parameters['NAME'],0,strlen('data:'))==='data:') {
|
||||
$namecounter++;
|
||||
return lang("unknown").$namecounter.($structure->subType ? ".".$structure->subType : "");
|
||||
$ext = mime_magic::mime2ext($structure->Type.'/'.$structure->subType);
|
||||
return lang("unknown").$namecounter.($ext?$ext:($structure->subType ? ".".$structure->subType : ""));
|
||||
}
|
||||
if (is_array($structure->parameters['NAME'])) $structure->parameters['NAME'] = implode(' ',$structure->parameters['NAME']);
|
||||
return rawurldecode(self::decode_header($structure->parameters['NAME']));
|
||||
@ -4321,7 +4353,8 @@ class mail_bo
|
||||
}
|
||||
}
|
||||
$namecounter++;
|
||||
return lang("unknown").$namecounter.($structure->subType ? ".".$structure->subType : "");
|
||||
$ext = mime_magic::mime2ext($structure->Type.'/'.$structure->subType);
|
||||
return lang("unknown").$namecounter.($ext?$ext:($structure->subType ? ".".$structure->subType : ""));
|
||||
}
|
||||
}
|
||||
|
||||
@ -4420,7 +4453,8 @@ class mail_bo
|
||||
{
|
||||
$attachment = translation::convert($attachment,$structure->parameters['CHARSET'],self::$displayCharset);
|
||||
}
|
||||
|
||||
$ext = mime_magic::mime2ext($structure->type .'/'. $structure->subType);
|
||||
if ($ext && stripos($filename,'.')===false && stripos($filename,$ext)===false) $filename = trim($filename).'.'.$ext;
|
||||
$attachmentData = array(
|
||||
'type' => $structure->type .'/'. $structure->subType,
|
||||
'filename' => $filename,
|
||||
@ -4432,6 +4466,8 @@ class mail_bo
|
||||
if ( $filename == 'winmail.dat' && $_winmail_nr > 0 &&
|
||||
( $wmattach = $this->decode_winmail( $_uid, $_partID, $_winmail_nr ) ) )
|
||||
{
|
||||
$ext = mime_magic::mime2ext($wmattach['type']);
|
||||
if ($ext && stripos($wmattach['name'],'.')===false && stripos($wmattach['name'],$ext)===false) $wmattach['name'] = trim($wmattach['name']).'.'.$ext;
|
||||
$attachmentData = array(
|
||||
'type' => $wmattach['type'],
|
||||
'filename' => $wmattach['name'],
|
||||
@ -4670,13 +4706,14 @@ class mail_bo
|
||||
/**
|
||||
* createHeaderInfoSection - creates a textual headersection from headerobject
|
||||
* @param array header headerarray may contain SUBJECT,FROM,SENDER,TO,CC,BCC,DATE,PRIORITY,IMPORTANCE
|
||||
* @param string headline Text tom use for headline
|
||||
* @param string headline Text tom use for headline, if SUPPRESS, supress headline and footerline
|
||||
* @param bool createHTML do it with HTML breaks
|
||||
* @return string a preformatted string with the information of the header worked into it
|
||||
*/
|
||||
static function createHeaderInfoSection($header,$headline='', $createHTML = false)
|
||||
{
|
||||
$headdata = null;
|
||||
//error_log(__METHOD__.__LINE__.array2string($header).function_backtrace());
|
||||
if ($header['SUBJECT']) $headdata = lang('subject').': '.$header['SUBJECT'].($createHTML?"<br />":"\n");
|
||||
if ($header['FROM']) $headdata .= lang('from').': '.self::convertAddressArrayToString($header['FROM'], $createHTML).($createHTML?"<br />":"\n");
|
||||
if ($header['SENDER']) $headdata .= lang('sender').': '.self::convertAddressArrayToString($header['SENDER'], $createHTML).($createHTML?"<br />":"\n");
|
||||
@ -4689,13 +4726,13 @@ class mail_bo
|
||||
//if ($mailcontent['headers']['ORGANIZATION']) $headdata .= lang('organization').': '.$mailcontent['headers']['ORGANIZATION']."\
|
||||
if (!empty($headdata))
|
||||
{
|
||||
if (!empty($headline)) $headdata = "---------------------------- $headline ----------------------------".($createHTML?"<br />":"\n").$headdata;
|
||||
if (empty($headline)) $headdata = "--------------------------------------------------------".($createHTML?"<br />":"\n").$headdata;
|
||||
$headdata .= "--------------------------------------------------------".($createHTML?"<br />":"\n");
|
||||
if (!empty($headline) && $headline != 'SUPPRESS') $headdata = "---------------------------- $headline ----------------------------".($createHTML?"<br />":"\n").$headdata;
|
||||
if (empty($headline)) $headdata = ($headline != 'SUPPRESS'?"--------------------------------------------------------".($createHTML?"<br />":"\n"):'').$headdata;
|
||||
$headdata .= ($headline != 'SUPPRESS'?"--------------------------------------------------------".($createHTML?"<br />":"\n"):'');
|
||||
}
|
||||
else
|
||||
{
|
||||
$headdata = "--------------------------------------------------------".($createHTML?"<br />":"\n");
|
||||
$headdata = ($headline != 'SUPPRESS'?"--------------------------------------------------------".($createHTML?"<br />":"\n"):'');
|
||||
}
|
||||
return $headdata;
|
||||
}
|
||||
@ -4753,6 +4790,26 @@ class mail_bo
|
||||
return $returnAddr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges a given content with contact data
|
||||
*
|
||||
* @param string $content
|
||||
* @param array $ids array with contact id(s)
|
||||
* @param string &$err error-message on error
|
||||
* @return string/boolean merged content or false on error
|
||||
*/
|
||||
function merge($content,$ids,$mimetype='')
|
||||
{
|
||||
$contacts = new addressbook_bo();
|
||||
$mergeobj = new addressbook_merge();
|
||||
|
||||
if (empty($mimetype)) $mimetype = (strlen(strip_tags($content)) == strlen($content) ?'text/plain':'text/html');
|
||||
$rv = $mergeobj->merge_string($content,$ids,$err,$mimetype, array(), self::$displayCharset);
|
||||
if (empty($rv) && !empty($content) && !empty($err)) $rv = $content;
|
||||
if (!empty($err) && !empty($content) && !empty($ids)) error_log(__METHOD__.__LINE__.' Merge failed for Ids:'.array2string($ids).' ContentType:'.$mimetype.' Content:'.$content.' Reason:'.array2string($err));
|
||||
return $rv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook stuff
|
||||
*/
|
||||
|
@ -23,6 +23,7 @@ class mail_compose
|
||||
(
|
||||
'action' => True,
|
||||
'compose' => True,
|
||||
'testhtmlarea' => True,
|
||||
'composeFromDraft' => True,
|
||||
'getAttachment' => True,
|
||||
'fileSelector' => True,
|
||||
@ -198,7 +199,7 @@ class mail_compose
|
||||
if (!$messageUid) {
|
||||
print "<script type=\"text/javascript\">alert('".lang("Error: Could not save Message as Draft")." ".lang("Trying to recover from session data")."');</script>";
|
||||
//try to reopen the mail from session data
|
||||
$this->compose('to',true);
|
||||
$this->compose(null,null,'to',true);
|
||||
return;
|
||||
}
|
||||
// saving as draft, does not mean closing the message
|
||||
@ -211,7 +212,7 @@ class mail_compose
|
||||
{
|
||||
//error_log(__METHOD__.__LINE__.' (re)open drafted message with new UID: '.$messageUid.' in folder:'.$folder);
|
||||
$uicompose->bocompose->getDraftData($uicompose->mail_bo->icServer, $folder, $messageUid);
|
||||
$uicompose->compose('to',true);
|
||||
$uicompose->compose(null,null,'to',true);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@ -258,25 +259,29 @@ class mail_compose
|
||||
$this->preferencesArray['message_forwarding'] = $buff;
|
||||
}
|
||||
}
|
||||
$this->compose($_focusElement);
|
||||
$this->compose(null,null,$_focusElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* function compose
|
||||
* this function is used to fill the compose dialog with the content provided by session data
|
||||
*
|
||||
* @var content array the etemplate content array
|
||||
* @var msg string a possible message to be passed and displayed to the userinterface
|
||||
* @var _focusElement varchar subject, to, body supported
|
||||
* @var suppressSigOnTop boolean
|
||||
* @var isReply boolean
|
||||
*/
|
||||
function compose($_focusElement='to',$suppressSigOnTop=false, $isReply=false)
|
||||
function compose(array $content=null,$msg=null, $_focusElement='to',$suppressSigOnTop=false, $isReply=false)
|
||||
{
|
||||
//error_log(__METHOD__.__LINE__.array2string($_REQUEST));
|
||||
error_log(__METHOD__.__LINE__.array2string($content));
|
||||
|
||||
if (isset($_GET['reply_id'])) $replyID = $_GET['reply_id'];
|
||||
// read the data from session
|
||||
// all values are empty for a new compose window
|
||||
$insertSigOnTop = false;
|
||||
$sessionData = $this->getSessionData();
|
||||
$sessionData = /*$content; // */$this->getSessionData();
|
||||
$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']) &&
|
||||
$this->preferencesArray['attachVCardAtCompose']))
|
||||
@ -493,9 +498,6 @@ class mail_compose
|
||||
if ($_REQUEST['preset'][$name]) $sessionData[$name] = $_REQUEST['preset'][$name];
|
||||
}
|
||||
}
|
||||
$etpl = new etemplate_new('mail.compose');
|
||||
$content = array();
|
||||
_debug_array($sessionData);
|
||||
// is the to address set already?
|
||||
if (!empty($_REQUEST['send_to']))
|
||||
{
|
||||
@ -591,18 +593,6 @@ class mail_compose
|
||||
if (($suppressSigOnTop || $sessionData['isDraft']) && !empty($sessionData['identity'])) $presetId = (int)$sessionData['identity'];
|
||||
|
||||
/*
|
||||
$this->t->set_file(array("composeForm" => "composeForm.tpl"));
|
||||
$this->t->set_block('composeForm','header','header');
|
||||
$this->t->set_block('composeForm','body_input');
|
||||
$this->t->set_block('composeForm','attachment','attachment');
|
||||
$this->t->set_block('composeForm','attachment_row','attachment_row');
|
||||
$this->t->set_block('composeForm','attachment_row_bold');
|
||||
$this->t->set_block('composeForm','destination_row');
|
||||
$this->t->set_block('composeForm','simple_text');
|
||||
|
||||
$this->translate();
|
||||
// store the selected Signature
|
||||
$this->t->set_var("mySigID",($presetSig ? $presetSig : $sessionData['signatureID']));
|
||||
|
||||
if ($GLOBALS['egw_info']['user']['apps']['addressbook']) {
|
||||
$this->t->set_var("link_addressbook",egw::link('/index.php',array(
|
||||
@ -669,101 +659,11 @@ class mail_compose
|
||||
$this->t->set_var('errorInfo',' ');
|
||||
}
|
||||
*/
|
||||
// header
|
||||
$allIdentities = $this->mailPreferences->getIdentity();
|
||||
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'] ='';
|
||||
$globalIds = 0;
|
||||
$defaultIds = array();
|
||||
foreach($allIdentities as $key => $singleIdentity) {
|
||||
if ($singleIdentity->id<0){ $globalIds++; }/*else{ unset($allIdentities[$key]);}*/
|
||||
// there could be up to 2 default IDS. the activeProfile and another on marking the desired Identity to choose
|
||||
if(!empty($singleIdentity->default) && $singleIdentity->default==1) $defaultIds[$singleIdentity->id] = $singleIdentity->id;
|
||||
}
|
||||
//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]);
|
||||
$defaultIdentity = 0;
|
||||
$identities = array();
|
||||
foreach($allIdentities as $key => $singleIdentity) {
|
||||
//$identities[$singleIdentity->id] = $singleIdentity->realName.' <'.$singleIdentity->emailAddress.'>';
|
||||
$iS = mail_bo::generateIdentityString($singleIdentity);
|
||||
if (mail_bo::$mailConfig['how2displayIdentities']=='' || count($allIdentities) ==1 || count($allIdentities) ==$globalIds)
|
||||
{
|
||||
$id_prepend ='';
|
||||
}
|
||||
else
|
||||
{
|
||||
$id_prepend = '('.$singleIdentity->id.') ';
|
||||
}
|
||||
//if ($singleIdentity->default) error_log(__METHOD__.__LINE__.':'.$presetId.'->'.$key.'('.$singleIdentity->id.')'.'#'.$iS.'#');
|
||||
if (array_search($id_prepend.$iS,$identities)===false) $identities[$singleIdentity->id] = $id_prepend.$iS;
|
||||
if(in_array($singleIdentity->id,$defaultIds) && $defaultIdentity==0)
|
||||
{
|
||||
//_debug_array($singleIdentity);
|
||||
$defaultIdentity = $singleIdentity->id;
|
||||
//$defaultIdentity = $key;
|
||||
$sessionData['signatureID'] = (!empty($singleIdentity->signature) ? $singleIdentity->signature : $sessionData['signatureID']);
|
||||
}
|
||||
}
|
||||
$selectFrom = html::select('identity', (!empty($presetId) ? $presetId : $defaultIdentity), $identities, true, "style='width:100%;' onchange='changeIdentity(this);'");
|
||||
|
||||
/*
|
||||
$this->t->set_var('select_from', $selectFrom);
|
||||
//error_log(__METHOD__.__LINE__.' DefaultIdentity:'.array2string($identities[($presetId ? $presetId : $defaultIdentity)]));
|
||||
// navbar(, kind of)
|
||||
$this->t->set_var('img_clear_left', common::image('felamimail','clear_left'));
|
||||
$this->t->set_var('img_fileopen', common::image('phpgwapi','fileopen'));
|
||||
$this->t->set_var('img_mail_send', common::image('felamimail','mail_send'));
|
||||
$this->t->set_var('img_attach_file', common::image('felamimail','attach'));
|
||||
$this->t->set_var('ajax-loader', common::image('felamimail','ajax-loader'));
|
||||
$this->t->set_var('img_fileexport', common::image('felamimail','fileexport'));
|
||||
// prepare print url/button
|
||||
$this->t->set_var('img_print_it', common::image('felamimail','print'));
|
||||
$this->t->set_var('lang_print_it', lang('print it'));
|
||||
$this->t->set_var('print_it', $printURL);
|
||||
*/
|
||||
// from, to, cc, replyto
|
||||
$destinationRows = 0;
|
||||
foreach(array('to','cc','bcc','replyto','folder') as $destination) {
|
||||
foreach((array)$sessionData[$destination] as $key => $value) {
|
||||
if ($value=="NIL@NIL") continue;
|
||||
if ($destination=='replyto' && str_replace('"','',$value) == str_replace('"','',$identities[($presetId ? $presetId : $defaultIdentity)])) continue;
|
||||
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
|
||||
$selectDestination = html::select('destination[]', $destination, $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'");
|
||||
//$this->t->set_var('select_destination', $selectDestination);
|
||||
$value = htmlspecialchars_decode($value,ENT_COMPAT);
|
||||
$value = str_replace("\"\"",'"',$value);
|
||||
$address_array = imap_rfc822_parse_adrlist((get_magic_quotes_gpc()?stripslashes($value):$value), '');
|
||||
foreach((array)$address_array as $addressObject) {
|
||||
if ($addressObject->host == '.SYNTAX-ERROR.') continue;
|
||||
$address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal);
|
||||
$address = mail_bo::htmlentities($address, $this->displayCharset);
|
||||
//$this->t->set_var('address', ($destination=='folder'?$value:$address));
|
||||
//$this->t->parse('destinationRows','destination_row',True);
|
||||
$destinationRows++;
|
||||
}
|
||||
}
|
||||
}
|
||||
while($destinationRows < 3) {
|
||||
// and always add one empty row
|
||||
$selectDestination = html::select('destination[]', 'to', $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'");
|
||||
/*
|
||||
$this->t->set_var('select_destination', $selectDestination);
|
||||
$this->t->set_var('address', '');
|
||||
$this->t->parse('destinationRows','destination_row',True);
|
||||
*/
|
||||
$destinationRows++;
|
||||
}
|
||||
// and always add one empty row
|
||||
$selectDestination = html::select('destination[]', 'to', $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'");
|
||||
/*
|
||||
$this->t->set_var('select_destination', $selectDestination);
|
||||
$this->t->set_var('address', '');
|
||||
$this->t->parse('destinationRows','destination_row',True);
|
||||
*/
|
||||
// handle subject
|
||||
$subject = mail_bo::htmlentities($sessionData['subject'],$this->displayCharset);
|
||||
@ -798,11 +698,61 @@ class mail_compose
|
||||
$this->t->set_var('lang_no_recipient',lang('No recipient address given!'));
|
||||
$this->t->set_var('lang_no_subject',lang('No subject given!'));
|
||||
$this->t->set_var('lang_infolog_tracker_not_both',lang("You can either choose to save as infolog OR tracker, not both."));
|
||||
$this->t->pparse("out","header");
|
||||
*/
|
||||
// prepare signatures, the selected sig may be used on top of the body
|
||||
require_once(EGW_INCLUDE_ROOT.'/felamimail/inc/class.felamimail_bosignatures.inc.php');
|
||||
$boSignatures = new felamimail_bosignatures();
|
||||
//identities and signature stuff
|
||||
$allIdentities = $this->preferences->getIdentity();
|
||||
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'] ='';
|
||||
$globalIds = 0;
|
||||
$defaultIds = array();
|
||||
foreach($allIdentities as $key => $singleIdentity) {
|
||||
if ($singleIdentity->id<0){ $globalIds++; }/*else{ unset($allIdentities[$key]);}*/
|
||||
// there could be up to 2 default IDS. the activeProfile and another on marking the desired Identity to choose
|
||||
if(!empty($singleIdentity->default) && $singleIdentity->default==1)
|
||||
{
|
||||
$defaultIds[$singleIdentity->id] = $singleIdentity->id;
|
||||
$selectedSender = mail_bo::generateIdentityString($singleIdentity);
|
||||
}
|
||||
}
|
||||
//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]);
|
||||
$defaultIdentity = 0;
|
||||
$identities = array();
|
||||
foreach($allIdentities as $key => $singleIdentity) {
|
||||
//$identities[$singleIdentity->id] = $singleIdentity->realName.' <'.$singleIdentity->emailAddress.'>';
|
||||
$iS = mail_bo::generateIdentityString($singleIdentity);
|
||||
$shortIDString = trim(mail_bo::generateIdentityString($singleIdentity,false));
|
||||
if (mail_bo::$mailConfig['how2displayIdentities']=='' || count($allIdentities) ==1 || count($allIdentities) ==$globalIds)
|
||||
{
|
||||
$id_prepend ='';
|
||||
}
|
||||
else
|
||||
{
|
||||
$id_prepend = '('.$singleIdentity->id.') ';
|
||||
}
|
||||
//if ($singleIdentity->default) error_log(__METHOD__.__LINE__.':'.$presetId.'->'.$key.'('.$singleIdentity->id.')'.'#'.$iS.'#');
|
||||
if (array_search($id_prepend.$iS,$identities)===false)
|
||||
{
|
||||
$identities[$singleIdentity->id] = $id_prepend.$iS;
|
||||
$sel_options['SENDER'][$iS] = $id_prepend.$iS;
|
||||
}
|
||||
if(in_array($singleIdentity->id,$defaultIds) && $defaultIdentity==0)
|
||||
{
|
||||
//_debug_array($singleIdentity);
|
||||
$defaultIdentity = $singleIdentity->id;
|
||||
//$defaultIdentity = $key;
|
||||
$sessionData['signatureID'] = (!empty($singleIdentity->signature) ? $singleIdentity->signature : $sessionData['signatureID']);
|
||||
}
|
||||
}
|
||||
|
||||
// fetch the signature, prepare the select box, ...
|
||||
$boSignatures = new mail_signatures();
|
||||
$signatures = $boSignatures->getListOfSignatures();
|
||||
|
||||
if (empty($sessionData['signatureID'])) {
|
||||
@ -883,6 +833,7 @@ class mail_compose
|
||||
$sessionData['body'] = ($font_span?$font_span:' ').$sessionData['body'];
|
||||
}
|
||||
//error_log(__METHOD__.__LINE__.$sessionData['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
|
||||
if (strtoupper($this->displayCharset) == 'UTF-8')
|
||||
@ -922,32 +873,12 @@ class mail_compose
|
||||
} else {
|
||||
$border="1px solid gray; margin:1px";
|
||||
// initalize the CKEditor Object to enable switching back and force
|
||||
$editor = html::fckEditorQuick('body', 'ascii', $sessionData['body'],'500px','99%',false,$border);
|
||||
/*
|
||||
$this->t->set_var('tinymce', $editor); //html::fckEditorQuick('body', 'ascii', $sessionData['body'],'400px','99%'));
|
||||
$this->t->set_var('mimeType', 'text');
|
||||
*/
|
||||
//$editor = html::fckEditorQuick('body', 'ascii', $sessionData['body'],'500px','99%',false,$border);
|
||||
$ishtml=0;
|
||||
}
|
||||
|
||||
|
||||
$bostationery = new felamimail_bostationery();
|
||||
$selectStationeries = array(
|
||||
'0' => lang('no stationery')
|
||||
);
|
||||
$showStationaries = false;
|
||||
$validStationaries = $bostationery->get_valid_templates();
|
||||
if (is_array($validStationaries) && count($validStationaries)>0)
|
||||
{
|
||||
$showStationaries = true;
|
||||
$selectStationeries += $validStationaries;
|
||||
}
|
||||
// if ID of signature Select Box is set, we allow for changing the sig onChange of the signatueSelect
|
||||
$selectBoxSignature = html::select('signatureID', ($presetSig ? $presetSig : $sessionData['signatureID']), $selectSignatures, true, ($insertSigOnTop?"id='signatureID'":"")." style='width: 35%;' onchange='fm_compose_changeInputType(this)'");
|
||||
$selectBoxStationery = html::select('stationeryID', ($presetStationery ? $presetStationery : 0), $selectStationeries, true, "style='width: 35%;'");
|
||||
/*
|
||||
$this->t->set_var("select_signature", $selectBoxSignature);
|
||||
$this->t->set_var("select_stationery", ($showStationaries ? $selectBoxStationery:''));
|
||||
$this->t->set_var("lang_editormode",lang("Editor type"));
|
||||
if (html::htmlarea_availible()===false)
|
||||
{
|
||||
@ -958,7 +889,6 @@ class mail_compose
|
||||
// IE seems to need onclick to realize there is a change
|
||||
$this->t->set_var("toggle_editormode", lang("Editor type").": <span><input name=\"_is_html\" value=\"".$ishtml."\" type=\"hidden\" /><input name=\"_editorselect\" onchange=\"fm_toggle_editor(this)\" onclick=\"fm_toggle_editor(this)\" ".($ishtml ? "checked=\"checked\"" : "")." id=\"_html\" value=\"html\" type=\"radio\"><label for=\"_html\">HTML</label><input name=\"_editorselect\" onchange=\"fm_toggle_editor(this)\" onclick=\"fm_toggle_editor(this)\" ".($ishtml ? "" : "checked=\"checked\"")." id=\"_plain\" value=\"plain\" type=\"radio\"><label for=\"_plain\">Plain text</label></span>");
|
||||
}
|
||||
$this->t->pparse("out","body_input");
|
||||
*/
|
||||
// attachments
|
||||
if (is_array($sessionData['attachments']) && count($sessionData['attachments']) > 0)
|
||||
@ -986,12 +916,89 @@ class mail_compose
|
||||
// $this->t->set_var('attachment_rows','');
|
||||
}
|
||||
|
||||
// $this->t->pparse("out","attachment");
|
||||
$content['is_html'] = $this->sessionData['mimeType'] == 'html';
|
||||
$content['mailtext'] = 'garbage';
|
||||
// signature stuff set earlier
|
||||
$sel_options['signatureID'] = $selectSignatures;
|
||||
$content['signatureID'] = ($presetSig ? $presetSig : $sessionData['signatureID']);
|
||||
// end signature stuff
|
||||
|
||||
// stationery stuff
|
||||
$bostationery = new emailadmin_bostationery();
|
||||
$selectStationeries = array(
|
||||
'0' => lang('no stationery')
|
||||
);
|
||||
$showStationaries = false;
|
||||
$validStationaries = $bostationery->get_valid_templates();
|
||||
if (is_array($validStationaries) && count($validStationaries)>0)
|
||||
{
|
||||
$showStationaries = true;
|
||||
$selectStationeries += $validStationaries;
|
||||
}
|
||||
//_debug_array($selectStationeries);
|
||||
$sel_options['stationeryID'] = $selectStationeries;
|
||||
// if ID of signature Select Box is set, we allow for changing the sig onChange of the signatueSelect
|
||||
$content['stationeryID'] = ($presetStationery ? $presetStationery : 0);
|
||||
// end stationery stuff
|
||||
//$sessionData['bcc'] = array('kl@stylite.de','kl@leithoff.net');
|
||||
// address stuff like from, to, cc, replyto
|
||||
$destinationRows = 0;
|
||||
foreach(array('to','cc','bcc','replyto','folder') as $destination) {
|
||||
foreach((array)$sessionData[$destination] as $key => $value) {
|
||||
if ($value=="NIL@NIL") continue;
|
||||
if ($destination=='replyto' && str_replace('"','',$value) == str_replace('"','',$identities[($presetId ? $presetId : $defaultIdentity)])) continue;
|
||||
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
|
||||
$selectDestination = html::select('destination[]', $destination, $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'");
|
||||
//$this->t->set_var('select_destination', $selectDestination);
|
||||
$value = htmlspecialchars_decode($value,ENT_COMPAT);
|
||||
$value = str_replace("\"\"",'"',$value);
|
||||
$address_array = imap_rfc822_parse_adrlist((get_magic_quotes_gpc()?stripslashes($value):$value), '');
|
||||
foreach((array)$address_array as $addressObject) {
|
||||
if ($addressObject->host == '.SYNTAX-ERROR.') continue;
|
||||
$address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal);
|
||||
//$address = mail_bo::htmlentities($address, $this->displayCharset);
|
||||
$content[strtoupper($destination)][]=$address;
|
||||
$destinationRows++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($content)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:'');
|
||||
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true);
|
||||
//error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender)));
|
||||
$content['SENDER'] = ($selectedSender?(array)$selectedSender:'');
|
||||
//error_log(__METHOD__.__LINE__.$sessionData['body']);
|
||||
$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text'] = $sessionData['body'];
|
||||
}
|
||||
$etpl = new etemplate_new('mail.compose');
|
||||
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,$readonlys,$preserv,2);
|
||||
}
|
||||
|
||||
function testhtmlarea($content=null)
|
||||
{
|
||||
error_log(__METHOD__.__LINE__.array2string($content));
|
||||
if ($content)
|
||||
{
|
||||
$this->sessionData['mimeType'] = 'plain';
|
||||
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:'');
|
||||
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sessionData['body'] = 'bla bla bla';
|
||||
$content['is_html'] = ($this->sessionData['mimeType'] == 'html'?true:'');
|
||||
$content['is_plain'] = ($this->sessionData['mimeType'] == 'html'?'':true);
|
||||
//error_log(__METHOD__.__LINE__.array2string(array($sel_options['SENDER'],$selectedSender)));
|
||||
$content['SENDER'] = ($selectedSender?(array)$selectedSender:'');
|
||||
//error_log(__METHOD__.__LINE__.$sessionData['body']);
|
||||
$content['mail_'.($this->sessionData['mimeType'] == 'html'?'html':'plain').'text'] = $sessionData['body'];
|
||||
}
|
||||
$etpl = new etemplate_new('mail.testhtmlarea');
|
||||
$etpl->exec('mail.mail_compose.testhtmlarea',$content,$sel_options,$readonlys,$preserv,2);
|
||||
}
|
||||
|
||||
function composeFromDraft() {
|
||||
$icServer = (int)$_GET['icServer'];
|
||||
$folder = (isset($_GET['folder'])?base64_decode($_GET['folder']):base64_decode($_GET['mailbox']));
|
||||
@ -2492,6 +2499,34 @@ $content['mailtext'] = 'garbage';
|
||||
}
|
||||
|
||||
function ajax_searchIdentities() {
|
||||
$_searchString = trim($_REQUEST['query']);
|
||||
$allIdentities = $this->preferences->getIdentity();
|
||||
foreach($allIdentities as $key => $singleIdentity)
|
||||
{
|
||||
/*
|
||||
if($singleIdentity->default === true)
|
||||
{
|
||||
$selectedAddresses[$singleIdentity->emailAddress] = $singleIdentity->emailAddress;
|
||||
}
|
||||
*/
|
||||
$idString = mail_bo::generateIdentityString($singleIdentity);
|
||||
$shortIDString = mail_bo::generateIdentityString($singleIdentity,false);
|
||||
if (empty($_searchString) || ($_searchString && stripos($idString,$_searchString)!==false))
|
||||
{
|
||||
//error_log(__METHOD__.__LINE__.$idString.'<->'.$shortIDString);
|
||||
$predefinedAddresses[$idString] = array(
|
||||
'id'=>$idString,
|
||||
'label' => $idString,
|
||||
// Add just name for nice display, with title for hover
|
||||
'name' => $shortIDString,
|
||||
'title' => $idString
|
||||
);
|
||||
}
|
||||
}
|
||||
if (is_array($predefinedAddresses)) asort($predefinedAddresses);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($predefinedAddresses);
|
||||
common::egw_exit();
|
||||
}
|
||||
|
||||
function ajax_searchFolder() {
|
||||
@ -2536,7 +2571,7 @@ $content['mailtext'] = 'garbage';
|
||||
}
|
||||
|
||||
public static function ajax_searchAddress() {
|
||||
error_log(__METHOD__. "request from seachAddress" . $_REQUEST['query']);
|
||||
//error_log(__METHOD__. "request from seachAddress " . $_REQUEST['query']);
|
||||
$_searchString = trim($_REQUEST['query']);
|
||||
if ($GLOBALS['egw_info']['user']['apps']['addressbook']) {
|
||||
//error_log(__METHOD__.__LINE__.array2string($_searchString));
|
||||
|
@ -799,6 +799,12 @@ class mail_hooks
|
||||
'link'=>false,
|
||||
'icon' => false
|
||||
);
|
||||
$file[] = array(
|
||||
'no_lang' => true,
|
||||
'text'=>'<span id="mail-index_buttontesthtmlarea" class="button" />',
|
||||
'link'=>false,
|
||||
'icon' => false
|
||||
);
|
||||
$file[] = array(
|
||||
'no_lang' => true,
|
||||
'text'=>'<span id="mail-tree_target" class="dtree" />',
|
||||
|
296
mail/inc/class.mail_signatures.inc.php
Normal file
296
mail/inc/class.mail_signatures.inc.php
Normal file
@ -0,0 +1,296 @@
|
||||
<?php
|
||||
/**
|
||||
* EGroupware - Mail - interface class for compose mails in popup
|
||||
*
|
||||
* @link http://www.egroupware.org
|
||||
* @package mail
|
||||
* @author Klaus Leithoff [kl@stylite.de]
|
||||
* @copyright (c) 2013 by Klaus Leithoff <kl-AT-stylite.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
class mail_signatures
|
||||
{
|
||||
var $tableName = 'egw_felamimail_signatures';
|
||||
|
||||
var $fm_signatureid = NULL;
|
||||
|
||||
var $fm_description = NULL;
|
||||
|
||||
var $fm_signature = NULL;
|
||||
|
||||
var $fm_defaultsignature = NULL;
|
||||
|
||||
var $boemailadmin;
|
||||
var $profileData;
|
||||
|
||||
function mail_signatures($_signatureID = NULL) {
|
||||
$this->accountID = $GLOBALS['egw_info']['user']['account_id'];
|
||||
|
||||
if($_signatureID !== NULL) {
|
||||
$this->read($_signatureID);
|
||||
}
|
||||
$this->boemailadmin = new emailadmin_bo();
|
||||
$this->profileData = $this->boemailadmin->getUserProfile('felamimail');
|
||||
}
|
||||
|
||||
function getDefaultSignature() {
|
||||
$db = clone($GLOBALS['egw']->db);
|
||||
$db->set_app('felamimail');
|
||||
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
'fm_defaultsignature' => true
|
||||
);
|
||||
|
||||
$db->select($this->tableName,'fm_signatureid,fm_description,fm_signature,fm_defaultsignature',
|
||||
$where, __LINE__, __FILE__);
|
||||
|
||||
if(($row = $db->row(true))) {
|
||||
return $row['fm_signatureid'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function read($_signatureID) {
|
||||
$db = clone($GLOBALS['egw']->db);
|
||||
$db->set_app('felamimail');
|
||||
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
'fm_signatureid' => $_signatureID
|
||||
);
|
||||
|
||||
$db->select($this->tableName,'fm_signatureid,fm_description,fm_signature,fm_defaultsignature',
|
||||
$where, __LINE__, __FILE__);
|
||||
|
||||
if(($data = $db->row(true))) {
|
||||
if (empty($data['fm_description']))
|
||||
{
|
||||
$buff = trim(substr(str_replace(array("\r\n","\r","\n","\t"),array(" "," "," "," "),translation::convertHTMLToText($data['fm_signature'])),0,100));
|
||||
$data['fm_description'] = $buff?$buff:lang('none');
|
||||
}
|
||||
$this->fm_signatureid = $data['fm_signatureid'];
|
||||
$this->fm_description = $data['fm_description'];
|
||||
$this->fm_signature = $data['fm_signature'];
|
||||
$this->fm_defaultsignature = (bool)$data['fm_defaultsignature'];
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
function deleteSignatures($_signatureID)
|
||||
{
|
||||
if(!is_array($_signatureID)) {
|
||||
return false;
|
||||
}
|
||||
foreach($_signatureID as $signatureID) {
|
||||
#error_log("$signatureID");
|
||||
$this->delete($signatureID);
|
||||
}
|
||||
}
|
||||
|
||||
private function delete($_signatureID = FALSE) {
|
||||
$db = clone($GLOBALS['egw']->db);
|
||||
$db->set_app('felamimail');
|
||||
|
||||
if($_signatureID !== FALSE) {
|
||||
$signatureID = (int)$_signatureID;
|
||||
} else {
|
||||
$signatureID = (int)$this->fm_signatureid;
|
||||
}
|
||||
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
'fm_signatureid' => $signatureID
|
||||
);
|
||||
|
||||
$db->delete($this->tableName, $where, __LINE__, __FILE__);
|
||||
|
||||
if ($db->affected_rows() === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function saveSignature($_signatureID, $_description, $_signature, $_isDefaultSignature)
|
||||
{
|
||||
if($_signatureID == -1) {
|
||||
// the systemwide profile
|
||||
// can only be made the default profile
|
||||
|
||||
return -1;
|
||||
} else {
|
||||
if($this->profileData->ea_user_defined_signatures == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->fm_description = $_description;
|
||||
$this->fm_signature = $_signature;
|
||||
$this->fm_defaultsignature = (bool)$_isDefaultSignature;
|
||||
if((int)$_signatureID > 0) {
|
||||
$this->fm_signatureid = (int)$_signatureID;
|
||||
}
|
||||
|
||||
$this->save();
|
||||
|
||||
return $this->fm_signatureid;
|
||||
}
|
||||
}
|
||||
|
||||
private function save() {
|
||||
$db = clone($GLOBALS['egw']->db);
|
||||
$db->set_app('felamimail');
|
||||
|
||||
// reset fm_defaultsignature in all other rows to false
|
||||
if($this->fm_defaultsignature === true) {
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
);
|
||||
$data = array(
|
||||
'fm_defaultsignature' => false,
|
||||
);
|
||||
|
||||
$db->update($this->tableName, $data, $where, __LINE__, __FILE__);
|
||||
}
|
||||
if (empty($this->fm_description))
|
||||
{
|
||||
$buff = trim(substr(str_replace(array("\r\n","\r","\n","\t"),array(" "," "," "," "),translation::convertHTMLToText($this->fm_signature)),0,100));
|
||||
$this->fm_description = $buff?$buff:lang('none');
|
||||
}
|
||||
$data = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
'fm_signature' => $this->fm_signature,
|
||||
'fm_description' => $this->fm_description,
|
||||
'fm_defaultsignature' => $this->fm_defaultsignature,
|
||||
);
|
||||
|
||||
|
||||
if($this->fm_signatureid === NULL) {
|
||||
$db->insert($this->tableName, $data, '', __LINE__, __FILE__);
|
||||
|
||||
$this->fm_signatureid = $db->get_last_insert_id($this->tableName,'fm_signatureid');
|
||||
|
||||
return TRUE;
|
||||
} else {
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID,
|
||||
'fm_signatureid' => $this->fm_signatureid,
|
||||
);
|
||||
$db->update($this->tableName, $data, $where, __LINE__, __FILE__);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
function search() {
|
||||
$signatures = array();
|
||||
|
||||
$db = clone($GLOBALS['egw']->db);
|
||||
$db->set_app('felamimail');
|
||||
|
||||
$where = array(
|
||||
'fm_accountid' => $this->accountID
|
||||
);
|
||||
|
||||
$db->select($this->tableName,'fm_signatureid,fm_description,fm_signature,fm_defaultsignature',
|
||||
$where, __LINE__, __FILE__);
|
||||
|
||||
while ($data = $db->row(true)) {
|
||||
if (empty($data['fm_description']))
|
||||
{
|
||||
$buff = trim(substr(str_replace(array("\r\n","\r","\n","\t"),array(" "," "," "," "),translation::convertHTMLToText($data['fm_signature'])),0,100));
|
||||
$data['fm_description'] = $buff?$buff:lang('none');
|
||||
}
|
||||
|
||||
$signatureData = array(
|
||||
'fm_signatureid' => $data['fm_signatureid'],
|
||||
'fm_description' => $data['fm_description'],
|
||||
'fm_signature' => $data['fm_signature'],
|
||||
'fm_defaultsignature' => (bool)$data['fm_defaultsignature'],
|
||||
);
|
||||
$signatures[$data['fm_signatureid']] = $signatureData;
|
||||
}
|
||||
|
||||
return $signatures;
|
||||
}
|
||||
|
||||
function getListOfSignatures() {
|
||||
//$fmSignatures = new felamimail_signatures();
|
||||
|
||||
#$profileData = $boemailadmin->getUserProfile('felamimail');
|
||||
|
||||
$systemSignatures = array();
|
||||
if(!empty($this->profileData->ea_default_signature)) {
|
||||
$systemSignatures[-1] = array(
|
||||
'fm_signatureid' => -1,
|
||||
'fm_description' => lang('system signature'),
|
||||
'fm_defaultsignature' => FALSE,
|
||||
);
|
||||
|
||||
if($this->profileData->ea_user_defined_signatures != true) {
|
||||
$systemSignatures[-1]['fm_defaultsignature'] = TRUE;
|
||||
}
|
||||
}
|
||||
// return only systemsignature, if no user defined signatures are enabled
|
||||
if($this->profileData->ea_user_defined_signatures != true) {
|
||||
return $systemSignatures;
|
||||
}
|
||||
|
||||
$signatures = $this->search();
|
||||
|
||||
if(count($signatures) == 0 &&
|
||||
!isset($GLOBALS['egw_info']['user']['preferences']['mail']['email_sig_copied']) &&
|
||||
!empty($GLOBALS['egw_info']['user']['preferences']['mail']['email_sig'])) {
|
||||
|
||||
$GLOBALS['egw']->preferences->read_repository();
|
||||
$newSignature = new mail_signatures();
|
||||
$newSignature->fm_description = lang('default signature');
|
||||
$newSignature->fm_signature = nl2br($GLOBALS['egw_info']['user']['preferences']['felamimail']['email_sig']);
|
||||
$newSignature->fm_defaultsignature = true;
|
||||
$newSignature->save();
|
||||
$GLOBALS['egw']->preferences->add('mail', 'email_sig_copied', true);
|
||||
$GLOBALS['egw']->preferences->save_repository();
|
||||
|
||||
$signatures = $this->search();
|
||||
}
|
||||
|
||||
// make systemsignature the default, if no other signature is defined as default signature
|
||||
if($this->getDefaultSignature() === false) {
|
||||
$systemSignatures[-1]['fm_defaultsignature'] = TRUE;
|
||||
}
|
||||
|
||||
$signatures = array_merge($systemSignatures, $signatures);
|
||||
#_debug_array($signatures);
|
||||
return $signatures;
|
||||
}
|
||||
|
||||
function getSignature($_signatureID, $_unparsed = false)
|
||||
{
|
||||
if($_signatureID == -1) {
|
||||
|
||||
$systemSignatureIsDefaultSignature = $this->getDefaultSignature();
|
||||
|
||||
$signature = new mail_signatures();
|
||||
$signature->fm_signatureid = -1;
|
||||
$signature->fm_description = 'eGroupWare '. lang('default signature');
|
||||
$signature->fm_signature = ($_unparsed === true ? $this->profileData->ea_default_signature : $GLOBALS['egw']->preferences->parse_notify($this->profileData->ea_default_signature));
|
||||
$signature->fm_defaultsignature = $systemSignatureIsDefaultSignature;
|
||||
|
||||
return $signature;
|
||||
|
||||
} else {
|
||||
$signature = new mail_signatures($_signatureID);
|
||||
if($_unparsed === false) {
|
||||
$signature->fm_signature = ($_unparsed === true ? $this->profileData->ea_default_signature : $GLOBALS['egw']->preferences->parse_notify($signature->fm_signature));
|
||||
}
|
||||
return $signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
@ -51,6 +51,13 @@ class mail_ui
|
||||
*/
|
||||
static $delimiter = '::';
|
||||
|
||||
/**
|
||||
* nextMatch name for index
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
static $nm_index = 'nm';
|
||||
|
||||
/**
|
||||
* instance of mail_bo
|
||||
*
|
||||
@ -157,11 +164,11 @@ class mail_ui
|
||||
if (!is_array($content))
|
||||
{
|
||||
$content = array(
|
||||
'nm' => egw_session::appsession('index','mail'),
|
||||
self::$nm_index => egw_session::appsession('index','mail'),
|
||||
);
|
||||
if (!is_array($content['nm']))
|
||||
if (!is_array($content[self::$nm_index]))
|
||||
{
|
||||
$content['nm'] = array(
|
||||
$content[self::$nm_index] = array(
|
||||
'get_rows' => 'mail.mail_ui.get_rows', // I method/callback to request the data for the rows eg. 'notes.bo.get_rows'
|
||||
'filter' => 'any', // filter is used to choose the mailbox
|
||||
'no_filter2' => false, // I disable the 2. filter (params are the same as for filter)
|
||||
@ -178,10 +185,10 @@ class mail_ui
|
||||
'actions' => self::get_actions(),
|
||||
'row_id' => 'row_id', // is a concatenation of trim($GLOBALS['egw_info']['user']['account_id']):profileID:base64_encode(FOLDERNAME):uid
|
||||
);
|
||||
//$content['nm']['path'] = self::get_home_dir();
|
||||
//$content[self::$nm_index]['path'] = self::get_home_dir();
|
||||
}
|
||||
}
|
||||
$content['nm']['csv_fields'] = false;
|
||||
$content[self::$nm_index]['csv_fields'] = false;
|
||||
if ($msg)
|
||||
{
|
||||
$content['msg'] = $msg;
|
||||
@ -195,9 +202,9 @@ class mail_ui
|
||||
$this->mail_bo->restoreSessionData();
|
||||
|
||||
// filter is used to choose the mailbox
|
||||
//if (!isset($content['nm']['foldertree'])) // maybe we fetch the folder here
|
||||
//if (!isset($content[self::$nm_index]['foldertree'])) // maybe we fetch the folder here
|
||||
/*
|
||||
$sel_options['nm']['foldertree'] = array('id' => 0, 'item' => array(
|
||||
$sel_options[self::$nm_index]['foldertree'] = array('id' => 0, 'item' => array(
|
||||
array('id' => '/INBOX', 'text' => 'INBOX', 'im0' => 'kfm_home.png', 'child' => '1', 'item' => array(
|
||||
array('id' => '/INBOX/sub', 'text' => 'sub'),
|
||||
array('id' => '/INBOX/sub2', 'text' => 'sub2'),
|
||||
@ -207,15 +214,15 @@ class mail_ui
|
||||
)),
|
||||
));
|
||||
|
||||
$content['nm']['foldertree'] = '/INBOX/sub';
|
||||
$content[self::$nm_index]['foldertree'] = '/INBOX/sub';
|
||||
*/
|
||||
|
||||
$sel_options['nm']['foldertree'] = $this->getFolderTree(false);
|
||||
$sel_options[self::$nm_index]['foldertree'] = $this->getFolderTree(false);
|
||||
|
||||
$sessionFolder = $this->mail_bo->sessionData['maibox'];
|
||||
if ($this->mail_bo->folderExists($sessionFolder))
|
||||
{
|
||||
$content['nm']['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
|
||||
}
|
||||
// since we are connected,(and selected the folder) we check for capabilities SUPPORTS_KEYWORDS to eventually add the keyword filters
|
||||
@ -230,19 +237,18 @@ class mail_ui
|
||||
));
|
||||
}
|
||||
|
||||
if (!isset($content['nm']['foldertree'])) $content['nm']['foldertree'] = $this->mail_bo->profileID.self::$delimiter.'INBOX';
|
||||
if (!isset($content['nm']['selectedFolder'])) $content['nm']['selectedFolder'] = $this->mail_bo->profileID.self::$delimiter.'INBOX';
|
||||
$content['nm']['foldertree'] = $content['nm']['selectedFolder'];
|
||||
if (!isset($content[self::$nm_index]['foldertree'])) $content[self::$nm_index]['foldertree'] = $this->mail_bo->profileID.self::$delimiter.'INBOX';
|
||||
if (!isset($content[self::$nm_index]['selectedFolder'])) $content[self::$nm_index]['selectedFolder'] = $this->mail_bo->profileID.self::$delimiter.'INBOX';
|
||||
$content[self::$nm_index]['foldertree'] = $content[self::$nm_index]['selectedFolder'];
|
||||
//$sel_options['cat_id'] = array(1=>'none');
|
||||
$sel_options['filter2'] = $this->searchTypes;
|
||||
$sel_options['filter'] = $this->statusTypes;
|
||||
//if (!isset($content['nm']['cat_id'])) $content['nm']['cat_id'] = 'All';
|
||||
//if (!isset($content[self::$nm_index]['cat_id'])) $content[self::$nm_index]['cat_id'] = 'All';
|
||||
|
||||
$etpl = new etemplate_new('mail.index');
|
||||
|
||||
// Set tree actions
|
||||
$etpl->set_cell_attribute('nm[foldertree]','actions', array(
|
||||
|
||||
$etpl->setElementAttribute(self::$nm_index.'[foldertree]','actions', array(
|
||||
'drop_move_mail' => array(
|
||||
'type' => 'drop',
|
||||
'acceptedTypes' => 'mail',
|
||||
@ -277,7 +283,7 @@ class mail_ui
|
||||
)
|
||||
));
|
||||
//error_log(__METHOD__.__LINE__.array2string($content));
|
||||
if (empty($content['nm']['filter2']) || empty($content['nm']['search'])) $content['nm']['filter2']='quick';
|
||||
if (empty($content[self::$nm_index]['filter2']) || empty($content[self::$nm_index]['search'])) $content[self::$nm_index]['filter2']='quick';
|
||||
$readonlys = $preserv = $sel_options;
|
||||
return $etpl->exec('mail.mail_ui.index',$content,$sel_options,$readonlys,$preserv);
|
||||
}
|
||||
@ -686,7 +692,7 @@ class mail_ui
|
||||
/**
|
||||
* Get actions / context menu for index
|
||||
*
|
||||
* Changes here, require to log out, as $content['nm'] get stored in session!
|
||||
* Changes here, require to log out, as $content[self::$nm_index] get stored in session!
|
||||
* @var &$action_links
|
||||
*
|
||||
* @return array see nextmatch_widget::egw_actions()
|
||||
@ -1593,9 +1599,13 @@ unset($query['actions']);
|
||||
),
|
||||
));
|
||||
*/
|
||||
egw_framework::set_onload("");
|
||||
$subject = mail_bo::htmlspecialchars($this->mail_bo->decode_subject(preg_replace($nonDisplayAbleCharacters,'',$envelope['SUBJECT']),false),
|
||||
mail_bo::$displayCharset);
|
||||
egw_framework::set_onload('$j(document).ready(function() {
|
||||
var subject = etemplate2.getByApplication(\'mail\')[0].widgetContainer.getWidgetById(\'mail_displaysubject\');
|
||||
var body = etemplate2.getByApplication(\'mail\')[0].widgetContainer.getWidgetById(\'mail_displaybody\');
|
||||
body.node.parentNode.style.top=subject.node.offsetTop+40+\'px\';
|
||||
});');
|
||||
$subject = /*mail_bo::htmlspecialchars(*/$this->mail_bo->decode_subject(preg_replace($nonDisplayAbleCharacters,'',$envelope['SUBJECT']),false)/*,
|
||||
mail_bo::$displayCharset)*/;
|
||||
if($envelope['FROM'][0] != $envelope['SENDER'][0]) {
|
||||
$content['mail_displayfromaddress'] = self::emailAddressToHTML($envelope['SENDER'],'',false,true,false);
|
||||
$content['mail_displayonbehalfofaddress'] = self::emailAddressToHTML($envelope['FROM'], $organization,false,true,false);
|
||||
@ -2158,8 +2168,22 @@ unset($query['actions']);
|
||||
!fwrite($fp,$message))
|
||||
{
|
||||
$err .= 'alert("'.addslashes(lang('Error saving %1!',$file)).'");';
|
||||
$succeeded = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$succeeded = true;
|
||||
}
|
||||
if ($fp) fclose($fp);
|
||||
if ($succeeded)
|
||||
{
|
||||
translation::add_app('mail');
|
||||
$headers = $this->bmail_bo->getMessageHeader($uid,$partID,true);
|
||||
unset($headers['SUBJECT']);//already in filename
|
||||
$infoSection = mail_bo::createHeaderInfoSection($headers, 'SUPPRESS', false);
|
||||
$props = array(array('name' => 'comment','val' => $infoSection));
|
||||
egw_vfs::proppatch($file,$props);
|
||||
}
|
||||
}
|
||||
//$this->mail_bo->closeConnection();
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
app.mail = AppJS.extend(
|
||||
{
|
||||
appname: 'mail',
|
||||
|
||||
/**
|
||||
* et2 widget container
|
||||
*/
|
||||
@ -26,6 +27,8 @@ app.mail = AppJS.extend(
|
||||
mail_currentlyFocussed: '',
|
||||
mail_previewAreaActive: true, // we start with the area active
|
||||
|
||||
nm_index: 'nm', // nm nome of index
|
||||
|
||||
/**
|
||||
* Initialize javascript for this application
|
||||
*
|
||||
@ -87,7 +90,7 @@ app.mail = AppJS.extend(
|
||||
{
|
||||
if (_reset == true)
|
||||
{
|
||||
//var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
//var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(nm_index);
|
||||
//if (this.mail_currentlyFocussed!='') nm.refresh([this.mail_currentlyFocussed],'delete');//egw.dataDeleteUID(this.mail_currentlyFocussed);
|
||||
if (this.mail_currentlyFocussed!='') egw.dataDeleteUID(this.mail_currentlyFocussed);
|
||||
for(var k = 0; k < this.mail_selectedMails.length; k++) egw.dataDeleteUID(this.mail_selectedMails[k]);
|
||||
@ -233,6 +236,19 @@ app.mail = AppJS.extend(
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Compose, reply or forward a message
|
||||
*
|
||||
* @param _action _action.id is 'compose', 'composeasnew', 'reply', 'reply_all' or 'forward' (forward can be multiple messages)
|
||||
* @param _elems _elems[0].id is the row-id
|
||||
*/
|
||||
mail_testhtmlarea: function(_action, _elems)
|
||||
{
|
||||
var url = window.egw_webserverUrl+'/index.php?';
|
||||
url += 'menuaction=mail.mail_compose.testhtmlarea';
|
||||
egw_openWindowCentered(url);
|
||||
},
|
||||
|
||||
/**
|
||||
* Compose, reply or forward a message
|
||||
*
|
||||
@ -414,7 +430,7 @@ app.mail = AppJS.extend(
|
||||
}
|
||||
try
|
||||
{
|
||||
var tree_wdg = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var tree_wdg = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
|
||||
var activeFolders = tree_wdg.getTreeNodeOpenItems(nodeToRefresh,mode2use);
|
||||
//alert(activeFolders.join('#,#'));
|
||||
@ -456,7 +472,7 @@ app.mail = AppJS.extend(
|
||||
* mail_setFolderStatus, function to set the status for the visible folders
|
||||
*/
|
||||
mail_setFolderStatus: function(_status) {
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
for (var i in _status) ftree.setLabel(i,_status[i]);//alert(i +'->'+_status[i]);
|
||||
},
|
||||
|
||||
@ -468,7 +484,7 @@ app.mail = AppJS.extend(
|
||||
*/
|
||||
mail_setLeaf: function(_status) {
|
||||
//console.log('mail_setLeaf',_status);
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
var selectedNode = ftree.getSelectedNode();
|
||||
for (var i in _status)
|
||||
{
|
||||
@ -478,7 +494,7 @@ app.mail = AppJS.extend(
|
||||
//alert(i +'->'+_status[i]['id']+'+'+_status[i]['desc']);
|
||||
if (_status[i]['id']==selectedNode.id)
|
||||
{
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
nm.activeFilters["selectedFolder"] = _status[i]['id'];
|
||||
nm.applyFilters();
|
||||
}
|
||||
@ -493,7 +509,7 @@ app.mail = AppJS.extend(
|
||||
*/
|
||||
mail_removeLeaf: function(_status) {
|
||||
//console.log('mail_removeLeaf',_status);
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
var selectedNode = ftree.getSelectedNode();
|
||||
for (var i in _status)
|
||||
{
|
||||
@ -504,7 +520,7 @@ app.mail = AppJS.extend(
|
||||
//alert(i +'->'+_status[i]['id']+'+'+_status[i]['desc']);
|
||||
if (selectedNodeAfter.id!=selectedNode.id && selectedNode.id==i)
|
||||
{
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
nm.activeFilters["selectedFolder"] = selectedNodeAfter.id;
|
||||
nm.applyFilters();
|
||||
}
|
||||
@ -519,7 +535,7 @@ app.mail = AppJS.extend(
|
||||
*/
|
||||
mail_reloadNode: function(_status) {
|
||||
//console.log('mail_reloadNode',_status);
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
var selectedNode = ftree.getSelectedNode();
|
||||
for (var i in _status)
|
||||
{
|
||||
@ -530,7 +546,7 @@ app.mail = AppJS.extend(
|
||||
//alert(i +'->'+_status[i]['id']+'+'+_status[i]['desc']);
|
||||
if (selectedNodeAfter.id!=selectedNode.id && selectedNode.id==i)
|
||||
{
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
nm.activeFilters["selectedFolder"] = selectedNodeAfter.id;
|
||||
nm.applyFilters();
|
||||
}
|
||||
@ -541,7 +557,7 @@ app.mail = AppJS.extend(
|
||||
* mail_refreshMessageGrid, function to call to reread ofthe current folder
|
||||
*/
|
||||
mail_refreshMessageGrid: function() {
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
nm.applyFilters(); // this should refresh the active folder
|
||||
},
|
||||
|
||||
@ -744,7 +760,7 @@ app.mail = AppJS.extend(
|
||||
_widget.set_value('');
|
||||
}
|
||||
}
|
||||
var nm = _widget.getRoot().getWidgetById('nm');
|
||||
var nm = _widget.getRoot().getWidgetById(this.nm_index);
|
||||
nm.activeFilters["selectedFolder"] = folder;
|
||||
//nm.applyFilters();// its done in refrefreshMessageGrid
|
||||
var msg = _widget.getRoot().getWidgetById('msg');
|
||||
@ -983,7 +999,7 @@ app.mail = AppJS.extend(
|
||||
}
|
||||
else
|
||||
{
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
var aO = nm.controller._objectManager.selectedChildren;
|
||||
for (var i = 0; i < _actionObjects['msg'].length; i++)
|
||||
{
|
||||
@ -1028,7 +1044,7 @@ app.mail = AppJS.extend(
|
||||
// as the "onNodeSelect" function!
|
||||
var request = new egw_json_request('mail.mail_ui.ajax_moveMessages',[target, messages]);
|
||||
request.sendRequest(false);
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm');
|
||||
var nm = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index);
|
||||
this.mail_setRowClass(_senders,'deleted');
|
||||
nm.refresh(messages['msg'],'delete')
|
||||
//for (var i = 0; i < messages['msg'].length; i++) egw.dataDeleteUID(messages['msg'][i]);
|
||||
@ -1063,7 +1079,7 @@ app.mail = AppJS.extend(
|
||||
//console.log(action,_senders);
|
||||
//action.id == 'add'
|
||||
//_senders.iface.id == target leaf / leaf to edit
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
OldFolderName = ftree.getLabel(_senders[0].iface.id);
|
||||
if (jQuery(OldFolderName).text().length>0) OldFolderName = jQuery(OldFolderName).text();
|
||||
OldFolderName = OldFolderName.trim();
|
||||
@ -1090,7 +1106,7 @@ app.mail = AppJS.extend(
|
||||
//console.log(action,_senders);
|
||||
//action.id == 'rename'
|
||||
//_senders.iface.id == target leaf / leaf to edit
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
OldFolderName = ftree.getLabel(_senders[0].iface.id);
|
||||
if (jQuery(OldFolderName).text().length>0) OldFolderName = jQuery(OldFolderName).text();
|
||||
OldFolderName = OldFolderName.trim();
|
||||
@ -1117,7 +1133,7 @@ app.mail = AppJS.extend(
|
||||
//console.log(action,_senders);
|
||||
//action.id == 'delete'
|
||||
//_senders.iface.id == target leaf / leaf to edit
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('nm[foldertree]');
|
||||
var ftree = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById(this.nm_index+'[foldertree]');
|
||||
OldFolderName = ftree.getLabel(_senders[0].iface.id);
|
||||
if (jQuery(OldFolderName).text().length>0) OldFolderName = jQuery(OldFolderName).text();
|
||||
OldFolderName = OldFolderName.trim();
|
||||
|
@ -6,7 +6,10 @@
|
||||
<vbox class="mailCompose mailComposeHeaderSection" width="100%">
|
||||
<hbox class="mailComposeHeaders" width="99%">
|
||||
<description value="Identity"/>
|
||||
<taglist-email id="SENDER" width="88%" allowFreeEntries="false" maxSelection="1" 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>
|
||||
<button label="Submit" id="button[apply]"/><button label="Save" id="button[save]"/>
|
||||
</hbox>
|
||||
<hbox class="mailComposeHeaders" width="99%">
|
||||
<description value="To"/>
|
||||
@ -22,7 +25,7 @@
|
||||
</hbox>
|
||||
<hbox class="mailComposeHeaders" width="99%">
|
||||
<description value="Reply To"/>
|
||||
<taglist-email id="REPLYTO" width="88%" onclick="app.mail.address_click"/>
|
||||
<taglist-email id="REPLYTO" width="88%" maxSelection="1" onclick="app.mail.address_click"/>
|
||||
</hbox>
|
||||
<hbox class="mailComposeHeaders" width="99%">
|
||||
<description value="Store to Folder"/>
|
||||
@ -37,12 +40,22 @@
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox class="mailComposeBodySection" width="99%">
|
||||
<hbox disabled="!@is_html" class="mailComposeBody">
|
||||
<htmlarea span="all" id="mailtext" mode="$cont[rtfEditorFeatures]" height="320px" width="100%" toolbar="true" base_href="$cont[upload_dir]"/>
|
||||
<hbox disabled="@is_plain" class="mailComposeBody">
|
||||
<htmlarea span="all" name="mail_htmltext" id="mail_htmltext" mode="$cont[rtfEditorFeatures]" height="320px" width="100%" toolbar="true" base_href="$cont[upload_dir]"/>
|
||||
</hbox>
|
||||
<hbox disabled="@is_html" class="mailComposeBody">
|
||||
<textbox multiline="true" rows="15" cols="120" width="99%" span="all" id="mailtext"/>
|
||||
<textbox multiline="true" rows="15" cols="120" width="99%" span="all" name="mail_plaintext" id="mail_plaintext"/>
|
||||
</hbox>
|
||||
<box class="mailSignature">
|
||||
<menulist>
|
||||
<menupopup id="signatureID"/>
|
||||
</menulist>
|
||||
<description value="Stationery"/>
|
||||
<menulist>
|
||||
<menupopup id="stationeryID"/>
|
||||
</menulist>
|
||||
</box>
|
||||
|
||||
<box class="mailComposeAttachments">
|
||||
<html id="mail_composeattachments"/>
|
||||
</box>
|
||||
|
@ -40,6 +40,7 @@
|
||||
<template id="mail.index" template="" lang="" group="0" version="1.9.001">
|
||||
<tree autoloading="mail.mail_ui.ajax_foldertree" id="nm[foldertree]" onclick="app.mail.mail_changeFolder(widget.event_args[0],widget);" parent_node="mail-tree_target"/>
|
||||
<buttononly id="button[mailcreate]" onclick="app.mail.mail_compose(false);" label="Compose" parent_node="mail-index_buttonmailcreate"/>
|
||||
<buttononly id="button[testhtmlarea]" onclick="app.mail.mail_testhtmlarea(false);" label="Test HTML Area" parent_node="mail-index_buttontesthtmlarea"/>
|
||||
<html id="msg"/>
|
||||
<split dock_side="bottomDock" id="mailSplitter" orientation="h">
|
||||
<nextmatch id="nm" onselect="app.mail.mail_preview" template="mail.index.rows"/>
|
||||
|
@ -14,7 +14,7 @@
|
||||
<description value="Status"/>
|
||||
<description value="rules"/>
|
||||
</row>
|
||||
<row class="mail_sieve_$row_count[status]" >
|
||||
<row class="tr" >
|
||||
<description id="${row}[ruleID]" />
|
||||
<menulist>
|
||||
<menupopup id="${row}[status]" readonly= "true"/>
|
||||
@ -40,4 +40,4 @@
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
</overlay>
|
||||
</overlay>
|
||||
|
17
mail/templates/default/testhtmlarea.xet
Normal file
17
mail/templates/default/testhtmlarea.xet
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="mail.testhtmlarea" template="" lang="" group="0" version="1.9.001">
|
||||
<hbox>
|
||||
<button label="Submit" id="button[apply]"/><button label="Save" id="button[save]"/>
|
||||
</hbox>
|
||||
<vbox class="mailComposeBodySection" width="99%">
|
||||
<hbox disabled="@is_plain" class="mailComposeBody">
|
||||
<htmlarea span="all" name="mail_htmltext" id="mail_htmltext" mode="$cont[rtfEditorFeatures]" height="320px" width="100%" toolbar="true" base_href="$cont[upload_dir]"/>
|
||||
</hbox>
|
||||
<hbox disabled="@is_html" class="mailComposeBody">
|
||||
<textbox multiline="true" rows="15" cols="120" width="99%" span="all" name="mail_plaintext" id="mail_plaintext"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</template>
|
||||
</overlay>
|
Loading…
Reference in New Issue
Block a user