get some more actions working (delete, view header, view message body)

This commit is contained in:
Klaus Leithoff 2013-02-28 09:28:08 +00:00
parent c1593b8d84
commit df1a2e20b5
4 changed files with 464 additions and 21 deletions

View File

@ -547,7 +547,7 @@ class mail_bo
static $folderOpened;
//if (empty($folderOpened) || $folderOpened!=$_foldername)
//{
//error_log( "------------------------reopen- $_foldername <br>");
//error_log( __METHOD__.__LINE__." $_foldername ".function_backtrace());
//error_log(__METHOD__.__LINE__.' Connected with icServer for Profile:'.$this->profileID.'?'.print_r($this->icServer->_connected,true));
if (!($this->icServer->_connected == 1)) {
$tretval = $this->openConnection($this->profileID,false);
@ -2329,6 +2329,134 @@ class mail_bo
}
}
/**
* delete a Message
*
* @param mixed array/string _messageUID array of ids to flag, or 'all'
* @param string _folder foldername
* @param string _forceDeleteMethod - "no", or deleteMethod like 'move_to_trash',"mark_as_deleted","remove_immediately"
*
* @return bool true, as we do not handle return values yet
*/
function deleteMessages($_messageUID, $_folder=NULL, $_forceDeleteMethod='no')
{
//error_log(__METHOD__.__LINE__.'->'.array2string($_messageUID).','.array2string($_folder));
$msglist = '';
$oldMailbox = '';
if (is_null($_folder) || empty($_folder)) $_folder = $this->sessionData['mailbox'];
if(!is_array($_messageUID) || count($_messageUID) === 0)
{
if ($_messageUID=='all')
{
$_messageUID= null;
}
else
{
if (self::$debug) error_log(__METHOD__." no messages Message(s): ".implode(',',$_messageUID));
return false;
}
}
$deleteOptions = $_forceDeleteMethod; // use forceDeleteMethod if not "no", or unknown method
if ($_forceDeleteMethod === 'no' || !in_array($_forceDeleteMethod,array('move_to_trash',"mark_as_deleted","remove_immediately"))) $deleteOptions = $this->mailPreferences->preferences['deleteOptions'];
//error_log(__METHOD__.__LINE__.'->'.array2string($_messageUID).','.$_folder.'/'.$this->sessionData['mailbox'].' Option:'.$deleteOptions);
$trashFolder = $this->getTrashFolder();
$draftFolder = $this->getDraftFolder(); //$GLOBALS['egw_info']['user']['preferences']['felamimail']['draftFolder'];
$templateFolder = $this->getTemplateFolder(); //$GLOBALS['egw_info']['user']['preferences']['felamimail']['templateFolder'];
if(($_folder == $trashFolder && $deleteOptions == "move_to_trash") ||
($_folder == $draftFolder)) {
$deleteOptions = "remove_immediately";
}
if($this->icServer->getCurrentMailbox() != $_folder) {
$oldMailbox = $this->icServer->getCurrentMailbox();
$this->icServer->selectMailbox($_folder);
}
$updateCache = false;
switch($deleteOptions) {
case "move_to_trash":
$updateCache = true;
if(!empty($trashFolder)) {
if (self::$debug) error_log(implode(' : ', $_messageUID));
if (self::$debug) error_log("$trashFolder <= ". $this->sessionData['mailbox']);
// copy messages
$retValue = $this->icServer->copyMessages($trashFolder, $_messageUID, $_folder, true);
if ( PEAR::isError($retValue) ) {
if (self::$debug) error_log(__METHOD__." failed to copy Message(s) from $_folder to $trashFolder: ".implode(',',$_messageUID));
throw new egw_exception("failed to copy Message(s) from $_folder to $trashFolder: ".implode(',',$_messageUID).' due to:'.array2string($retValue->message));
return false;
}
// mark messages as deleted
$retValue = $this->icServer->deleteMessages($_messageUID, true);
if ( PEAR::isError($retValue)) {
if (self::$debug) error_log(__METHOD__." failed to delete Message(s) from $_folder: ".implode(',',$_messageUID)." due to:".$retValue->message);
throw new egw_exception("failed to delete Message(s) from $_folder: ".implode(',',$_messageUID)." due to:".array2string($retValue->message));
return false;
}
// delete the messages finaly
$rv = $this->icServer->expunge();
if ( PEAR::isError($rv)) error_log(__METHOD__." failed to expunge Message(s) from Folder: ".$_folder.' due to:'.$rv->message);
}
break;
case "mark_as_deleted":
// mark messages as deleted
foreach((array)$_messageUID as $key =>$uid)
{
//flag messages, that are flagged for deletion as seen too
$this->flagMessages('read', $uid, $_folder);
$flags = $this->getFlags($uid);
//error_log(__METHOD__.__LINE__.array2string($flags));
if (strpos( array2string($flags),'Deleted')!==false) $undelete[] = $uid;
unset($flags);
}
$retValue = PEAR::isError($this->icServer->deleteMessages($_messageUID, true));
foreach((array)$undelete as $key =>$uid)
{
$this->flagMessages('undelete', $uid, $_folder);
}
if ( PEAR::isError($retValue)) {
if (self::$debug) error_log(__METHOD__." failed to mark as deleted for Message(s) from $_folder: ".implode(',',$_messageUID));
throw new egw_exception("failed to mark as deleted for Message(s) from $_folder: ".implode(',',$_messageUID).' due to:'.array2string($retValue->message));
return false;
}
break;
case "remove_immediately":
$updateCache = true;
// mark messages as deleted
$retValue = $this->icServer->deleteMessages($_messageUID, true);
if ( PEAR::isError($retValue)) {
if (self::$debug) error_log(__METHOD__." failed to remove immediately Message(s) from $_folder: ".implode(',',$_messageUID));
throw new egw_exception("failed to remove immediately Message(s) from $_folder: ".implode(',',$_messageUID).' due to:'.array2string($retValue->message));
return false;
}
// delete the messages finaly
$this->icServer->expunge();
break;
}
if ($updateCache)
{
$structure = egw_cache::getCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1);
$cachemodified = false;
foreach ((array)$_messageUID as $k => $_uid)
{
if (isset($structure[$this->icServer->ImapServerId][$_folder][$_uid]) || $_uid=='all')
{
$cachemodified = true;
if ($_uid=='all')
unset($structure[$this->icServer->ImapServerId][$_folder]);
else
unset($structure[$this->icServer->ImapServerId][$_folder][$_uid]);
}
}
if ($cachemodified) egw_cache::setCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$structure,$expiration=60*60*1);
}
if($oldMailbox != '') {
$this->icServer->selectMailbox($oldMailbox);
}
return true;
}
/**
* flag a Message
*
@ -2525,6 +2653,87 @@ class mail_bo
return $structure[$this->icServer->ImapServerId][$_folder][$_uid];
}
/**
* getMessageRawHeader
* get parsed headers from message
* @param string/int $_uid the messageuid,
* @param string/int $_partID='' , the partID, may be omitted
* @param boolean $decode flag to do the decoding on the fly
* @return string the message header
*/
function getMessageHeader($_uid, $_partID = '',$decode=false)
{
$retValue = $this->icServer->getParsedHeaders($_uid, true, $_partID, true);
if (PEAR::isError($retValue))
{
error_log(__METHOD__.__LINE__.array2string($retValue->message));
$retValue = null;
}
return ($decode ? self::decode_header($retValue,true):$retValue);
}
/**
* getMessageRawHeader
* get messages raw header data
* @param string/int $_uid the messageuid,
* @param string/int $_partID='' , the partID, may be omitted
* @return string the message header
*/
function getMessageRawHeader($_uid, $_partID = '')
{
static $rawHeaders;
$_folder = ($this->sessionData['mailbox']? $this->sessionData['mailbox'] : $this->icServer->getCurrentMailbox());
//error_log(__METHOD__.__LINE__." Try Using Cache for raw Header $_uid, $_partID in Folder $_folder");
if (is_null($rawHeaders)) $rawHeaders = egw_cache::getCache(egw_cache::INSTANCE,'email','rawHeadersCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1);
if (isset($rawHeaders[$this->icServer->ImapServerId][$_folder][$_uid][($_partID==''?'NIL':$_partID)]))
{
//error_log(__METHOD__.__LINE__." Using Cache for raw Header $_uid, $_partID in Folder $_folder");
return $rawHeaders[$this->icServer->ImapServerId][$_folder][$_uid][($_partID==''?'NIL':$_partID)];
}
$retValue = $this->icServer->getRawHeaders($_uid, $_partID, true);
if (PEAR::isError($retValue))
{
error_log(__METHOD__.__LINE__.array2string($retValue->message));
$retValue = "Could not retrieve RawHeaders in ".__METHOD__.__LINE__." PEAR::Error:".array2string($retValue->message);
}
$rawHeaders[$this->icServer->ImapServerId][$_folder][$_uid][($_partID==''?'NIL':$_partID)]=$retValue;
egw_cache::setCache(egw_cache::INSTANCE,'email','rawHeadersCache'.trim($GLOBALS['egw_info']['user']['account_id']),$rawHeaders,$expiration=60*60*1);
return $retValue;
}
/**
* getMessageRawBody
* get the message raw body
* @param string/int $_uid the messageuid,
* @param string/int $_partID='' , the partID, may be omitted
* @return string the message body
*/
function getMessageRawBody($_uid, $_partID = '')
{
//TODO: caching einbauen static!
static $rawBody;
$_folder = ($this->sessionData['mailbox']? $this->sessionData['mailbox'] : $this->icServer->getCurrentMailbox());
if (isset($rawBody[$_folder][$_uid][($_partID==''?'NIL':$_partID)]))
{
//error_log(__METHOD__.__LINE__." Using Cache for raw Body $_uid, $_partID in Folder $_folder");
return $rawBody[$this->icServer->ImapServerId][$_folder][$_uid][($_partID==''?'NIL':$_partID)];
}
if($_partID != '') {
$body = $this->icServer->getBody($_uid, true);
} else {
$body = $this->icServer->getBodyPart($_uid, $_partID, true);
}
if (PEAR::isError($body))
{
error_log(__METHOD__.__LINE__.' failed:'.$body->message);
return false;
}
$rawBody[$this->icServer->ImapServerId][$_folder][$_uid][($_partID==''?'NIL':$_partID)] = $body;
return $body;
}
/**
* getMessageAttachments
* parse the structure for attachments, it returns not the attachments itself, but an array of information about the attachment

View File

@ -453,11 +453,12 @@ class mail_hooks
'admin' => False,
'default'=> 50,
),
'PreViewFrameHeight' => array(
'type' => 'input',
'label' => 'Message preview size',
'help' => 'If you want to see a preview of a mail by single clicking onto the subject, set the height for the message-list and the preview area here. 300 seems to be a good working value. The preview will be displayed at the end of the message list when a message is selected.',
'name' => 'PreViewFrameHeight',
'enablePreViewArea' => array(
'type' => 'select',
'label' => 'Message preview area',
'help' => 'If you want to see a preview of a mail by single clicking onto the subject, enable this.',
'name' => 'enablePreViewArea',
'values' => $no_yes_copy,
'xmlrpc' => True,
'admin' => False,
'forced' => '300',

View File

@ -23,6 +23,8 @@ class mail_ui
var $public_functions = array
(
'index' => True,
'displayHeader' => True,
'saveMessage' => True,
'TestConnection' => True,
);
@ -66,12 +68,12 @@ class mail_ui
}
if ($connectionReset)
{
error_log(__METHOD__.__LINE__.' Connection Reset triggered:'.$connectionReset.' for Profile with ID:'.self::$icServerID);
if (mail_bo::$debug) error_log(__METHOD__.__LINE__.' Connection Reset triggered:'.$connectionReset.' for Profile with ID:'.self::$icServerID);
emailadmin_bo::unsetCachedObjects(self::$icServerID);
}
$this->mail_bo = mail_bo::getInstance(false,$icServerID);
error_log(__METHOD__.__LINE__.' Fetched IC Server:'.self::$icServerID.'/'.$this->mail_bo->profileID.':'.function_backtrace());
if (mail_bo::$debug) error_log(__METHOD__.__LINE__.' Fetched IC Server:'.self::$icServerID.'/'.$this->mail_bo->profileID.':'.function_backtrace());
// no icServer Object: something failed big time
if (!isset($this->mail_bo->icServer)) exit; // ToDo: Exception or the dialog for setting up a server config
if (!($this->mail_bo->icServer->_connected == 1)) $this->mail_bo->openConnection(self::$icServerID);
@ -85,10 +87,10 @@ class mail_ui
function changeProfile($_icServerID)
{
self::$icServerID = $_icServerID;
error_log(__METHOD__.__LINE__.'->'.self::$icServerID);
if (mail_bo::$debug) error_log(__METHOD__.__LINE__.'->'.self::$icServerID);
emailadmin_bo::unsetCachedObjects(self::$icServerID);
$this->mail_bo = mail_bo::getInstance(false,self::$icServerID);
error_log(__METHOD__.__LINE__.' Fetched IC Server:'.self::$icServerID.'/'.$this->mail_bo->profileID.':'.function_backtrace());
if (mail_bo::$debug) error_log(__METHOD__.__LINE__.' Fetched IC Server:'.self::$icServerID.'/'.$this->mail_bo->profileID.':'.function_backtrace());
// no icServer Object: something failed big time
if (!isset($this->mail_bo->icServer)) exit; // ToDo: Exception or the dialog for setting up a server config
/*if (!($this->mail_bo->icServer->_connected == 1))*/ $this->mail_bo->openConnection(self::$icServerID);
@ -397,7 +399,7 @@ class mail_ui
{
if ($_profileID && $_profileID != $this->mail_bo->profileID)
{
error_log(__METHOD__.__LINE__.' change Profile to ->'.$_profileID);
//error_log(__METHOD__.__LINE__.' change Profile to ->'.$_profileID);
$this->changeProfile($_profileID);
}
}
@ -434,7 +436,7 @@ class mail_ui
'im1' => 'thunderbird.png',
'im2' => 'thunderbird.png',
'path'=> array($icServer->ImapServerId),
'child'=> 1,
'child'=> 1, // dynamic loading on unfold
'parent' => ''
);
$this->setOutStructure($oA,$out,self::$delimiter);
@ -484,13 +486,13 @@ class mail_ui
}
$path = $this->mail_bo->profileID.self::$delimiter.$key; //$obj->folderName; //$obj->delimiter
$oA['id'] = $path; // ID holds the PATH
if (stripos(array2string($fS['attributes']),'\noselect')!== false)
if (!empty($fS['attributes']) && stripos(array2string($fS['attributes']),'\noselect')!== false)
{
$oA['im0'] = "folderNoSelectClosed.gif"; // one Level
$oA['im1'] = "folderNoSelectOpen.gif";
$oA['im2'] = "folderNoSelectClosed.gif"; // has Children
}
if (stripos(array2string($fS['attributes']),'\hasnochildren')=== false)
if (!empty($fS['attributes']) && stripos(array2string($fS['attributes']),'\hasnochildren')=== false)
{
$oA['child']=1; // translates to: hasChildren -> dynamicLoading
}
@ -923,7 +925,7 @@ class mail_ui
unset($query['actions']);
//error_log(__METHOD__.__LINE__.array2string($query));
//error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Start:'.$query['start'].' NumRows:'.$query['num_rows']);
$starttime = microtime(true);
//$starttime = microtime(true);
//error_log(__METHOD__.__LINE__.array2string($query['search']));
//$query['search'] is the phrase in the searchbox
@ -943,7 +945,7 @@ $starttime = microtime(true);
{
if ($_profileID && $_profileID != $this->mail_bo->profileID)
{
error_log(__METHOD__.__LINE__.' change Profile to ->'.$_profileID);
//error_log(__METHOD__.__LINE__.' change Profile to ->'.$_profileID);
$this->changeProfile($_profileID);
}
$_folderName = $folderName;
@ -1031,8 +1033,8 @@ $starttime = microtime(true);
if ($GLOBALS['egw_info']['user']['preferences']['common']['select_mode']=='EGW_SELECTMODE_TOGGLE') unset($cols[0]);
$rows = $this->header2gridelements($sortResult['header'],$cols, $_folderName, $folderType,$previewMessage);
//error_log(__METHOD__.__LINE__.array2string($rows));
$endtime = microtime(true) - $starttime;
error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Start:'.$query['start'].' NumRows:'.$query['num_rows'].' Took:'.$endtime);
//$endtime = microtime(true) - $starttime;
//error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Start:'.$query['start'].' NumRows:'.$query['num_rows'].' Took:'.$endtime);
return $rowsFetched['messages'];
}
@ -1373,6 +1375,102 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star
return $rv;
}
/**
* display messages header lines
*
* all params are passed as GET Parameters
*/
function displayHeader()
{
if(isset($_GET['id'])) $rowID = $_GET['id'];
if(isset($_GET['part'])) $partID = $_GET['part'];
$hA = $this->splitRowID($rowID);
$uid = $hA['msgUID'];
$mailbox = $hA['folder'];
//$transformdate =& CreateObject('felamimail.transformdate');
//$htmlFilter =& CreateObject('felamimail.htmlfilter');
//$uiWidgets =& CreateObject('felamimail.uiwidgets');
$this->mail_bo->reopen($mailbox);
$rawheaders = $this->mail_bo->getMessageRawHeader($uid, $partID);
$webserverURL = $GLOBALS['egw_info']['server']['webserver_url'];
#$nonDisplayAbleCharacters = array('[\016]','[\017]',
# '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
# '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
#print "<pre>";print_r($rawheaders);print"</pre>";exit;
// add line breaks to $rawheaders
$newRawHeaders = explode("\n",$rawheaders);
reset($newRawHeaders);
// reset $rawheaders
$rawheaders = "";
// create it new, with good line breaks
reset($newRawHeaders);
while(list($key,$value) = @each($newRawHeaders)) {
$rawheaders .= wordwrap($value, 90, "\n ");
}
$this->mail_bo->closeConnection();
header('Content-type: text/html; charset=iso-8859-1');
print '<pre>'. htmlspecialchars($rawheaders, ENT_NOQUOTES, 'iso-8859-1') .'</pre>';
}
/**
* save messages on disk or filemanager, or display it in popup
*
* all params are passed as GET Parameters
*/
function saveMessage()
{
$display = false;
if(isset($_GET['id'])) $rowID = $_GET['id'];
if(isset($_GET['part'])) $partID = $_GET['part'];
if (isset($_GET['location'])&& ($_GET['location']=='display'||$_GET['location']=='filemanager')) $display = $_GET['location'];
$hA = $this->splitRowID($rowID);
$uid = $hA['msgUID'];
$mailbox = $hA['folder'];
$this->mail_bo->reopen($mailbox);
$message = $this->mail_bo->getMessageRawBody($uid, $partID);
$headers = $this->mail_bo->getMessageHeader($uid, $partID);
$this->mail_bo->closeConnection();
$GLOBALS['egw']->session->commit_session();
if ($display==false)
{
$subject = str_replace('$$','__',mail_bo::decode_header($headers['SUBJECT']));
header ("Content-Type: message/rfc822; name=\"". $subject .".eml\"");
header ("Content-Disposition: attachment; filename=\"". $subject .".eml\"");
header("Expires: 0");
// the next headers are for IE and SSL
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
echo $message;
$GLOBALS['egw']->common->egw_exit();
exit;
}
//elseif ($display=='filemanager') // done in vfsSaveMessage
//{
//}
else
{
header('Content-type: text/html; charset=iso-8859-1');
print '<pre>'. htmlspecialchars($message, ENT_NOQUOTES, 'iso-8859-1') .'</pre>';
}
}
/**
* getFolderStatus - its called via json, so the function must start with ajax (or the class-name must contain ajax)
* gets the counters and sets the text of a treenode if needed (unread Messages found)
@ -1420,7 +1518,7 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star
function ajax_changeProfile($icServerID)
{
if ($icServerID && $icServerID != $this->mail_bo->profileID)
error_log(__METHOD__.__LINE__.' change Profile to ->'.$icServerID);
//error_log(__METHOD__.__LINE__.' change Profile to ->'.$icServerID);
$this->changeProfile($icServerID);
$response = egw_json_response::get();
$response->call('egw_refresh',lang('changed profile'),'mail');
@ -1470,7 +1568,7 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star
*/
function ajax_flagMessages($_flag, $_messageList)
{
if($this->_debug) error_log(__METHOD__."->".$_flag.':'.print_r($_messageList,true));
if(mail_bo::$debug) error_log(__METHOD__."->".$_flag.':'.print_r($_messageList,true));
if ($_messageList=='all' || !empty($_messageList['msg']))
{
if ($_messageList=='all')
@ -1492,7 +1590,7 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star
}
else
{
if($this->_debug) error_log(__METHOD__."-> No messages selected.");
if(mail_bo::$debug) error_log(__METHOD__."-> No messages selected.");
}
// unset preview, as refresh would mark message again read
@ -1507,4 +1605,40 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star
$response->call('egw_refresh',lang('flagged %1 messages as %2 in %3',count($_messageList['msg']),$_flag,$folder),'mail');
}
/**
* delete messages
*
* @param array _messageList list of UID's
*
* @return xajax response
*/
function ajax_deleteMessages($_messageList)
{
if(mail_bo::$debug) error_log(__METHOD__."->".$_flag.':'.print_r($_messageList,true));
if ($_messageList=='all' || !empty($_messageList['msg']))
{
if ($_messageList=='all')
{
// we have no folder information
$folder=null;
}
else
{
$uidA = $this->splitRowID($_messageList['msg'][0]);
$folder = $uidA['folder']; // all messages in one set are supposed to be within the same folder
}
foreach($_messageList['msg'] as $rowID)
{
$hA = $this->splitRowID($rowID);
$messageList[] = $hA['msgUID'];
}
$this->mail_bo->deleteMessages(($_messageList=='all' ? 'all':$messageList),$folder);
}
else
{
if(mail_bo::$debug) error_log(__METHOD__."-> No messages selected.");
}
$response = egw_json_response::get();
$response->call('egw_refresh',lang('deleted %1 messages in %2',count($_messageList['msg']),$folder),'mail');
}
}

View File

@ -160,6 +160,44 @@ function mail_setMsg(myMsg)
}
}
/**
* Delete mails
* takes in all arguments
* @param _action
* @param _elems
*/
function mail_delete(_action,_elems)
{
var msg = mail_getFormData(_elems);
//alert(_action.id+','+ msg);
app_refresh(egw.lang('delete messages'), 'mail');
mail_setRowClass(_elems,'deleted');
var request = new egw_json_request('mail.mail_ui.ajax_deleteMessages',[msg]);
request.sendRequest(false);
mail_refreshMessageGrid()
}
/**
* UnDelete mailMessages
*
* @param _messageList
*/
function mail_undeleteMessages(_messageList) {
// setting class of row, the old style
/*
for(var i=0;i<_messageList['msg'].length;i++) {
_id = _messageList['msg'][i];
var dataElem = egw_appWindow('felamimail').mailGrid.dataRoot.getElementById(_id);
if (dataElem)
{
//dataElem.clearData();
//dataElem.addClass('deleted');
dataElem.removeClass('deleted');
}
}
*/
}
/**
* mail_emptyTrash
*/
@ -271,6 +309,47 @@ function mail_flagMessages(_flag, _elems)
mail_refreshMessageGrid()
}
/**
* display header lines, or source of mail, depending on the url given
*
* @param _url
*/
function mail_displayHeaderLines(_url) {
// only used by right clickaction
egw_openWindowCentered(_url,'mail_display_headerLines','700','600',window.outerWidth/2,window.outerHeight/2);
}
/**
* View header of a message
*
* @param _action
* @param _elems _elems[0].id is the row-id
*/
function mail_header(_action, _elems)
{
//alert('mail_header('+_elems[0].id+')');
var url = window.egw_webserverUrl+'/index.php?';
url += 'menuaction=mail.mail_ui.displayHeader'; // todo compose for Draft folder
url += '&id='+_elems[0].id;
mail_displayHeaderLines(url);
}
/**
* View message source
*
* @param _action
* @param _elems _elems[0].id is the row-id
*/
function mail_mailsource(_action, _elems)
{
//alert('mail_mailsource('+_elems[0].id+')');
var url = window.egw_webserverUrl+'/index.php?';
url += 'menuaction=mail.mail_ui.saveMessage'; // todo compose for Draft folder
url += '&id='+_elems[0].id;
url += '&location=display';
mail_displayHeaderLines(url);
}
/**
* mail_getFormData
*
@ -295,6 +374,26 @@ function mail_getFormData(_actionObjects) {
return messages;
}
/**
* mail_setRowClass
*
* @param _actionObjects, the senders
*/
function mail_setRowClass(_actionObjects,_class) {
if (typeof _class == 'undefined') return false;
for (var i = 0; i < _actionObjects.length; i++)
{
if (_actionObjects[i].id.length>0)
{
var _id = _actionObjects[i].id;
var dataElem = $j(_actionObjects[i].iface.getDOMNode());
dataElem.addClass(_class);
}
}
}
// Tree widget stubs
mail_dragStart = function(action,sender) {
console.log(action,sender);