2013-02-12 18:48:04 +01:00
/ * *
* mail - static javaScript functions
*
* @ link http : //www.egroupware.org
2013-10-24 09:15:48 +02:00
* @ author Stylite AG [ info @ stylite . de ]
2014-01-13 14:06:29 +01:00
* @ copyright ( c ) 2013 - 2014 by Stylite AG < info - AT - stylite . de >
2013-02-12 18:48:04 +01:00
* @ package mail
* @ license http : //opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @ version $Id$
* /
2013-10-07 18:53:13 +02:00
/ * *
* UI for mail
2013-10-09 18:44:03 +02:00
*
2013-10-07 18:53:13 +02:00
* @ augments AppJS
* /
2013-11-04 21:54:23 +01:00
app . classes . mail = AppJS . extend (
2013-02-19 17:30:59 +01:00
{
2013-04-13 12:30:07 +02:00
appname : 'mail' ,
2013-08-21 12:47:20 +02:00
2013-06-12 13:50:30 +02:00
/ * *
* et2 widget container
* /
et2 : null ,
2013-04-13 12:30:07 +02:00
doStatus : null ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
mail _queuedFolders : [ ] ,
mail _queuedFoldersIndex : 0 ,
2013-05-21 10:46:54 +02:00
mail _selectedMails : [ ] ,
mail _currentlyFocussed : '' ,
2013-05-29 14:34:33 +02:00
mail _previewAreaActive : true , // we start with the area active
2013-07-25 17:35:44 +02:00
2013-08-21 12:47:20 +02:00
nm _index : 'nm' , // nm nome of index
2013-09-23 10:33:30 +02:00
mail _fileSelectorWindow : null ,
2013-10-05 18:36:20 +02:00
mail _isMainWindow : true ,
2013-08-21 12:47:20 +02:00
2013-12-09 12:17:32 +01:00
/ * *
* abbrevations for common access rights
* @ array
*
* /
aclCommonRights : [ 'lrs' , 'lprs' , 'ilprs' , 'ilprws' , 'akxeilprwts' , 'custom' ] ,
/ * *
* Demonstrates ACL rights
* @ array
*
* /
aclRights : [ 'l' , 'r' , 's' , 'w' , 'i' , 'p' , 'c' , 'd' , 'a' ] ,
2013-04-13 12:30:07 +02:00
/ * *
* Initialize javascript for this application
2013-07-25 17:35:44 +02:00
*
2013-10-09 16:35:03 +02:00
* @ memberOf mail
2013-04-13 12:30:07 +02:00
* /
init : function ( ) {
this . _super . apply ( this , arguments ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-06-12 13:50:30 +02:00
/ * *
* Destructor
* /
destroy : function ( )
{
2014-01-11 15:16:36 +01:00
// Unbind from nm refresh
var nm = this . et2 . getWidgetById ( 'nm' ) ;
if ( nm != null )
{
$j ( nm ) . off ( 'refresh' ) ;
}
2013-06-12 13:50:30 +02:00
delete this . et2 ;
2013-10-09 18:44:03 +02:00
delete this . et2 _obj ;
2013-06-12 13:50:30 +02:00
// call parent
this . _super . apply ( this , arguments ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-06-12 13:50:30 +02:00
/ * *
* This function is called when the etemplate2 object is loaded
* and ready . If you must store a reference to the et2 object ,
* make sure to clean it up in destroy ( ) .
*
* @ param et2 etemplate2 Newly ready object
* /
et2 _ready : function ( et2 )
{
2013-09-02 17:15:35 +02:00
// call parent; somehow this function is called more often. (twice on a display and compose) why?
2013-06-12 13:50:30 +02:00
this . _super . apply ( this , arguments ) ;
2013-08-09 19:47:53 +02:00
this . et2 _obj = et2 ;
2013-06-12 13:50:30 +02:00
this . et2 = et2 . widgetContainer ;
var isMainView = false ;
2013-06-17 16:25:20 +02:00
var isDisplay = false ;
2013-10-14 15:30:04 +02:00
var isCompose = false ;
2013-06-17 16:25:20 +02:00
for ( var t in et2 . templates )
{
2013-09-02 17:15:35 +02:00
//alert(t); // as we iterate through this more than once, ... we separate trigger and action
switch ( t ) {
case 'mail.index' :
2013-10-05 18:36:20 +02:00
this . mail _isMainWindow = isMainView = true ;
2013-09-02 17:15:35 +02:00
break ;
case 'mail.display' :
2013-10-05 18:36:20 +02:00
this . mail _isMainWindow = false ;
2013-09-02 17:15:35 +02:00
isDisplay = true ;
break ;
2013-10-01 13:29:54 +02:00
case 'mail.compose' :
2013-10-05 18:36:20 +02:00
this . mail _isMainWindow = false ;
2013-10-14 15:30:04 +02:00
isCompose = true ;
2013-09-02 17:15:35 +02:00
}
2013-06-17 16:25:20 +02:00
}
2013-09-02 17:15:35 +02:00
//alert('action about to go down');
2013-10-08 16:23:46 +02:00
if ( isMainView )
{
this . mail _disablePreviewArea ( true ) ;
2014-01-11 15:16:36 +01:00
// Bind to nextmatch refresh to update folder status
var nm = this . et2 . getWidgetById ( 'nm' ) ;
2014-01-13 18:29:27 +01:00
if ( nm != null && ( typeof jQuery . _data ( nm ) . events == 'undefined' || typeof jQuery . _data ( nm ) . events . refresh == 'undefined' ) )
2014-01-11 15:16:36 +01:00
{
var self = this ;
$j ( nm ) . on ( 'refresh' , function ( ) { self . mail _refreshFolderStatus . call ( self , undefined , undefined , false ) ; } ) ;
}
2013-10-08 16:23:46 +02:00
}
2013-09-02 17:15:35 +02:00
if ( isDisplay )
{
2013-10-18 11:58:25 +02:00
var subject = this . et2 . getWidgetById ( 'mail_displaysubject' ) ;
var body = this . et2 . getWidgetById ( 'mail_displaybody' ) ;
2013-09-02 17:15:35 +02:00
body . node . parentNode . style . top = subject . node . offsetTop + 40 + 'px' ;
2013-10-05 16:15:29 +02:00
var app _registry = egw . link _get _registry ( 'mail' ) ; //this.appname);
2013-09-05 16:52:11 +02:00
//console.log(app_registry);
2013-10-01 13:29:54 +02:00
w = 870 ;
2013-09-05 16:52:11 +02:00
if ( typeof app _registry [ 'view' ] != 'undefined' && typeof app _registry [ 'view_popup' ] != 'undefined' )
{
var w _h = app _registry [ 'view_popup' ] . split ( 'x' ) ;
if ( w _h [ 1 ] == 'egw_getWindowOuterHeight()' ) w _h [ 1 ] = ( screen . availHeight > egw _getWindowOuterHeight ( ) ? screen . availHeight : egw _getWindowOuterHeight ( ) ) ;
}
2013-10-01 13:29:54 +02:00
//alert('resizing to'+(w_h[0]?w_h[0]:870)+','+(w_h[1]?w_h[1]:egw_getWindowOuterHeight()));
window . resizeTo ( ( w _h [ 0 ] ? w _h [ 0 ] : 870 ) , ( w _h [ 1 ] ? w _h [ 1 ] : ( screen . availHeight > egw _getWindowOuterHeight ( ) ? screen . availHeight : egw _getWindowOuterHeight ( ) ) ) ) ;
2013-09-02 17:15:35 +02:00
}
2013-10-14 15:30:04 +02:00
if ( isCompose )
{
var app _registry = egw . link _get _registry ( 'mail' ) ; //this.appname);
//console.log(app_registry);
w = 870 ;
if ( typeof app _registry [ 'edit' ] != 'undefined' && typeof app _registry [ 'edit_popup' ] != 'undefined' )
{
var w _h = app _registry [ 'edit_popup' ] . split ( 'x' ) ;
if ( w _h [ 1 ] == 'egw_getWindowOuterHeight()' ) w _h [ 1 ] = ( screen . availHeight > egw _getWindowOuterHeight ( ) ? screen . availHeight : egw _getWindowOuterHeight ( ) ) ;
}
//alert('resizing to'+(w_h[0]?w_h[0]:870)+','+(w_h[1]?w_h[1]:egw_getWindowOuterHeight()));
2013-12-17 09:47:16 +01:00
//window.resizeTo((w_h[0]?w_h[0]:870),(w_h[1]?w_h[1]:(screen.availHeight>egw_getWindowOuterHeight()?screen.availHeight:egw_getWindowOuterHeight())));
window . resizeTo ( ( w _h [ 0 ] ? w _h [ 0 ] : 870 ) , ( w _h [ 1 ] ? w _h [ 1 ] : ( screen . availHeight < 800 ? screen . availHeight : 800 ) ) ) ;
2013-10-14 15:30:04 +02:00
}
2013-10-16 13:22:53 +02:00
//Vacation By_date filter
if ( typeof et2 . templates [ 'mail.sieve.vacation' ] != 'undefined' )
{
this . vacationFilterStatusChange ( ) ;
}
2013-06-12 13:50:30 +02:00
} ,
2013-05-21 10:46:54 +02:00
/ * *
* mail _fetchCurrentlyFocussed - implementation to decide wich mail of all the selected ones is the current
2013-07-25 17:35:44 +02:00
*
2013-05-21 10:46:54 +02:00
* @ param _selected array of the selected mails
* @ param _reset bool - tell the function to reset the global vars used
* /
mail _fetchCurrentlyFocussed : function ( _selected , _reset ) {
//console.log("mail_fetchCurrentlyFocussed",_selected, _reset);
// reinitialize the buffer-info on selected mails
if ( _reset == true || typeof _selected == 'undefined' )
{
2013-05-21 14:02:58 +02:00
if ( _reset == true )
{
2013-10-18 11:58:25 +02:00
//var nm = this.et2.getWidgetById(nm_index);
2013-06-04 17:29:53 +02:00
//if (this.mail_currentlyFocussed!='') nm.refresh([this.mail_currentlyFocussed],'delete');//egw.dataDeleteUID(this.mail_currentlyFocussed);
2013-05-21 14:02:58 +02:00
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 ] ) ;
2013-06-04 17:29:53 +02:00
//nm.refresh(this.mail_selectedMails,'delete');
2013-05-21 14:02:58 +02:00
}
2013-05-21 10:46:54 +02:00
this . mail _selectedMails = [ ] ;
this . mail _currentlyFocussed = '' ;
return '' ;
}
for ( var k = 0 ; k < _selected . length ; k ++ )
{
if ( jQuery . inArray ( _selected [ k ] , this . mail _selectedMails ) == - 1 )
{
this . mail _currentlyFocussed = _selected [ k ] ;
break ;
}
}
this . mail _selectedMails = _selected ;
return this . mail _currentlyFocussed ;
} ,
2013-04-13 12:30:07 +02:00
/ * *
* mail _open - implementation of the open action
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _senders - the representation of the elements ( s ) the action is to be performed on
2013-07-20 09:23:55 +02:00
* @ param _mode - you may pass the mode . if not given view is used ( tryastext | tryashtml are supported )
2013-04-13 12:30:07 +02:00
* /
2013-07-20 09:23:55 +02:00
mail _open : function ( _action , _senders , _mode ) {
2013-07-17 14:01:01 +02:00
//console.log("mail_open",_action, _senders);
2013-10-05 11:03:51 +02:00
if ( typeof _senders == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _senders = [ ] ;
_senders . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _senders == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _senders = [ ] ;
_senders . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
var _id = _senders [ 0 ] . id ;
2013-05-21 10:46:54 +02:00
// reinitialize the buffer-info on selected mails
2013-07-20 09:23:55 +02:00
if ( ! ( _mode == 'tryastext' || _mode == 'tryashtml' || _mode == 'view' ) ) _mode = 'view' ;
2013-05-21 10:46:54 +02:00
this . mail _selectedMails = [ ] ;
this . mail _selectedMails . push ( _id ) ;
this . mail _currentlyFocussed = _id ;
2013-04-13 12:30:07 +02:00
var dataElem = egw . dataGetUIDdata ( _id ) ;
var subject = dataElem . data . subject ;
2013-06-05 16:24:56 +02:00
//alert('Open Message:'+_id+' '+subject);
2013-07-20 09:23:55 +02:00
var h = egw ( ) . open ( _id , 'mail' , 'view' , _mode + '=' + _id . replace ( /=/g , "_" ) ) ;
2013-07-17 14:01:01 +02:00
egw ( h ) . ready ( function ( ) {
h . document . title = subject ;
} ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-05-13 16:42:42 +02:00
/ * *
* Open a single message in html mode
2013-07-25 17:35:44 +02:00
*
2013-05-13 16:42:42 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _openAsHtml : function ( _action , _elems )
{
2013-07-20 09:23:55 +02:00
this . mail _open ( _action , _elems , 'tryashtml' ) ;
2013-05-13 16:42:42 +02:00
} ,
/ * *
* Open a single message in plain text mode
2013-07-25 17:35:44 +02:00
*
2013-05-13 16:42:42 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _openAsText : function ( _action , _elems )
{
2013-07-20 09:23:55 +02:00
this . mail _open ( _action , _elems , 'tryastext' ) ;
} ,
/ * *
* Compose , reply or forward a message
2013-07-25 17:35:44 +02:00
*
2013-10-07 12:12:18 +02:00
* @ function
* @ memberOf mail
2013-07-20 09:23:55 +02:00
* @ 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 _compose : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
//console.log(this.et2.getArrayMgr('content').data,this.et2.getArrayMgr("content").getEntry('mail_id'));
2013-10-07 12:12:18 +02:00
if ( this . et2 && this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
2013-10-05 11:03:51 +02:00
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
console . log ( _action , _elems ) ;
2013-10-04 19:45:33 +02:00
// Extra info passed to egw.open()
var settings = {
// 'Source' Mail UID
id : '' ,
// How to pull data from the Mail IDs for the compose
from : ''
} ;
2013-10-09 18:44:03 +02:00
2013-10-05 11:03:51 +02:00
// We only handle one for everything but forward
settings . id = ( typeof _elems == 'undefined' ? '' : _elems [ 0 ] . id ) ;
2013-10-09 18:44:03 +02:00
2013-10-04 19:45:33 +02:00
switch ( _action . id )
2013-05-13 16:42:42 +02:00
{
2013-10-04 19:45:33 +02:00
case 'compose' :
if ( _elems . length == 1 )
{
2013-10-05 11:03:51 +02:00
//mail_parentRefreshListRowStyle(settings.id,settings.id);
2013-10-04 19:45:33 +02:00
}
else
{
return this . mail _compose ( 'forward' , _elems ) ;
}
break ;
case 'forward' :
case 'forwardinline' :
case 'forwardasattach' :
2013-10-08 16:23:46 +02:00
if ( _elems . length > 1 || _action . id == 'forwardasattach' )
2013-10-04 19:45:33 +02:00
{
2013-10-07 12:12:18 +02:00
var url = 'menuaction=mail.mail_compose.compose' ;
2013-10-04 19:45:33 +02:00
return this . mail _openComposeWindow ( url , _action . id == 'forwardasattach' , _elems ) ;
}
else
{
settings . from = 'forward' ;
settings . mode = 'forwardinline' ;
}
break ;
default :
// No further client side processing needed for these
settings . from = _action . id ;
2013-07-20 09:23:55 +02:00
}
2013-10-07 17:28:49 +02:00
var compose _list = egw . getOpenWindows ( "mail" , /^compose_/ ) ;
var window _name = 'compose_' + compose _list . length + '_' + ( settings . from || '' ) + '_' + settings . id ;
2013-10-07 12:12:18 +02:00
return egw ( ) . open ( '' , 'mail' , 'add' , settings , window _name , 'mail' ) ;
2013-10-04 19:45:33 +02:00
} ,
2013-10-09 18:44:03 +02:00
2013-10-07 12:12:18 +02:00
/ * *
* Set content into a compose window
2013-10-09 18:44:03 +02:00
*
2013-10-07 12:12:18 +02:00
* @ function
* @ memberOf mail
2013-10-09 18:44:03 +02:00
*
2013-10-07 12:12:18 +02:00
* @ param { String } window _name The name of an open content window .
* @ param content Data to set into the window ' s fields
* @ param content . to Addresses to add to the to line
* @ param content . cc Addresses to add to the CC line
* @ param content . bcc Addresses to add to the BCC line
2013-10-09 18:44:03 +02:00
*
2013-10-07 12:12:18 +02:00
* @ return { boolean } Success
* /
setCompose : function ( window _name , content )
{
// Get window
var compose = window . open ( '' , window _name ) ;
if ( ! compose || compose . closed ) return false ;
2013-10-09 18:44:03 +02:00
2013-10-07 12:12:18 +02:00
// Get etemplate of popup
var compose _et2 = compose . etemplate2 . getByApplication ( 'mail' ) ;
if ( ! compose _et2 || compose _et2 . length != 1 || ! compose _et2 [ 0 ] . widgetContainer )
{
return false ;
}
2013-10-09 18:44:03 +02:00
2013-10-07 12:12:18 +02:00
// Set each field provided
var success = true ;
for ( var field in content )
{
try
{
var widget = compose _et2 [ 0 ] . widgetContainer . getWidgetById ( field ) ;
2013-10-09 18:44:03 +02:00
2013-10-07 12:12:18 +02:00
// Merge array values, replace strings
var value = widget . getValue ( ) || content [ field ] ;
if ( jQuery . isArray ( value ) )
{
if ( jQuery . isArray ( content [ field ] ) )
{
value . concat ( content [ field ] ) ;
}
else
{
value . push ( content [ field ] ) ;
}
}
widget . set _value ( value ) ;
}
catch ( e )
{
egw . log ( "error" , "Unable to set field %s to '%s' in window '%s'" , field , content [ field ] , window _name ) ;
success = false ;
continue ;
}
}
return success ;
} ,
2013-08-21 12:47:20 +02:00
2013-07-20 09:23:55 +02:00
/ * *
* Compose , reply or forward a message
2013-07-25 17:35:44 +02:00
*
2013-07-20 09:23:55 +02:00
* @ param _url url to open
* @ param forwardByCompose boolean to decide about the method
* /
mail _openComposeWindow : function ( _url , forwardByCompose , _elems ) {
var Check = true ;
var alreadyAsked = false ;
var _messageList ;
var sMessageList = '' ;
// check if mailgrid exists, before accessing it
var cbAllVisibleMessages ;
2013-10-08 16:23:46 +02:00
var cbAllMessages = false ;
2013-07-20 09:23:55 +02:00
if ( typeof forwardByCompose == 'undefined' ) forwardByCompose = true ;
if ( forwardByCompose == false )
{
cbAllMessages = cbAllVisibleMessages = Check = false ;
}
if ( typeof prefAskForMultipleForward == 'undefined' ) prefAskForMultipleForward = egw . preference ( 'prefaskformultipleforward' , 'mail' ) ;
if ( cbAllMessages == true || cbAllVisibleMessages == true )
{
2013-10-07 18:53:13 +02:00
Check = confirm ( this . egw . lang ( 'multiple forward of all mesages' ) ) ;
2013-07-20 09:23:55 +02:00
alreadyAsked = true ;
}
if ( ( cbAllMessages == true || cbAllVisibleMessages == true ) && Check == true )
{
//_messageList = 'all'; // all is not supported by now, only visibly selected messages are chosen
_messageList = this . mail _getFormData ( _elems ) ;
}
else
{
if ( Check == true ) _messageList = this . mail _getFormData ( _elems ) ;
}
if ( typeof _messageList != 'undefined' )
{
for ( var i in _messageList [ 'msg' ] ) {
//alert('eigenschaft:'+_messageList['msg'][i]);
sMessageList = sMessageList + _messageList [ 'msg' ] [ i ] + ',' ;
//sMessageList.concat(',');
}
}
if ( prefAskForMultipleForward == 1 && Check == true && alreadyAsked == false && sMessageList . length > 0 && _messageList [ 'msg' ] . length > 1 )
{
2013-10-07 18:53:13 +02:00
askme = this . egw . lang ( 'multipleforward' ) ;
2013-07-20 09:23:55 +02:00
//if (cbAllMessages == true || cbAllVisibleMessages == true) askme = egw_appWindow('felamimail').lang_confirm_all_messages; // not supported
Check = confirm ( askme ) ;
}
//alert("Check:"+Check+" MessageList:"+sMessageList+"#");
if ( Check != true ) sMessageList = '' ; // deny the appending off selected messages to new compose -> reset the sMessageList
if ( Check == true || sMessageList == '' )
{
if ( sMessageList . length > 0 ) {
2013-10-08 16:23:46 +02:00
sMessageList = 'AsForward&from=forward&mode=asattach&reply_id=' + sMessageList . substring ( 0 , sMessageList . length - 1 ) ;
2013-07-20 09:23:55 +02:00
}
//alert(sMessageList);
2013-10-04 19:45:33 +02:00
egw _openWindowCentered ( window . egw _webserverUrl + '/index.php?' + _url + sMessageList , 'compose' , 870 , egw _getWindowOuterHeight ( ) ) ;
2013-05-13 16:42:42 +02:00
}
2013-07-20 09:23:55 +02:00
//ToDo: reset message selection
2013-05-13 16:42:42 +02:00
} ,
2013-05-27 15:48:55 +02:00
/ * *
* mail _disablePreviewArea - implementation of the disablePreviewArea action
2013-07-25 17:35:44 +02:00
*
2013-05-27 15:48:55 +02:00
* @ param _value
* /
mail _disablePreviewArea : function ( _value ) {
2013-10-18 11:58:25 +02:00
var splitter = this . et2 . getWidgetById ( 'mailSplitter' ) ;
2013-06-12 13:50:30 +02:00
if ( typeof splitter == 'undefined' || splitter == null ) return ;
2013-05-29 14:34:33 +02:00
var splitterDN = splitter . getDOMNode ( ) ;
2013-11-21 00:35:27 +01:00
if ( splitter . isDocked ( ) )
{
this . mail _previewAreaActive = false ;
}
2013-10-18 11:58:25 +02:00
//this.et2.getWidgetById('mailPreviewHeadersFrom').set_disabled(_value);
//this.et2.getWidgetById('mailPreviewHeadersTo').set_disabled(_value);
//this.et2.getWidgetById('mailPreviewHeadersDate').set_disabled(_value);
//this.et2.getWidgetById('mailPreviewHeadersSubject').set_disabled(_value);
this . et2 . getWidgetById ( 'mailPreview' ) . set _disabled ( _value ) ;
2013-05-27 15:48:55 +02:00
if ( _value == true )
{
2013-05-29 14:34:33 +02:00
if ( this . mail _previewAreaActive ) splitter . dock ( ) ;
this . mail _previewAreaActive = false ;
2013-07-25 17:35:44 +02:00
}
2013-05-27 15:48:55 +02:00
else
{
2013-05-29 14:34:33 +02:00
if ( ! this . mail _previewAreaActive ) splitter . undock ( ) ;
this . mail _previewAreaActive = true ;
2013-05-27 15:48:55 +02:00
}
} ,
2013-04-13 12:30:07 +02:00
/ * *
* mail _preview - implementation of the preview action
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param nextmatch et2 _nextmatch The widget whose row was selected
* @ param selected Array Selected row IDs . May be empty if user unselected all rows .
* /
2013-10-09 16:35:03 +02:00
mail _preview : function ( selected , nextmatch ) {
2013-07-17 14:01:01 +02:00
//console.log("mail_preview",nextmatch, selected);
2013-04-13 12:30:07 +02:00
// Empty values, just in case selected is empty (user cleared selection)
2013-12-17 09:47:16 +01:00
//dataElem.data is populated, when available with fromaddress(string),toaddress(string),additionaltoaddress(array),ccaddress (array)
2013-12-18 09:46:31 +01:00
var dataElem = { data : { subject : "" , fromaddress : "" , toaddress : "" , ccaddress : "" , date : "" , subject : "" , attachmentsBlock : "" } } ;
2013-06-04 17:29:53 +02:00
if ( typeof selected != 'undefined' && selected . length == 1 )
2013-02-19 17:30:59 +01:00
{
2013-05-21 10:46:54 +02:00
var _id = this . mail _fetchCurrentlyFocussed ( selected ) ;
2013-12-17 01:26:29 +01:00
dataElem = jQuery . extend ( dataElem , egw . dataGetUIDdata ( _id ) ) ;
2013-02-19 17:30:59 +01:00
}
2013-10-01 13:29:54 +02:00
//get_class does not exist yet
2013-10-18 11:58:25 +02:00
//var pAAClass = this.et2.getWidgetById('previewAttachmentArea').get_class();
2013-10-01 13:29:54 +02:00
//console.log(pAAClass);
2013-10-18 11:58:25 +02:00
if ( this . et2 . getWidgetById ( 'previewAttachmentArea' ) )
2013-10-05 18:36:20 +02:00
{
2013-10-18 11:58:25 +02:00
this . et2 . getWidgetById ( 'previewAttachmentArea' ) . set _class ( 'previewAttachmentArea' ) ;
2013-10-05 18:36:20 +02:00
}
else
{
return ;
}
2013-12-17 01:26:29 +01:00
// Widget ID:data key map of widgets we can directly set from cached data
var data _widgets = {
'previewFromAddress' : 'fromaddress' ,
'previewDate' : 'date' ,
'previewSubject' : 'subject'
} ;
// Set widget values from cached data
for ( var id in data _widgets )
{
var widget = this . et2 . getWidgetById ( id ) ;
if ( widget == null ) continue ;
widget . set _value ( dataElem . data [ data _widgets [ id ] ] || "" ) ;
}
2013-12-18 19:40:01 +01:00
2013-12-17 01:26:29 +01:00
// Leave if we're here and there is nothing selected, too many, or no data
2013-05-21 14:02:58 +02:00
if ( typeof selected == 'undefined' || selected . length == 0 || selected . length > 1 || typeof dataElem == 'undefined' )
2013-04-13 12:30:07 +02:00
{
2013-12-17 13:16:11 +01:00
if ( this . et2 . getWidgetById ( 'button[showAllAddresses]' ) ) this . et2 . getWidgetById ( 'button[showAllAddresses]' ) . set _class ( 'et2_button ui-button mail_DisplayNone' ) ;
2013-10-21 11:25:34 +02:00
this . et2 . getWidgetById ( 'previewAttachmentArea' ) . set _value ( { content : [ ] } ) ;
2013-10-18 11:58:25 +02:00
this . et2 . getWidgetById ( 'previewAttachmentArea' ) . set _class ( 'previewAttachmentArea noContent mail_DisplayNone' ) ;
var IframeHandle = this . et2 . getWidgetById ( 'messageIFRAME' ) ;
2013-04-30 16:16:52 +02:00
IframeHandle . set _src ( egw . link ( '/index.php' , { menuaction : 'mail.mail_ui.loadEmailBody' , _messageID : "" } ) ) ;
2013-05-27 15:48:55 +02:00
this . mail _disablePreviewArea ( true ) ;
2013-04-13 12:30:07 +02:00
return ;
}
2013-12-17 01:26:29 +01:00
2013-12-23 23:37:40 +01:00
// Set up additional content that can be expanded.
// We add a new URL widget for each address, so they get all the UI
2013-12-18 19:40:01 +01:00
// TO addresses have the first one split out, not all together
2013-12-17 01:26:29 +01:00
// list of keys:
2013-12-23 23:37:40 +01:00
var expand _content = [
{ build _children : true , data _one : 'toaddress' , data : 'additionaltoaddress' , widget : 'additionalToAddress' , line : 'mailPreviewHeadersTo' } ,
{ build _children : true , data : 'ccaddress' , widget : 'additionalCCAddress' , line : 'mailPreviewHeadersCC' } ,
{ build _children : false , data : 'attachmentsBlock' , widget : 'previewAttachmentArea' , line : 'mailPreviewHeadersAttachments' }
2013-12-17 01:26:29 +01:00
] ;
2013-12-23 23:37:40 +01:00
for ( var j = 0 ; j < expand _content . length ; j ++ )
2013-12-17 01:26:29 +01:00
{
2013-12-23 23:37:40 +01:00
var field = expand _content [ j ] || [ ] ;
var content = dataElem . data [ field . data ] || [ ] ;
2013-12-23 19:20:52 +01:00
// Add in single address, if there
2013-12-18 19:40:01 +01:00
if ( typeof field . data _one != 'undefined' )
{
2013-12-23 23:37:40 +01:00
content . unshift ( dataElem . data [ field . data _one ] ) ;
2013-12-23 19:20:52 +01:00
// Unique
2013-12-23 23:37:40 +01:00
content = content . filter ( function ( value , index , self ) {
2013-12-23 19:20:52 +01:00
return self . indexOf ( value ) === index ;
} ) ;
2013-12-18 19:40:01 +01:00
}
2013-12-17 01:26:29 +01:00
// Disable whole box if there are none
var line = this . et2 . getWidgetById ( field . line ) ;
2013-12-23 23:37:40 +01:00
if ( line != null ) line . set _disabled ( content . length == 0 ) ;
2013-12-17 01:26:29 +01:00
var widget = this . et2 . getWidgetById ( field . widget ) ;
if ( widget == null ) continue ;
2013-12-18 01:37:30 +01:00
$j ( widget . getDOMNode ( ) ) . removeClass ( 'visible' ) ;
2013-12-17 16:21:36 +01:00
2013-12-23 23:37:40 +01:00
// Programatically build the child elements
if ( field . build _children )
2013-12-17 01:26:29 +01:00
{
2013-12-23 23:37:40 +01:00
// Remove any existing
var children = widget . getChildren ( ) ;
for ( var i = children . length - 1 ; i >= 0 ; i -- )
{
children [ i ] . destroy ( ) ;
widget . removeChild ( children [ i ] ) ;
}
2013-12-17 01:26:29 +01:00
2013-12-23 23:37:40 +01:00
// Add for current record
for ( var i = 0 ; i < content . length ; i ++ )
{
var value = content [ i ] ;
var email = et2 _createWidget ( 'url-email' , { value : value , readonly : true } , widget ) ;
email . loadingFinished ( ) ;
}
}
else
2013-12-17 01:26:29 +01:00
{
2013-12-23 23:37:40 +01:00
widget . set _value ( { content : content } ) ;
2013-12-17 01:26:29 +01:00
}
2013-12-23 23:37:40 +01:00
// Show or hide button, as needed
2013-12-18 01:37:30 +01:00
line . iterateOver ( function ( button ) {
2013-12-23 23:37:40 +01:00
// Avoid binding to any child buttons
if ( button . getParent ( ) != line ) return ;
2013-12-23 19:20:52 +01:00
button . set _disabled (
// Disable if only 1 address
2013-12-23 23:37:40 +01:00
content . length <= 1 || (
// Disable if all content is visible
$j ( widget . getDOMNode ( ) ) . innerWidth ( ) >= widget . getDOMNode ( ) . scrollWidth &&
$j ( widget . getDOMNode ( ) ) . innerHeight ( ) >= widget . getDOMNode ( ) . scrollHeight )
2013-12-23 19:20:52 +01:00
) ;
2013-12-18 01:37:30 +01:00
} , this , et2 _button ) ;
2013-12-17 01:26:29 +01:00
}
2013-11-20 10:30:25 +01:00
//console.log("mail_preview",dataElem);
2014-01-13 15:22:58 +01:00
// Update the internal list of selected mails, if needed
if ( this . mail _selectedMails . indexOf ( _id ) < 0 )
{
this . mail _selectedMails . push ( _id ) ;
}
2013-05-27 15:48:55 +02:00
this . mail _disablePreviewArea ( false ) ;
2014-01-10 14:33:28 +01:00
var toolbaractions = ( ( typeof dataElem != 'undefined' && typeof dataElem . data != 'undefined' && typeof dataElem . data . toolbaractions != 'undefined' ) ? JSON . parse ( dataElem . data . toolbaractions ) : undefined ) ;
if ( toolbaractions ) this . et2 . getWidgetById ( 'toolbar' ) . set _actions ( toolbaractions ) ;
2013-10-18 11:58:25 +02:00
var IframeHandle = this . et2 . getWidgetById ( 'messageIFRAME' ) ;
2013-10-01 13:29:54 +02:00
//console.log(IframeHandle);
2013-04-13 12:30:07 +02:00
IframeHandle . set _src ( egw . link ( '/index.php' , { menuaction : 'mail.mail_ui.loadEmailBody' , _messageID : _id } ) ) ;
2013-06-05 12:41:38 +02:00
var messages = { } ;
messages [ 'msg' ] = [ _id ] ;
2014-01-13 15:22:58 +01:00
// When body is requested, mail is marked as read by the mail server. Update UI to match.
dataElem . data . flags . read = 'read' ;
2013-06-05 12:41:38 +02:00
this . mail _removeRowClass ( messages , 'unseen' ) ;
2013-04-13 12:30:07 +02:00
// var request = new egw_json_request('mail.mail_ui.ajax_loadEmailBody',[_id]);
// request.sendRequest(false);
} ,
2013-05-27 15:48:55 +02:00
2013-12-03 15:38:50 +01:00
/ * *
2013-12-23 23:37:40 +01:00
* If a preview header is partially hidden , this is the handler for clicking the
* expand button that shows all the content for that header .
* The button must be directly after the widget to be expanded in the template .
* The widget to be expended is set in the event data .
*
2013-12-03 15:38:50 +01:00
* requires : mainWindow , one mail selected for preview
2013-12-23 23:37:40 +01:00
*
* @ param { DOMNode } button
2013-12-03 15:38:50 +01:00
* /
2013-12-23 23:37:40 +01:00
showAllHeader : function ( button ) {
2013-12-18 01:37:30 +01:00
// Show list as a list
var list = jQuery ( button ) . prev ( ) ;
list . toggleClass ( 'visible' ) ;
// Revert if user clicks elsewhere
$j ( 'body' ) . one ( 'click' , list , function ( ev ) {
ev . data . removeClass ( 'visible' ) ;
2013-12-03 17:46:32 +01:00
} ) ;
2013-12-03 15:38:50 +01:00
} ,
2013-04-13 12:30:07 +02:00
mail _setMailBody : function ( content ) {
2013-07-17 14:01:01 +02:00
//console.log('mail_setMailBody',content);
2013-10-18 11:58:25 +02:00
var IframeHandle = this . et2 . getWidgetById ( 'messageIFRAME' ) ;
2013-04-13 12:30:07 +02:00
IframeHandle . set _value ( '' ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _refreshFolderStatus , function to call to read the counters of a folder and apply them
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _nodeID
* @ param mode
* /
2013-11-19 16:14:36 +01:00
mail _refreshFolderStatus : function ( _nodeID , mode , _refreshGridArea ) {
2014-01-09 09:36:22 +01:00
if ( typeof _nodeID != 'undefined' && typeof _nodeID [ _nodeID ] != 'undefined' && _nodeID [ _nodeID ] )
{
_refreshGridArea = _nodeID [ _refreshGridArea ] ;
mode = _nodeID [ mode ] ;
_nodeID = _nodeID [ _nodeID ] ;
}
2013-04-13 12:30:07 +02:00
var nodeToRefresh = 0 ;
var mode2use = "none" ;
2013-11-19 16:14:36 +01:00
if ( typeof _refreshGridArea == 'undefined' ) _refreshGridArea = true ;
2013-04-13 12:30:07 +02:00
if ( _nodeID ) nodeToRefresh = _nodeID ;
if ( mode ) {
if ( mode == "forced" ) { mode2use = mode ; }
}
try
{
2013-10-18 11:58:25 +02:00
var tree _wdg = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
var activeFolders = tree _wdg . getTreeNodeOpenItems ( nodeToRefresh , mode2use ) ;
//alert(activeFolders.join('#,#'));
this . mail _queueRefreshFolderList ( activeFolders ) ;
2013-11-19 16:14:36 +01:00
if ( _refreshGridArea )
{
this . mail _refreshQuotaDisplay ( ) ;
// maybe to use the mode forced as trigger for grid reload and using the grids own autorefresh
// would solve the refresh issue more accurately
//if (mode == "forced") this.mail_refreshMessageGrid();
this . mail _refreshMessageGrid ( ) ;
}
2013-12-09 10:57:03 +01:00
//the two lines below are not working yet.
//var no =tree_wdg.getSelectedNode();
//tree_wdg.focusItem(no.id);
2013-04-13 12:30:07 +02:00
} catch ( e ) { } // ignore the error; maybe the template is not loaded yet
} ,
2013-07-25 17:35:44 +02:00
2013-10-18 11:58:25 +02:00
/ * *
* mail _refreshQuotaDisplay , function to call to read the quota for the active server
*
* /
mail _refreshQuotaDisplay : function ( _server )
{
egw . json ( 'mail.mail_ui.ajax_refreshQuotaDisplay' , [ _server ] )
. sendRequest ( true ) ;
} ,
/ * *
* mail _setQuotaDisplay , function to call to read the quota for the active server
*
* /
mail _setQuotaDisplay : function ( _data )
{
//this.et2 should do the same as etemplate2.getByApplication('mail')[0].widgetContainer
var quotabox = this . et2 . getWidgetById ( this . nm _index + '[quotainpercent]' ) ;
//console.log(_data,quotabox);
//try to set it via set_value and set label
this . et2 . getWidgetById ( this . nm _index + '[quotainpercent]' ) . set _class ( _data . data . quotaclass ) ;
this . et2 . getWidgetById ( this . nm _index + '[quotainpercent]' ) . set _value ( _data . data . quotainpercent ) ;
this . et2 . getWidgetById ( this . nm _index + '[quotainpercent]' ) . set _label ( _data . data . quota ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Queues a refreshFolderList request for 1 ms . Actually this will just execute the
* code after the calling script has finished .
* /
mail _queueRefreshFolderList : function ( _folders )
2013-02-13 15:02:02 +01:00
{
2013-04-13 12:30:07 +02:00
this . mail _queuedFolders . push ( _folders ) ;
this . mail _queuedFoldersIndex ++ ;
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
// Copy idx onto the anonymous function scope
var idx = this . mail _queuedFoldersIndex ;
var self = this ;
window . setTimeout ( function ( ) {
if ( idx == self . mail _queuedFoldersIndex )
{
//var folders = mail_queuedFolders.join(",");
self . mail _queuedFoldersIndex = 0 ;
self . mail _queuedFolders = [ ] ;
2013-07-25 17:35:44 +02:00
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_setFolderStatus' , [ _folders ] )
. sendRequest ( true ) ;
2013-04-13 12:30:07 +02:00
}
} , 10 ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _setFolderStatus , function to set the status for the visible folders
* /
mail _setFolderStatus : function ( _status ) {
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-11-27 14:07:54 +01:00
for ( var i in _status ) {
ftree . setLabel ( i , _status [ i ] ) ;
//alert(i +'->'+_status[i]);
}
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-29 16:56:33 +02:00
/ * *
* mail _setLeaf , function to set the id and description for the folder given by status key
2013-05-07 10:26:17 +02:00
* @ param array _status status array with the required data ( new id , desc , old desc )
* key is the original id of the leaf to change
* multiple sets can be passed to mail _setLeaf
2013-04-29 16:56:33 +02:00
* /
mail _setLeaf : function ( _status ) {
//console.log('mail_setLeaf',_status);
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-05-07 10:26:17 +02:00
var selectedNode = ftree . getSelectedNode ( ) ;
2013-04-29 16:56:33 +02:00
for ( var i in _status )
{
2013-05-10 09:24:27 +02:00
// if olddesc is undefined or #skip# then skip the message, as we process subfolders
2014-01-13 14:06:29 +01:00
if ( typeof _status [ i ] [ 'olddesc' ] !== 'undefined' && _status [ i ] [ 'olddesc' ] !== '#skip-user-interaction-message#' ) egw _message ( this . egw . lang ( "Renamed Folder %1 to %2" , _status [ i ] [ 'olddesc' ] , _status [ i ] [ 'desc' ] ) ) ;
2013-04-29 16:56:33 +02:00
ftree . renameItem ( i , _status [ i ] [ 'id' ] , _status [ i ] [ 'desc' ] ) ;
//alert(i +'->'+_status[i]['id']+'+'+_status[i]['desc']);
2013-05-07 10:26:17 +02:00
if ( _status [ i ] [ 'id' ] == selectedNode . id )
{
2013-10-18 11:58:25 +02:00
var nm = this . et2 . getWidgetById ( this . nm _index ) ;
2013-05-07 10:26:17 +02:00
nm . activeFilters [ "selectedFolder" ] = _status [ i ] [ 'id' ] ;
nm . applyFilters ( ) ;
}
2013-04-29 16:56:33 +02:00
}
} ,
2013-05-13 16:42:42 +02:00
/ * *
* mail _removeLeaf , function to remove the leaf represented by the given ID
* @ param array _status status array with the required data ( KEY id , VALUE desc )
* key is the id of the leaf to delete
* multiple sets can be passed to mail _deleteLeaf
* /
2013-05-21 10:46:54 +02:00
mail _removeLeaf : function ( _status ) {
2013-07-17 14:01:01 +02:00
//console.log('mail_removeLeaf',_status);
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-05-13 16:42:42 +02:00
var selectedNode = ftree . getSelectedNode ( ) ;
for ( var i in _status )
{
// if olddesc is undefined or #skip# then skip the message, as we process subfolders
2014-01-13 14:06:29 +01:00
if ( typeof _status [ i ] !== 'undefined' && _status [ i ] !== '#skip-user-interaction-message#' ) egw _message ( this . egw . lang ( "Removed Folder %1 " , _status [ i ] ) ) ;
2013-05-13 16:42:42 +02:00
ftree . deleteItem ( i , ( selectedNode . id == i ) ) ;
var selectedNodeAfter = ftree . getSelectedNode ( ) ;
//alert(i +'->'+_status[i]['id']+'+'+_status[i]['desc']);
if ( selectedNodeAfter . id != selectedNode . id && selectedNode . id == i )
{
2013-10-18 11:58:25 +02:00
var nm = this . et2 . getWidgetById ( this . nm _index ) ;
2013-05-13 16:42:42 +02:00
nm . activeFilters [ "selectedFolder" ] = selectedNodeAfter . id ;
nm . applyFilters ( ) ;
}
}
} ,
2013-05-21 10:46:54 +02:00
/ * *
* mail _reloadNode , function to reload the leaf represented by the given ID
2014-01-11 12:58:31 +01:00
* @ param { Object . < string , string > | Object . < string , Object } } _status
* Object with the required data ( KEY id , VALUE desc ) , or ID => { new data }
2013-05-21 10:46:54 +02:00
* /
mail _reloadNode : function ( _status ) {
2013-07-17 14:01:01 +02:00
//console.log('mail_reloadNode',_status);
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-05-21 10:46:54 +02:00
var selectedNode = ftree . getSelectedNode ( ) ;
for ( var i in _status )
{
// if olddesc is undefined or #skip# then skip the message, as we process subfolders
2014-01-11 12:58:31 +01:00
if ( typeof _status [ i ] !== 'undefined' && _status [ i ] !== '#skip-user-interaction-message#' )
2013-05-21 10:46:54 +02:00
{
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( "Reloaded Folder %1 " , typeof _status [ i ] == "string" ? _status [ i ] : _status [ i ] . text ) ) ;
2013-05-21 10:46:54 +02:00
}
2014-01-11 12:58:31 +01:00
ftree . refreshItem ( i , typeof _status [ i ] == "object" ? _status [ i ] : null ) ;
}
var selectedNodeAfter = ftree . getSelectedNode ( ) ;
// If selected folder changed, refresh nextmatch
if ( selectedNodeAfter != null && selectedNodeAfter . id != selectedNode . id )
{
var nm = this . et2 . getWidgetById ( this . nm _index ) ;
nm . activeFilters [ "selectedFolder" ] = selectedNodeAfter . id ;
nm . applyFilters ( ) ;
2013-05-21 10:46:54 +02:00
}
} ,
2013-04-13 12:30:07 +02:00
/ * *
* mail _refreshMessageGrid , function to call to reread ofthe current folder
* /
2013-10-05 11:03:51 +02:00
mail _refreshMessageGrid : function ( _isPopup ) {
if ( typeof _isPopup == 'undefined' ) _isPopup = false ;
var nm ;
2013-10-14 15:30:04 +02:00
if ( _isPopup && ! this . mail _isMainWindow )
2013-10-05 11:03:51 +02:00
{
nm = window . opener . etemplate2 . getByApplication ( 'mail' ) [ 0 ] . widgetContainer . getWidgetById ( this . nm _index ) ;
}
else
{
2013-10-18 11:58:25 +02:00
nm = this . et2 . getWidgetById ( this . nm _index ) ;
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
nm . applyFilters ( ) ; // this should refresh the active folder
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _getMsg - gets the current Message
* @ return string
* /
mail _getMsg : function ( )
2013-02-13 15:02:02 +01:00
{
2013-10-18 11:58:25 +02:00
var msg _wdg = this . et2 . getWidgetById ( 'msg' ) ;
2013-04-13 12:30:07 +02:00
if ( msg _wdg )
{
return msg _wdg . valueOf ( ) . htmlNode [ 0 ] . innerHTML ;
}
return "" ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _setMsg - sets a Message , with the msg container , and controls if the container is enabled / disabled
* @ param string myMsg - the message
* /
mail _setMsg : function ( myMsg )
2013-02-13 15:02:02 +01:00
{
2013-10-18 11:58:25 +02:00
var msg _wdg = this . et2 . getWidgetById ( 'msg' ) ;
2013-04-13 12:30:07 +02:00
if ( msg _wdg )
{
msg _wdg . set _value ( myMsg ) ;
msg _wdg . set _disabled ( myMsg . trim ( ) . length == 0 ) ;
2013-02-28 10:28:08 +01:00
}
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Delete mails
* takes in all arguments
* @ param _action
* @ param _elems
* /
mail _delete : function ( _action , _elems )
2013-02-13 15:02:02 +01:00
{
2013-10-05 18:36:20 +02:00
var calledFromPopup = false ;
if ( typeof _elems == 'undefined' )
{
calledFromPopup = true ;
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 18:36:20 +02:00
}
2013-04-13 12:30:07 +02:00
var msg = this . mail _getFormData ( _elems ) ;
//alert(_action.id+','+ msg);
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( 'delete messages' ) ) ;
2013-10-05 18:36:20 +02:00
if ( ! calledFromPopup ) this . mail _setRowClass ( _elems , 'deleted' ) ;
this . mail _deleteMessages ( msg , 'no' , calledFromPopup ) ;
if ( calledFromPopup && this . mail _isMainWindow == false ) window . close ( ) ;
2013-05-27 15:48:55 +02:00
} ,
/ * *
* Delete mails - actually calls the backend function for deletion
* takes in all arguments
* @ param _msg - message list
* @ param _action - optional action
* /
2013-10-05 18:36:20 +02:00
mail _deleteMessages : function ( _msg , _action , _calledFromPopup )
2013-05-27 15:48:55 +02:00
{
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( 'delete messages' ) ) ;
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_deleteMessages' , [ _msg , ( typeof _action == 'undefined' ? 'no' : _action ) ] )
. sendRequest ( ) ;
2014-01-13 14:06:29 +01:00
} ,
/ * *
* Delete mails show result - called from the backend function for display of deletionmessages
* takes in all arguments
* @ param _msg - message list
* /
mail _deleteMessagesShowResult : function ( _msg )
{
var myMessage = _msg [ 'egw_message' ] ;
for ( var i = 0 ; i < _msg [ 'msg' ] . length ; i ++ )
{
egw _refresh ( myMessage , 'mail' , _msg [ 'msg' ] [ i ] . replace ( /mail::/ , '' ) , 'delete' ) ;
egw . dataDeleteUID ( _msg [ 'msg' ] [ i ] ) ;
}
//this.mail_refreshMessageGrid(_calledFromPopup);
2013-05-21 10:46:54 +02:00
this . mail _preview ( ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-05-27 15:48:55 +02:00
/ * *
* retry to Delete mails
* @ param responseObject - >
* reason - reason to report
* messageList
* /
mail _retryForcedDelete : function ( responseObject )
{
var reason = responseObject [ 'response' ] ;
var messageList = responseObject [ 'messageList' ] ;
Check = confirm ( reason ) ;
if ( Check == true )
{
this . mail _deleteMessages ( messageList , 'remove_immediately' ) ;
}
else
{
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( 'canceled deletion due to userinteraction' ) ) ;
2013-05-27 15:48:55 +02:00
this . mail _removeRowClass ( messageList , 'deleted' ) ;
}
this . mail _refreshMessageGrid ( ) ;
this . mail _preview ( ) ;
} ,
2013-04-13 12:30:07 +02:00
/ * *
* UnDelete mailMessages
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _messageList
* /
mail _undeleteMessages : function ( _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' ) ;
}
}
* /
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _emptyTrash
* /
mail _emptyTrash : function ( ) {
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( 'empty trash' ) ) ;
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_emptyTrash' )
. sendRequest ( true ) ;
2013-11-04 12:22:38 +01:00
this . mail _refreshFolderStatus ( ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _compressFolder
* /
mail _compressFolder : function ( ) {
2014-01-13 14:06:29 +01:00
egw _message ( this . egw . lang ( 'compress folder' ) ) ;
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_compressFolder' )
. sendRequest ( true ) ;
2013-11-04 12:22:38 +01:00
this . mail _refreshFolderStatus ( ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _changeProfile
* @ param folder , the ID of the selected Node - > should be an integer
* @ param _widget , handle to the tree widget
* /
mail _changeProfile : function ( folder , _widget ) {
// alert(folder);
2013-12-12 14:34:35 +01:00
egw _message ( this . egw . lang ( 'Connect to Profile %1' , _widget . getSelectedLabel ( ) ) ) ;
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_changeProfile' , [ folder ] )
. sendRequest ( ) ;
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
return true ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _changeFolder
* @ param folder , the ID of the selected Node
* @ param _widget , handle to the tree widget
* /
mail _changeFolder : function ( folder , _widget ) {
//alert('change Folder called:'+folder);
2013-10-18 11:58:25 +02:00
var server = folder . split ( '::' ) ;
2014-01-13 14:06:29 +01:00
( this . egw . lang ( 'change folder' ) + '...' , 'mail' ) ;
2013-04-13 12:30:07 +02:00
var img = _widget . getSelectedNode ( ) . images [ 0 ] ; // fetch first image
2013-12-12 14:34:35 +01:00
var profileChange = false ;
2013-04-13 12:30:07 +02:00
if ( ! ( img . search ( eval ( '/' + 'NoSelect' + '/' ) ) < 0 ) || ! ( img . search ( eval ( '/' + 'thunderbird' + '/' ) ) < 0 ) )
2013-02-20 12:31:57 +01:00
{
2013-04-13 12:30:07 +02:00
if ( ! ( img . search ( eval ( '/' + 'thunderbird' + '/' ) ) < 0 ) )
{
rv = this . mail _changeProfile ( folder , _widget ) ;
2013-12-12 14:34:35 +01:00
profileChange = true ;
2013-04-13 12:30:07 +02:00
}
2013-12-10 19:13:28 +01:00
else if ( _widget . event _args . length == 2 )
2013-02-20 12:31:57 +01:00
{
2013-04-13 12:30:07 +02:00
folder = _widget . event _args [ 1 ] ;
_widget . set _value ( folder ) ;
2013-02-20 12:31:57 +01:00
}
2013-04-13 12:30:07 +02:00
else
{
_widget . set _value ( '' ) ;
2013-07-25 17:35:44 +02:00
}
2013-02-20 12:31:57 +01:00
}
2013-08-21 12:47:20 +02:00
var nm = _widget . getRoot ( ) . getWidgetById ( this . nm _index ) ;
2013-12-10 19:13:28 +01:00
if ( nm )
2013-02-13 15:02:02 +01:00
{
2013-12-10 19:13:28 +01:00
nm . activeFilters [ 'selectedFolder' ] = folder ;
// Changing dataset entirely, force a reset
nm . controller . reset ( ) ;
}
displayname = _widget . getSelectedLabel ( ) ;
inBraket = displayname . search ( /\(/ ) ;
if ( inBraket != - 1 )
{
outBraket = displayname . search ( /\)/ ) ;
if ( outBraket != - 1 )
2013-04-13 12:30:07 +02:00
{
2013-12-10 19:13:28 +01:00
displayname = displayname . replace ( /\((.*?)\)/ , "" ) ;
displayname = displayname . replace ( /<b>/ , "" ) ;
displayname = displayname . replace ( /<\/b>/ , "" ) ;
2013-04-13 12:30:07 +02:00
}
2013-02-13 15:02:02 +01:00
}
2013-12-10 19:13:28 +01:00
myMsg = ( displayname ? displayname : folder ) + ' ' + this . egw . lang ( 'selected' ) ;
2013-12-12 14:34:35 +01:00
if ( profileChange == false ) egw _message ( myMsg ) ;
2013-12-17 16:21:36 +01:00
2013-05-28 16:10:17 +02:00
//mail_refreshMessageGrid();// its done in refreshFolderStatus already
2013-04-13 12:30:07 +02:00
this . mail _refreshFolderStatus ( folder , 'forced' ) ;
2013-10-18 11:58:25 +02:00
this . mail _refreshQuotaDisplay ( server [ 0 ] ) ;
2013-05-21 14:02:58 +02:00
this . mail _fetchCurrentlyFocussed ( null , true ) ;
2013-05-21 10:46:54 +02:00
this . mail _preview ( ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Flag mail as 'read' , 'unread' , 'flagged' or 'unflagged'
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action _action . id is 'read' , 'unread' , 'flagged' or 'unflagged'
* @ param _elems
* /
mail _flag : function ( _action , _elems )
2013-02-13 15:02:02 +01:00
{
2013-10-05 11:03:51 +02:00
var do _nmactions = true ;
var msg ;
if ( typeof _elems == 'undefined' )
{
do _nmactions = false ; //indicates that this action is probably a popup?
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
msg = { } ;
msg [ 'msg' ] = [ this . et2 . getArrayMgr ( 'content' ) . getEntry ( 'mail_id' ) || '' ] ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
msg = { } ;
msg [ 'msg' ] = [ this . mail _currentlyFocussed ] ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//alert(_action.id+' - '+_elems[0].id);
2013-10-04 11:33:44 +02:00
//console.log(_action, _elems);
2013-12-06 11:35:39 +01:00
var classToProcess = _action . id ;
if ( _action . id == 'read' ) classToProcess = 'seen' ;
else if ( _action . id == 'label1' ) classToProcess = 'labelone' ;
else if ( _action . id == 'label2' ) classToProcess = 'labeltwo' ;
else if ( _action . id == 'label3' ) classToProcess = 'labelthree' ;
else if ( _action . id == 'label4' ) classToProcess = 'labelfour' ;
else if ( _action . id == 'label5' ) classToProcess = 'labelfive' ;
2013-10-05 11:03:51 +02:00
if ( do _nmactions )
{
msg = this . mail _getFormData ( _elems ) ;
if ( _action . id . substring ( 0 , 2 ) == 'un' ) {
2013-12-06 11:35:39 +01:00
//old style, only available for undelete and unlabel (no toggle)
if ( _action . id == 'unlabel' ) // this means all labels should be removed
{
var labels = [ 'labelone' , 'labeltwo' , 'labelthree' , 'labelfour' , 'labelfive' ] ;
for ( i = 0 ; i < labels . length ; i ++ ) this . mail _removeRowClass ( _elems , labels [ i ] ) ;
this . mail _flagMessages ( _action . id , msg , ( do _nmactions ? false : true ) ) ;
}
else
{
this . mail _removeRowClass ( _elems , _action . id . substring ( 2 ) ) ;
this . mail _setRowClass ( _elems , _action . id ) ;
this . mail _flagMessages ( _action . id , msg , ( do _nmactions ? false : true ) ) ;
}
2013-10-05 11:03:51 +02:00
}
else
{
2013-12-06 11:35:39 +01:00
var msg _set = { msg : [ ] } ;
var msg _unset = { msg : [ ] } ;
var dataElem ;
var flags ;
2014-01-13 15:22:58 +01:00
var classes = '' ;
2013-12-06 11:35:39 +01:00
for ( i = 0 ; i < msg . msg . length ; i ++ )
{
dataElem = egw . dataGetUIDdata ( msg . msg [ i ] ) ;
2014-01-13 15:22:58 +01:00
if ( typeof dataElem . data . flags == 'undefined' )
{
dataElem . data . flags = { } ;
}
2013-12-06 11:35:39 +01:00
flags = dataElem . data . flags ;
2014-01-13 15:22:58 +01:00
classes = dataElem . data . class || "" ;
classes = classes . split ( ' ' ) ;
2013-12-06 11:35:39 +01:00
// since we toggle we need to unset the ones already set, and set the ones not set
2014-01-13 15:22:58 +01:00
// flags is data, UI is done by class, so update both
// Flags are there or not, class names are flag or 'un'+flag
if ( classes . indexOf ( classToProcess ) >= 0 )
{
classes . splice ( classes . indexOf ( classToProcess ) , 1 ) ;
}
if ( classes . indexOf ( 'un' + classToProcess ) >= 0 )
{
classes . splice ( classes . indexOf ( 'un' + classToProcess ) , 1 ) ;
}
2013-12-06 11:35:39 +01:00
if ( flags [ _action . id ] )
{
msg _unset [ 'msg' ] . push ( msg . msg [ i ] ) ;
2014-01-13 15:22:58 +01:00
classes . push ( 'un' + classToProcess ) ;
delete flags [ _action . id ] ;
2013-12-06 11:35:39 +01:00
}
else
{
msg _set [ 'msg' ] . push ( msg . msg [ i ] ) ;
2014-01-13 15:22:58 +01:00
flags [ _action . id ] = _action . id ;
classes . push ( classToProcess ) ;
2013-12-06 11:35:39 +01:00
}
2014-01-13 15:22:58 +01:00
// Update cache & call callbacks - updates list
dataElem . data . class = classes . join ( ' ' ) ;
egw . dataStoreUID ( msg . msg [ i ] , dataElem . data ) ;
2013-12-06 11:35:39 +01:00
}
2014-01-13 15:22:58 +01:00
// Notify server of changes
2013-12-06 11:35:39 +01:00
if ( msg _unset [ 'msg' ] && msg _unset [ 'msg' ] . length )
{
2014-01-13 15:22:58 +01:00
this . mail _flagMessages ( 'un' + _action . id , msg _unset ) ;
2013-12-06 11:35:39 +01:00
}
if ( msg _set [ 'msg' ] && msg _set [ 'msg' ] . length )
{
2014-01-13 15:22:58 +01:00
this . mail _flagMessages ( _action . id , msg _set ) ;
2013-12-06 11:35:39 +01:00
}
2014-01-13 15:22:58 +01:00
// No further update needed
return ;
2013-10-05 11:03:51 +02:00
}
2013-10-04 11:33:44 +02:00
}
else
{
2013-12-05 16:09:35 +01:00
this . mail _flagMessages ( _action . id , msg , ( do _nmactions ? false : true ) ) ;
2013-10-04 11:33:44 +02:00
}
2013-11-04 12:22:38 +01:00
this . mail _refreshFolderStatus ( ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Flag mail as 'read' , 'unread' , 'flagged' or 'unflagged'
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action _action . id is 'read' , 'unread' , 'flagged' or 'unflagged'
* @ param _elems
* /
2014-01-13 15:22:58 +01:00
mail _flagMessages : function ( _flag , _elems , _isPopup )
2013-02-19 17:30:59 +01:00
{
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_flagMessages' , [ _flag , _elems ] )
2014-01-13 15:22:58 +01:00
. sendRequest ( true ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* display header lines , or source of mail , depending on the url given
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _url
* /
mail _displayHeaderLines : function ( _url ) {
// only used by right clickaction
2013-10-01 13:29:54 +02:00
egw _openWindowCentered ( _url , 'mail_display_headerLines' , '870' , '600' , window . outerWidth / 2 , window . outerHeight / 2 ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* View header of a message
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _header : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//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 ;
this . mail _displayHeaderLines ( url ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* View message source
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _mailsource : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//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' ;
this . mail _displayHeaderLines ( url ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Save a message
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _save : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//alert('mail_save('+_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 ;
//window.open(url,'_blank','dependent=yes,width=100,height=100,scrollbars=yes,status=yes');
document . location = url ;
} ,
2013-07-25 17:35:44 +02:00
2013-07-19 17:13:01 +02:00
/ * *
* User clicked an address ( FROM , TO , etc )
2013-10-16 13:22:53 +02:00
*
2013-10-09 19:29:36 +02:00
* @ param object tag _info with values for attributes id , label , title , ...
* @ param et2 _taglist widget
2013-07-19 17:13:01 +02:00
* /
2013-10-09 19:29:36 +02:00
address _click : function ( tag _info , widget )
2013-07-19 17:13:01 +02:00
{
console . log ( this , arguments ) ;
} ,
2013-07-25 17:35:44 +02:00
2013-10-16 13:25:46 +02:00
/ * *
2013-11-03 11:24:09 +01:00
*
2013-10-16 13:25:46 +02:00
* /
displayAttachment : function ( tag _info , widget )
{
//console.log(this, arguments, widget);
2013-10-21 15:07:32 +02:00
var mailid ;
var attgrid ;
if ( this . mail _isMainWindow )
{
mailid = this . mail _currentlyFocussed ; //this.et2.getArrayMgr("content").getEntry('mail_id');
var p = widget . getParent ( ) ;
var cont = p . getArrayMgr ( "content" ) . data ;
attgrid = cont [ widget . id . replace ( /\[filename\]/ , '' ) ] ;
}
else
{
mailid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) ;
attgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_displayattachments' ) [ widget . id . replace ( /\[filename\]/ , '' ) ] ;
}
2013-10-16 13:25:46 +02:00
//console.log(mailid,attgrid.partID,attgrid.filename,attgrid.mimetype);
var url = window . egw _webserverUrl + '/index.php?' ;
var width ;
var height ;
var windowName = 'mail' ;
switch ( attgrid . type . toUpperCase ( ) )
{
case 'MESSAGE/RFC822' :
url += 'menuaction=mail.mail_ui.displayMessage' ; // todo compose for Draft folder
url += '&id=' + mailid ;
url += '&part=' + attgrid . partID ;
url += '&is_winmail=' + attgrid . winmailFlag ;
windowName = windowName + 'displayMessage_' + mailid + '_' + attgrid . partID ;
width = 870 ;
height = egw _getWindowOuterHeight ( ) ;
break ;
case 'IMAGE/JPEG' :
case 'IMAGE/PNG' :
case 'IMAGE/GIF' :
case 'IMAGE/BMP' :
case 'APPLICATION/PDF' :
case 'TEXT/PLAIN' :
case 'TEXT/HTML' :
case 'TEXT/DIRECTORY' :
/ *
$sfxMimeType = $value [ 'mimeType' ] ;
$buff = explode ( '.' , $value [ 'name' ] ) ;
$suffix = '' ;
if ( is _array ( $buff ) ) $suffix = array _pop ( $buff ) ; // take the last extension to check with ext2mime
if ( ! empty ( $suffix ) ) $sfxMimeType = mime _magic : : ext2mime ( $suffix ) ;
if ( strtoupper ( $sfxMimeType ) == 'TEXT/VCARD' || strtoupper ( $sfxMimeType ) == 'TEXT/X-VCARD' )
{
$attachments [ $key ] [ 'mimeType' ] = $sfxMimeType ;
$value [ 'mimeType' ] = strtoupper ( $sfxMimeType ) ;
}
* /
case 'TEXT/X-VCARD' :
case 'TEXT/VCARD' :
case 'TEXT/CALENDAR' :
case 'TEXT/X-VCALENDAR' :
url += 'menuaction=mail.mail_ui.getAttachment' ; // todo compose for Draft folder
url += '&id=' + mailid ;
url += '&part=' + attgrid . partID ;
url += '&is_winmail=' + attgrid . winmailFlag ;
windowName = windowName + 'displayAttachment_' + mailid + '_' + attgrid . partID ;
var reg = '800x600' ;
var reg2 ;
// handle calendar/vcard
if ( attgrid . type . toUpperCase ( ) == 'TEXT/CALENDAR' )
{
windowName = 'maildisplayEvent_' + mailid + '_' + attgrid . partID ;
reg2 = egw . link _get _registry ( 'calendar' ) ;
if ( typeof app _registry [ 'view' ] != 'undefined' && typeof app _registry [ 'view_popup' ] != 'undefined' )
{
reg = app _registry [ 'view_popup' ] ;
}
}
if ( attgrid . type . toUpperCase ( ) == 'TEXT/X-VCARD' || attgrid . type . toUpperCase ( ) == 'TEXT/VCARD' )
{
windowName = 'maildisplayContact_' + mailid + '_' + attgrid . partID ;
reg2 = egw . link _get _registry ( 'addressbook' ) ;
if ( typeof app _registry [ 'add' ] != 'undefined' && typeof app _registry [ 'add_popup' ] != 'undefined' )
{
reg = app _registry [ 'add_popup' ] ;
}
}
var w _h = reg . split ( 'x' ) ;
width = w _h [ 0 ] ;
height = w _h [ 1 ] ;
break ;
default :
url += 'menuaction=mail.mail_ui.getAttachment' ; // todo compose for Draft folder
url += '&id=' + mailid ;
url += '&part=' + attgrid . partID ;
url += '&is_winmail=' + attgrid . winmailFlag ;
windowName = windowName + 'displayAttachment_' + mailid + '_' + attgrid . partID ;
width = 870 ;
height = 600 ;
//document.location = url;
//return;
}
egw _openWindowCentered ( url , windowName , width , height ) ;
} ,
saveAttachment : function ( tag _info , widget )
{
//console.log(this, arguments);
2013-10-21 15:07:32 +02:00
var mailid ;
var attgrid ;
if ( this . mail _isMainWindow )
{
mailid = this . mail _currentlyFocussed ; //this.et2.getArrayMgr("content").getEntry('mail_id');
var p = widget . getParent ( ) ;
var cont = p . getArrayMgr ( "content" ) . data ;
attgrid = cont [ widget . id . replace ( /\[save\]/ , '' ) ] ;
}
else
{
mailid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) ;
attgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_displayattachments' ) [ widget . id . replace ( /\[save\]/ , '' ) ] ;
}
2013-10-16 13:25:46 +02:00
//console.log(mailid,attgrid.partID,attgrid.filename,attgrid.mimetype);
var url = window . egw _webserverUrl + '/index.php?' ;
var width ;
var height ;
var windowName = 'mail' ;
url += 'menuaction=mail.mail_ui.getAttachment' ; // todo compose for Draft folder
url += '&mode=save' ;
url += '&id=' + mailid ;
url += '&part=' + attgrid . partID ;
url += '&is_winmail=' + attgrid . winmailFlag ;
document . location = url ;
} ,
saveAttachmentToVFS : function ( tag _info , widget )
{
//console.log(this, arguments);
2013-10-21 15:07:32 +02:00
var mailid ;
var attgrid ;
if ( this . mail _isMainWindow )
{
mailid = this . mail _currentlyFocussed ; //this.et2.getArrayMgr("content").getEntry('mail_id');
var p = widget . getParent ( ) ;
var cont = p . getArrayMgr ( "content" ) . data ;
attgrid = cont [ widget . id . replace ( /\[saveAsVFS\]/ , '' ) ] ;
}
else
{
mailid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) ;
attgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_displayattachments' ) [ widget . id . replace ( /\[saveAsVFS\]/ , '' ) ] ;
}
2013-10-16 13:25:46 +02:00
//console.log(mailid,attgrid.partID,attgrid.filename,attgrid.mimetype);
var url = window . egw _webserverUrl + '/index.php?' ;
var width = 640 ;
var height = 570 ;
var windowName = 'mail' ;
url += 'menuaction=filemanager.filemanager_select.select' ; // todo compose for Draft folder
url += '&mode=saveas' ;
url += '&id=' + mailid + '::' + attgrid . partID + '::' + attgrid . winmailFlag ;
url += '&name=' + attgrid . filename ;
url += '&type=' + attgrid . type . toLowerCase ( ) ;
url += '&method=mail.mail_ui.vfsSaveAttachment' ;
url += '&label=' + egw . lang ( 'Save' ) ;
egw _openWindowCentered ( url , windowName , width , height ) ;
} ,
saveAllAttachmentsToVFS : function ( tag _info , widget )
{
2013-10-21 15:07:32 +02:00
var mailid ;
var attgrid ;
if ( this . mail _isMainWindow )
{
mailid = this . mail _currentlyFocussed ; //this.et2.getArrayMgr("content").getEntry('mail_id');
var p = widget . getParent ( ) ;
attgrid = p . getArrayMgr ( "content" ) . data ;
}
else
{
mailid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) ;
attgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_displayattachments' ) ;
}
2013-10-16 13:25:46 +02:00
console . log ( mailid , attgrid ) ;
var url = window . egw _webserverUrl + '/index.php?' ;
var width = 640 ;
var height = 570 ;
var windowName = 'mail' ;
url += 'menuaction=filemanager.filemanager_select.select' ; // todo compose for Draft folder
url += '&mode=select-dir' ;
url += '&method=mail.mail_ui.vfsSaveAttachment' ;
url += '&label=' + egw . lang ( 'Save all' ) ;
for ( i = 0 ; i < attgrid . length ; i ++ )
{
if ( attgrid [ i ] != null ) url += '&id[' + i + ']=' + mailid + '::' + attgrid [ i ] . partID + '::' + attgrid [ i ] . winmailFlag + '::' + attgrid [ i ] . filename ;
}
egw _openWindowCentered ( url , windowName , width , height ) ;
} ,
2013-04-13 12:30:07 +02:00
/ * *
* Save a message to filemanager
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _save2fm : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
var _id = _elems [ 0 ] . id ;
var dataElem = egw . dataGetUIDdata ( _id ) ;
var url = window . egw _webserverUrl + '/index.php?' ;
url += 'menuaction=filemanager.filemanager_select.select' ; // todo compose for Draft folder
url += '&mode=saveas' ;
var filename = dataElem . data . subject . replace ( /[\f\n\t\v/\\:*#?<>\|]/g , "_" ) ;
url += '&name=' + encodeURIComponent ( filename + '.eml' ) ;
url += '&mime=message' + encodeURIComponent ( '/' ) + 'rfc822' ;
url += '&method=mail.mail_ui.vfsSaveMessage'
url += '&id=' + _elems [ 0 ] . id ;
url += '&label=Save' ;
//window.open(url,'_blank','dependent=yes,width=100,height=100,scrollbars=yes,status=yes')
//document.location = url;
egw _openWindowCentered ( url , 'vfs_save_message_' + _elems [ 0 ] . id , '640' , '570' , window . outerWidth / 2 , window . outerHeight / 2 ) ;
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Save message as InfoLog
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _elems _elems [ 0 ] . id is the row - id
* /
mail _infolog : function ( _action , _elems )
2013-02-19 17:30:59 +01:00
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
if ( typeof _action . data . width == 'undefined' && typeof _action . data . height == 'undefined' && ! ( typeof _action . data . event == 'undefined' && typeof _action . data . event . popup == 'undefined' ) )
{
if ( _action . data . event . popup )
{
var app _registry = _action . data . event . popup ;
}
else
{
var app _registry = egw . link _get _registry ( 'infolog' ) ; //this.appname);
}
//console.log(app_registry);
if ( typeof app _registry [ 'edit' ] != 'undefined' && typeof app _registry [ 'edit_popup' ] != 'undefined' )
{
var w _h = app _registry [ 'edit_popup' ] . split ( 'x' ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//alert('mail_infolog('+_elems[0].id+')');return;
2013-10-16 13:25:46 +02:00
//console.log(_action, _elems);
2013-04-13 12:30:07 +02:00
var url = window . egw _webserverUrl + '/index.php?' ;
url += 'menuaction=infolog.infolog_ui.import_mail' ; // todo compose for Draft folder
url += '&rowid=' + _elems [ 0 ] . id ;
2013-10-14 15:30:04 +02:00
egw _openWindowCentered ( url , 'import_mail_' + _elems [ 0 ] . id , ( _action . data . width ? _action . data . width : w _h [ 0 ] ) , ( _action . data . height ? _action . data . height : w _h [ 1 ] ) ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* Save message as ticket
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action _action . id is 'read' , 'unread' , 'flagged' or 'unflagged'
* @ param _elems
* /
mail _tracker : function ( _action , _elems )
{
2013-10-05 11:03:51 +02:00
if ( typeof _elems == 'undefined' )
{
if ( this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) )
{
var _elems = [ ] ;
_elems . push ( { id : this . et2 . getArrayMgr ( "content" ) . getEntry ( 'mail_id' ) || '' } ) ;
}
2013-10-14 15:30:04 +02:00
if ( typeof _elems == 'undefined' && this . mail _isMainWindow )
{
if ( this . mail _currentlyFocussed )
{
var _elems = [ ] ;
_elems . push ( { id : this . mail _currentlyFocussed } ) ;
}
}
if ( typeof _action . data . width == 'undefined' && typeof _action . data . height == 'undefined' && ! ( typeof _action . data . event == 'undefined' && typeof _action . data . event . popup == 'undefined' ) )
{
if ( _action . data . event . popup )
{
var app _registry = _action . data . event . popup ;
}
else
{
var app _registry = egw . link _get _registry ( 'infolog' ) ; //this.appname);
}
//console.log(app_registry);
if ( typeof app _registry [ 'edit' ] != 'undefined' && typeof app _registry [ 'edit_popup' ] != 'undefined' )
{
var w _h = app _registry [ 'edit_popup' ] . split ( 'x' ) ;
}
}
2013-10-05 11:03:51 +02:00
}
2013-04-13 12:30:07 +02:00
//alert('mail_tracker('+_elems[0].id+')');
var url = window . egw _webserverUrl + '/index.php?' ;
url += 'menuaction=tracker.tracker_ui.import_mail' ; // todo compose for Draft folder
url += '&rowid=' + _elems [ 0 ] . id ;
2013-10-14 15:30:04 +02:00
egw _openWindowCentered ( url , 'import_tracker_' + _elems [ 0 ] . id , ( _action . data . width ? _action . data . width : w _h [ 0 ] ) , ( _action . data . height ? _action . data . height : w _h [ 1 ] ) ) ;
2013-04-13 12:30:07 +02:00
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _getFormData
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _actionObjects , the senders
* @ return structured array of message ids : array ( msg => message - ids )
* /
mail _getFormData : function ( _actionObjects ) {
var messages = { } ;
if ( _actionObjects . length > 0 )
2013-02-19 17:30:59 +01:00
{
2013-04-13 12:30:07 +02:00
messages [ 'msg' ] = [ ] ;
2013-02-19 17:30:59 +01:00
}
2013-07-25 17:35:44 +02:00
2013-04-30 16:16:52 +02:00
for ( var i = 0 ; i < _actionObjects . length ; i ++ )
2013-02-28 10:28:08 +01:00
{
2013-04-13 12:30:07 +02:00
if ( _actionObjects [ i ] . id . length > 0 )
{
messages [ 'msg' ] [ i ] = _actionObjects [ i ] . id ;
}
2013-02-28 10:28:08 +01:00
}
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
return messages ;
} ,
2013-07-25 17:35:44 +02:00
2013-04-13 12:30:07 +02:00
/ * *
* mail _setRowClass
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _actionObjects , the senders
* /
mail _setRowClass : function ( _actionObjects , _class ) {
if ( typeof _class == 'undefined' ) return false ;
2013-07-25 17:35:44 +02:00
2013-12-06 11:35:39 +01:00
if ( typeof _actionObjects [ 'msg' ] == 'undefined' )
2013-04-13 12:30:07 +02:00
{
2013-12-06 11:35:39 +01:00
for ( var i = 0 ; i < _actionObjects . length ; i ++ )
{
if ( _actionObjects [ i ] . id . length > 0 )
{
var dataElem = $j ( _actionObjects [ i ] . iface . getDOMNode ( ) ) ;
dataElem . addClass ( _class ) ;
}
}
}
else
{
for ( var i = 0 ; i < _actionObjects [ 'msg' ] . length ; i ++ )
2013-04-13 12:30:07 +02:00
{
2014-01-13 15:22:58 +01:00
var mail _uid = _actionObjects [ 'msg' ] [ i ] ;
2013-07-25 17:35:44 +02:00
2014-01-13 15:22:58 +01:00
// Get the record from data cache
var dataElem = egw . dataGetUIDdata ( mail _uid ) ;
if ( dataElem == null || typeof dataElem == undefined )
{
// Unknown ID, nothing to update
return ;
2013-12-06 11:35:39 +01:00
}
2014-01-13 15:22:58 +01:00
// Update class
dataElem . data . class += ' ' + _class ;
// Update record, which updates all listeners (including nextmatch)
egw . dataStoreUID ( mail _uid , dataElem . data ) ;
2013-04-13 12:30:07 +02:00
}
}
} ,
2013-07-25 17:35:44 +02:00
2013-05-27 15:48:55 +02:00
/ * *
2014-01-13 15:22:58 +01:00
* mail _removeRowFlag
* Removes a flag and updates the CSS class . Updates the UI , but not the server .
2013-07-25 17:35:44 +02:00
*
2013-05-27 15:48:55 +02:00
* @ param _actionObjects , the senders , or a messages object
* @ param _class , the class to be removed
* /
mail _removeRowClass : function ( _actionObjects , _class ) {
if ( typeof _class == 'undefined' ) return false ;
if ( typeof _actionObjects [ 'msg' ] == 'undefined' )
{
2013-07-25 17:35:44 +02:00
for ( var i = 0 ; i < _actionObjects . length ; i ++ )
2013-05-27 15:48:55 +02:00
{
if ( _actionObjects [ i ] . id . length > 0 )
{
var dataElem = $j ( _actionObjects [ i ] . iface . getDOMNode ( ) ) ;
dataElem . removeClass ( _class ) ;
2013-07-25 17:35:44 +02:00
2013-05-27 15:48:55 +02:00
}
}
}
else
{
2013-07-25 17:35:44 +02:00
for ( var i = 0 ; i < _actionObjects [ 'msg' ] . length ; i ++ )
2013-05-27 15:48:55 +02:00
{
2014-01-13 15:22:58 +01:00
var mail _uid = _actionObjects [ 'msg' ] [ i ] ;
// Get the record from data cache
var dataElem = egw . dataGetUIDdata ( mail _uid ) ;
if ( dataElem == null || typeof dataElem == undefined )
2013-05-27 15:48:55 +02:00
{
2014-01-13 15:22:58 +01:00
// Unknown ID, nothing to update
return ;
}
2013-07-25 17:35:44 +02:00
2014-01-13 15:22:58 +01:00
// Update class
var classes = dataElem . data . class || "" ;
classes = classes . split ( ' ' ) ;
if ( classes . indexOf ( _class ) >= 0 )
{
classes . splice ( classes . indexOf ( _class ) , 1 ) ;
dataElem . data . class = classes . join ( ' ' ) ;
// Update record, which updates all listeners (including nextmatch)
egw . dataStoreUID ( mail _uid , dataElem . data ) ;
2013-07-25 17:35:44 +02:00
}
2013-05-27 15:48:55 +02:00
}
}
} ,
2013-04-13 12:30:07 +02:00
// Tree widget stubs
/ * *
* mail _dragStart - displays information while dragging
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param action
* @ param _senders - the representation of the elements dragged
* @ return the ddhelper
* /
mail _dragStart : function ( action , _senders ) {
//console.log(action,_senders);
return $j ( "<div class=\"ddhelper\">" + _senders . length + " Mails selected </div>" ) ;
} ,
/ * *
* mail _move - implementation of the move action from drag n drop
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _senders - the representation of the elements dragged
* @ param _target - the representation of the target
* /
mail _move : function ( _action , _senders , _target ) {
//console.log(_action,_senders,_target);
var target = _action . id == 'drop_move_mail' ? _target . iface . id : _action . id . substr ( 5 ) ;
var messages = this . mail _getFormData ( _senders ) ;
//alert('mail_move('+messages.msg.join(',')+' --> '+target+')');
// TODO: Write move/copy function which cares about doing the same stuff
// as the "onNodeSelect" function!
2013-12-18 11:27:27 +01:00
egw . json ( 'mail.mail_ui.ajax_copyMessages' , [ target , messages , 'move' ] )
2013-09-10 22:41:18 +02:00
. sendRequest ( ) ;
2013-10-18 11:58:25 +02:00
var nm = this . et2 . getWidgetById ( this . nm _index ) ;
2013-06-04 17:29:53 +02:00
this . mail _setRowClass ( _senders , 'deleted' ) ;
nm . refresh ( messages [ 'msg' ] , 'delete' )
//for (var i = 0; i < messages['msg'].length; i++) egw.dataDeleteUID(messages['msg'][i]);
2013-04-13 12:30:07 +02:00
this . mail _refreshMessageGrid ( ) ;
} ,
/ * *
* mail _copy - implementation of the copy action from drag n drop
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _senders - the representation of the elements dragged
* @ param _target - the representation of the target
* /
mail _copy : function ( _action , _senders , _target ) {
//console.log(_action,_senders,_target);
2013-04-29 16:56:33 +02:00
var target = _action . id == 'drop_copy_mail' ? _target . iface . id : _action . id . substr ( 5 ) ;
2013-04-13 12:30:07 +02:00
var messages = this . mail _getFormData ( _senders ) ;
//alert('mail_copy('+messages.msg.join(',')+' --> '+target+')');
// TODO: Write move/copy function which cares about doing the same stuff
// as the "onNodeSelect" function!
2013-09-10 22:41:18 +02:00
egw . json ( 'mail.mail_ui.ajax_copyMessages' , [ target , messages ] )
. sendRequest ( ) ;
2013-04-13 12:30:07 +02:00
this . mail _refreshMessageGrid ( ) ;
} ,
2013-05-21 10:46:54 +02:00
/ * *
* mail _AddFolder - implementation of the AddFolder action of right click options on the tree
2013-07-25 17:35:44 +02:00
*
2013-05-21 10:46:54 +02:00
* @ param _action
* @ param _senders - the representation of the tree leaf to be manipulated
* /
mail _AddFolder : function ( action , _senders ) {
//console.log(action,_senders);
//action.id == 'add'
//_senders.iface.id == target leaf / leaf to edit
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-05-21 10:46:54 +02:00
OldFolderName = ftree . getLabel ( _senders [ 0 ] . iface . id ) ;
if ( jQuery ( OldFolderName ) . text ( ) . length > 0 ) OldFolderName = jQuery ( OldFolderName ) . text ( ) ;
OldFolderName = OldFolderName . trim ( ) ;
OldFolderName = OldFolderName . replace ( /\([0-9]*\)/g , '' ) . trim ( ) ;
//console.log(OldFolderName);
2013-12-12 16:44:47 +01:00
var buttons = [
{ text : this . egw . lang ( "Add" ) , id : "add" , class : "ui-priority-primary" , "default" : true } ,
{ text : this . egw . lang ( "Cancel" ) , id : "cancel" } ,
] ;
var dialog = et2 _dialog . show _prompt ( function ( _button _id , _value ) {
var senders = this . my _data . data ;
var NewFolderName = null ;
if ( _value . length > 0 ) NewFolderName = _value ;
//alert(NewFolderName);
if ( NewFolderName && NewFolderName . length > 0 )
{
switch ( _button _id )
{
case "add" :
egw . json ( 'mail.mail_ui.ajax_addFolder' , [ _senders [ 0 ] . iface . id , NewFolderName ] )
. sendRequest ( true ) ;
return ;
case "cancel" :
}
}
} ,
this . egw . lang ( "Enter the name for the new Folder:" ) ,
this . egw . lang ( "Add a new Folder to %1:" , OldFolderName ) ,
'' , buttons ) ;
// setting required data for callback in as my_data
dialog . my _data = {
data : _senders ,
} ;
2013-05-21 10:46:54 +02:00
} ,
2013-04-13 12:30:07 +02:00
/ * *
* mail _RenameFolder - implementation of the RenameFolder action of right click options on the tree
2013-07-25 17:35:44 +02:00
*
2013-04-13 12:30:07 +02:00
* @ param _action
* @ param _senders - the representation of the tree leaf to be manipulated
* /
mail _RenameFolder : function ( action , _senders ) {
//console.log(action,_senders);
//action.id == 'rename'
//_senders.iface.id == target leaf / leaf to edit
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-04-13 12:30:07 +02:00
OldFolderName = ftree . getLabel ( _senders [ 0 ] . iface . id ) ;
if ( jQuery ( OldFolderName ) . text ( ) . length > 0 ) OldFolderName = jQuery ( OldFolderName ) . text ( ) ;
OldFolderName = OldFolderName . trim ( ) ;
OldFolderName = OldFolderName . replace ( /\([0-9]*\)/g , '' ) . trim ( ) ;
//console.log(OldFolderName);
2013-12-12 16:10:25 +01:00
var buttons = [
{ text : this . egw . lang ( "Rename" ) , id : "rename" , class : "ui-priority-primary" , "default" : true } ,
{ text : this . egw . lang ( "Cancel" ) , id : "cancel" } ,
] ;
var dialog = et2 _dialog . show _prompt ( function ( _button _id , _value ) {
var senders = this . my _data . data ;
var NewFolderName = null ;
if ( _value . length > 0 ) NewFolderName = _value ;
//alert(NewFolderName);
if ( NewFolderName && NewFolderName . length > 0 )
{
switch ( _button _id )
{
case "rename" :
egw . json ( 'mail.mail_ui.ajax_renameFolder' , [ senders [ 0 ] . iface . id , NewFolderName ] )
. sendRequest ( true ) ;
return ;
case "cancel" :
}
}
} ,
this . egw . lang ( "Rename Folder %1 to:" , OldFolderName ) ,
this . egw . lang ( "Rename Folder %1 ?" , OldFolderName ) ,
OldFolderName , buttons ) ;
// setting required data for callback in as my_data
dialog . my _data = {
data : _senders ,
} ;
2013-05-13 16:42:42 +02:00
} ,
2014-01-06 10:51:24 +01:00
/ * *
2014-01-11 12:58:31 +01:00
* mail _MoveFolder - implementation of the MoveFolder action on the tree
2014-01-06 10:51:24 +01:00
*
2014-01-11 12:58:31 +01:00
* @ param { egwAction } _action
* @ param { egwActionObject [ ] } _senders - the representation of the tree leaf to be manipulated
* @ param { egwActionObject } destination Drop target egwActionObject representing the destination
2014-01-06 10:51:24 +01:00
* /
2014-01-11 12:58:31 +01:00
mail _MoveFolder : function ( _action , _senders , destination ) {
if ( ! destination || ! destination . id )
{
egw . debug ( 'warn' , "Move folder, but no target" ) ;
return ;
}
2014-01-11 13:51:45 +01:00
// Some UI feedback while the folder is moved - using just the iface DOMNode would
// put the load image in every row
var load _node = $j ( destination . iface . getDOMNode ( ) ) . closest ( 'td' ) . prev ( )
. addClass ( 'loading' ) ;
2014-01-06 10:51:24 +01:00
2014-01-11 12:58:31 +01:00
for ( var i = 0 ; i < _senders . length ; i ++ )
{
egw . jsonq ( 'mail.mail_ui.ajax_MoveFolder' , [ _senders [ i ] . iface . id , destination . id ] ,
// Move is done (successfully or not), remove loading
2014-01-11 13:51:45 +01:00
function ( ) { load _node . removeClass ( 'loading' ) ; }
2014-01-11 12:58:31 +01:00
) ;
}
2014-01-06 10:51:24 +01:00
} ,
2013-05-13 16:42:42 +02:00
/ * *
* mail _DeleteFolder - implementation of the DeleteFolder action of right click options on the tree
2013-07-25 17:35:44 +02:00
*
2013-05-13 16:42:42 +02:00
* @ param _action
* @ param _senders - the representation of the tree leaf to be manipulated
* /
mail _DeleteFolder : function ( action , _senders ) {
//console.log(action,_senders);
//action.id == 'delete'
//_senders.iface.id == target leaf / leaf to edit
2013-10-18 11:58:25 +02:00
var ftree = this . et2 . getWidgetById ( this . nm _index + '[foldertree]' ) ;
2013-05-13 16:42:42 +02:00
OldFolderName = ftree . getLabel ( _senders [ 0 ] . iface . id ) ;
if ( jQuery ( OldFolderName ) . text ( ) . length > 0 ) OldFolderName = jQuery ( OldFolderName ) . text ( ) ;
OldFolderName = OldFolderName . trim ( ) ;
OldFolderName = OldFolderName . replace ( /\([0-9]*\)/g , '' ) . trim ( ) ;
//console.log(OldFolderName);
2013-12-12 14:34:35 +01:00
var buttons = [
{ text : this . egw . lang ( "Yes" ) , id : "delete" , class : "ui-priority-primary" , "default" : true } ,
{ text : this . egw . lang ( "Cancel" ) , id : "cancel" } ,
] ;
var dialog = et2 _dialog . show _dialog ( function ( _button _id , _value ) {
var senders = this . my _data . data ;
switch ( _button _id )
{
case "delete" :
egw . json ( 'mail.mail_ui.ajax_deleteFolder' , [ senders [ 0 ] . iface . id ] )
. sendRequest ( true ) ;
return ;
case "cancel" :
}
} ,
this . egw . lang ( "Do you really want to DELETE Folder %1 ?" , OldFolderName ) + " " + ( ftree . hasChildren ( _senders [ 0 ] . iface . id ) ? this . egw . lang ( "All subfolders will be deleted too, and all messages in all affected folders will be lost" ) : this . egw . lang ( "All messages in the folder will be lost" ) ) ,
this . egw . lang ( "DELETE Folder %1 ?" , OldFolderName ) ,
OldFolderName , buttons ) ;
// setting required data for callback in as my_data
dialog . my _data = {
data : _senders ,
} ;
2013-07-25 17:35:44 +02:00
} ,
2013-09-02 17:15:35 +02:00
/ * *
* Send names of uploaded files ( again ) to server , to process them : either copy to vfs or ask overwrite / rename
2013-10-09 18:44:03 +02:00
*
2013-09-02 17:15:35 +02:00
* @ param _event
* @ param _file _count
* @ param { string } [ _path = current directory ] Where the file is uploaded to .
* /
uploadForImport : function ( _event , _file _count , _path )
{
2013-09-05 16:52:11 +02:00
//console.log(_event,_file_count,_path);
// path is probably not needed when uploading for file; maybe it is when from vfs
2013-09-02 17:15:35 +02:00
if ( typeof _path == 'undefined' )
{
//_path = this.get_path();
}
if ( _file _count && ! jQuery . isEmptyObject ( _event . data . getValue ( ) ) )
{
2013-09-05 16:52:11 +02:00
var widget = _event . data ;
//console.log(widget.getValue());
// var request = new egw_json_request('mail_ui::ajax_importMessage', ['upload', widget.getValue(), _path], this);
2013-09-02 17:15:35 +02:00
// widget.set_value('');
2013-09-05 16:52:11 +02:00
// request.sendRequest();//false, this._upload_callback, this);
2013-09-10 15:39:44 +02:00
this . et2 _obj . submit ( ) ;
}
} ,
/ * *
* Send names of uploaded files ( again ) to server , to process them : either copy to vfs or ask overwrite / rename
2013-10-09 18:44:03 +02:00
*
2013-09-10 15:39:44 +02:00
* @ param _event
* @ param _file _count
* @ param { string } [ _path = current directory ] Where the file is uploaded to .
* /
uploadForCompose : function ( _event , _file _count , _path )
{
//console.log(_event,_file_count,_path);
// path is probably not needed when uploading for file; maybe it is when from vfs
if ( typeof _path == 'undefined' )
{
//_path = this.get_path();
}
if ( _file _count && ! jQuery . isEmptyObject ( _event . data . getValue ( ) ) )
{
var widget = _event . data ;
//console.log(widget.getValue());
// var request = new egw_json_request('mail_ui::ajax_importMessage', ['upload', widget.getValue(), _path], this);
// widget.set_value('');
// request.sendRequest();//false, this._upload_callback, this);
2013-09-11 15:46:00 +02:00
this . et2 _obj . submit ( ) ;
2013-09-02 17:15:35 +02:00
}
} ,
2013-10-03 18:09:25 +02:00
vfsUploadForImport : function ( _egw , _widget , _window ) {
2013-10-04 13:17:45 +02:00
//console.log(_egw, _widget, _window);
2013-11-22 14:55:09 +01:00
if ( jQuery . isEmptyObject ( _widget ) ) return ;
2013-10-03 18:09:25 +02:00
if ( ! jQuery . isEmptyObject ( _widget . getValue ( ) ) )
{
this . et2 _obj . submit ( ) ;
}
} ,
2013-10-02 16:50:24 +02:00
vfsUploadForCompose : function ( _egw , _widget , _window )
{
2013-10-04 13:17:45 +02:00
//console.log(_egw, _widget, _window);
2013-11-22 14:55:09 +01:00
if ( jQuery . isEmptyObject ( _widget ) ) return ;
2013-10-04 13:17:45 +02:00
if ( ! jQuery . isEmptyObject ( _widget . getValue ( ) ) )
{
this . et2 _obj . submit ( ) ;
}
} ,
submitOnChange : function ( _egw , _widget , _window ) {
//console.log(_egw, _widget, _window);
2013-11-22 14:55:09 +01:00
if ( ! jQuery . isEmptyObject ( _widget ) )
2013-10-02 16:50:24 +02:00
{
2013-11-22 14:55:09 +01:00
if ( ! jQuery . isEmptyObject ( _widget . getValue ( ) ) )
{
this . et2 _obj . submit ( ) ;
}
2013-10-02 16:50:24 +02:00
}
} ,
saveAsDraft : function ( _egw , _widget , _window )
{
this . et2 _obj . submit ( ) ;
} ,
2013-10-07 17:02:35 +02:00
saveAsDraftAndPrint : function ( _egw , _widget , _window )
{
this . et2 _obj . submit ( ) ;
} ,
2013-10-16 13:22:53 +02:00
2013-10-18 16:04:04 +02:00
signature _open : function ( _egw , _widget )
{
var id = _widget [ 0 ] . id . replace ( /row_/ , '' ) ;
var siggrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'sig' ) [ id ] ;
console . log ( _egw , _widget , siggrid , id ) ;
} ,
signature _delete : function ( _egw , _widget )
{
var id = _widget [ 0 ] . id . replace ( /row_/ , '' ) ;
var siggrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'sig' ) [ id ] ;
2013-10-21 16:41:51 +02:00
console . log ( _egw , _widget , siggrid , id ) ;
2013-10-24 09:15:48 +02:00
egw . json ( 'mail.mail_signatures.ajax_deleteSignature' , [ siggrid . row _id ] )
. sendRequest ( ) ;
2013-10-21 16:41:51 +02:00
} ,
profile _open : function ( _egw , _widget )
{
var id = _widget [ 0 ] . id . replace ( /row_/ , '' ) ;
var accgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'acc' ) [ id ] ;
console . log ( _egw , _widget , accgrid , id ) ;
} ,
profile _delete : function ( _egw , _widget )
{
var id = _widget [ 0 ] . id . replace ( /row_/ , '' ) ;
var accgrid = this . et2 . getArrayMgr ( "content" ) . getEntry ( 'acc' ) [ id ] ;
console . log ( _egw , _widget , accgrid , id ) ;
2013-10-24 09:15:48 +02:00
egw . json ( 'mail.mail_uipreferences.ajax_deleteMailProfile' , [ accgrid . row _id ] )
. sendRequest ( ) ;
2013-10-18 16:04:04 +02:00
} ,
2013-10-09 19:29:36 +02:00
/ * *
* Focus handler for folder , address , reject textbox / taglist to automatic check associated radio button
* /
sieve _focus _radioBtn : function ( _ev , _widget )
2013-08-09 19:47:53 +02:00
{
2013-10-09 19:29:36 +02:00
_widget . getRoot ( ) . getWidgetById ( 'action' ) . set _value ( _widget . id . replace ( /^action_([^_]+)_text$/ , '$1' ) ) ;
2013-08-09 19:47:53 +02:00
} ,
2013-10-09 19:29:36 +02:00
2013-08-09 19:47:53 +02:00
/ * *
*
* /
sieve _vac _all _aliases : function ( )
{
var addr = this . et2 . getWidgetById ( 'addresses' ) ;
console . log ( 'say something' ) ;
addr . select _all ( ) ;
//addr.set_autocomplete_url('mail.mail_compose.ajax_searchAddress');
} ,
2013-10-16 13:22:53 +02:00
/ * *
* Disable / Enable date widgets on vacation seive rules form when status is "by_date"
*
* /
vacationFilterStatusChange : function ( )
{
var status = this . et2 . getWidgetById ( 'status' ) ;
var s _date = this . et2 . getWidgetById ( 'start_date' ) ;
var e _date = this . et2 . getWidgetById ( 'end_date' ) ;
var by _date _label = this . et2 . getWidgetById ( 'by_date_label' ) ;
if ( status && s _date && e _date && by _date _label )
{
s _date . set _disabled ( status . get _value ( ) != "by_date" ) ;
e _date . set _disabled ( status . get _value ( ) != "by_date" ) ;
by _date _label . set _disabled ( status . get _value ( ) != "by_date" ) ;
}
} ,
2013-07-25 17:35:44 +02:00
/ * *
* action - handling actions on sieve rules
*
* @ param _type - action name
* @ param _selected - selected row from the sieve rule list
* @ param _msg - messages
* /
action : function ( _type , _selected )
{
var actionData ;
var that = this ;
var typeId = _type . id ;
var ruleID = ( ( _selected [ 0 ] . id . split ( "_" ) . pop ( ) ) - 1 ) ; // subtract the row id from 1 because the first row id is reserved by grid header
if ( _type )
{
switch ( _type . id )
{
case 'delete' :
var callbackDeleteDialog = function ( button _id )
{
if ( button _id == et2 _dialog . YES _BUTTON )
{
actionData = _type . parent . data . widget . getArrayMgr ( 'content' ) ;
that . _do _action ( typeId , actionData [ 'data' ] , ruleID ) ;
}
}
2013-10-07 18:53:13 +02:00
var confirmDeleteDialog = et2 _dialog . show _dialog ( callbackDeleteDialog , this . egw . lang ( "Do you really want to DELETE this Rule" ) , this . egw . lang ( "Delete" ) , { } , et2 _dialog . BUTTONS _YES _NO _CANCEL , et2 _dialog . WARNING _MESSAGE ) ;
2013-07-25 17:35:44 +02:00
break ;
case 'add' :
$linkData = "mail.mail_sieve.edit" ;
egw . open _link ( $linkData , '' , "600x480" ) ;
break ;
case 'edit' :
$linkData = "mail.mail_sieve.edit&ruleID=" + ruleID ;
egw . open _link ( $linkData , '' , "600x480" ) ;
break ;
case 'enable' :
actionData = _type . parent . data . widget . getArrayMgr ( 'content' ) ;
this . _do _action ( typeId , actionData [ 'data' ] , ruleID ) ;
//window.egw_refresh('refreshed',this.appname);
break ;
case 'disable' :
actionData = _type . parent . data . widget . getArrayMgr ( 'content' ) ;
this . _do _action ( typeId , actionData [ 'data' ] , ruleID ) ;
break ;
}
}
} ,
2013-08-09 19:47:53 +02:00
_do _action : function ( _typeID , _data , _selectedID , _msg )
2013-07-25 17:35:44 +02:00
{
if ( _typeID && _data )
{
2013-08-09 19:47:53 +02:00
var request = egw ( ) . json ( 'mail.mail_sieve.ajax_action' , [ _typeID , _selectedID , _msg ] , null , null , true ) ;
2013-07-25 17:35:44 +02:00
console . log ( request ) ;
2013-08-09 19:47:53 +02:00
request . sendRequest ( ) ;
2013-07-25 17:35:44 +02:00
}
} ,
2013-12-17 18:06:44 +01:00
sieve _refresh : function ( _execid , _msg )
2013-07-25 17:35:44 +02:00
{
2013-08-09 19:47:53 +02:00
var request = egw ( ) . json ( 'mail.mail_sieve.ajax_sieve_egw_refresh' , [ this . et2 _obj . etemplate _exec _id , _msg ] , null , this . et2 _obj , true ) ;
console . log ( request ) ;
request . sendRequest ( ) ;
2013-07-25 17:35:44 +02:00
} ,
2013-08-09 19:47:53 +02:00
2013-11-29 15:59:34 +01:00
/ * *
2013-12-09 12:17:32 +01:00
* Select the right combination of the rights for radio buttons from the selected common right
2013-11-29 15:59:34 +01:00
*
2013-12-09 12:17:32 +01:00
* @ param { widget } widget common right selectBox
2013-11-29 15:59:34 +01:00
*
* /
2013-12-09 12:17:32 +01:00
acl _common _rights _selector : function ( widget )
2013-11-29 15:59:34 +01:00
{
2013-12-09 12:17:32 +01:00
var rowId = widget . id . replace ( /[^0-9.]+/g , '' ) ;
var rights = ( widget . value == "custom" ) ? [ ] : ( widget . value == "akxeilprwts" ) ? widget . value . replace ( /[k,x,t,e]/g , "cd" ) . split ( "" ) : widget . value . split ( "" ) ;
for ( var i = 0 ; i < this . aclRights . length ; i ++ )
2013-11-29 15:59:34 +01:00
{
2013-12-09 12:17:32 +01:00
rightsWidget = this . et2 . getWidgetById ( rowId + '[acl_' + this . aclRights [ i ] + ']' ) ;
rightsWidget . set _value ( ( jQuery . inArray ( this . aclRights [ i ] , rights ) != - 1 ) ? true : false ) ;
2013-11-29 15:59:34 +01:00
}
} ,
2013-12-09 12:17:32 +01:00
/ * *
*
* Choose the right common right option for common ACL selecBox
*
* @ param { widget } widget radioButton rights
*
* /
acl _common _rights : function ( widget )
{
var rowId = widget . id . replace ( /[^0-9.]+/g , '' ) ;
var aclCommonWidget = this . et2 . getWidgetById ( rowId + '[acl]' ) ;
var rights = '' ;
2013-12-17 16:21:36 +01:00
2013-12-09 12:17:32 +01:00
for ( var i = 0 ; i < this . aclRights . length ; i ++ )
{
rightsWidget = this . et2 . getWidgetById ( rowId + '[acl_' + this . aclRights [ i ] + ']' ) ;
if ( rightsWidget . get _value ( ) == "true" )
rights += this . aclRights [ i ] ;
}
for ( var i = 0 ; i < this . aclCommonRights . length ; i ++ )
{
if ( rights . split ( "" ) . sort ( ) . toString ( ) == this . aclCommonRights [ i ] . split ( "" ) . sort ( ) . toString ( ) )
rights = this . aclCommonRights [ i ] ;
}
if ( jQuery . inArray ( rights , this . aclCommonRights ) == - 1 )
{
aclCommonWidget . set _value ( 'custom' ) ;
}
else
{
aclCommonWidget . set _value ( rights ) ;
}
} ,
2013-12-17 16:21:36 +01:00
/ * *
*
* @ todo get the account id and open the relevant sieve , ATM alway open sieve rules which is set in preferences
* /
edit _sieve : function ( )
{
this . egw . open _link ( 'mail.mail_sieve.index' ) ;
} ,
2013-12-17 18:06:44 +01:00
/ * *
*
* @ todo get the account id and open the relevant vacation , ATM alway open vacation rules which is set in preferences
* /
edit _vacation : function ( )
{
this . egw . open _link ( 'mail.mail_sieve.editVacation' , '_blank' , '700x480' ) ;
} ,
2013-12-20 11:48:04 +01:00
/ * *
* Show / Hide unsubscribed folders
*
* @ param { action } _action selected action from tree context menu
2014-01-06 10:51:24 +01:00
* @ param { sender } _senders
2013-12-20 11:48:04 +01:00
* /
2014-01-06 10:51:24 +01:00
all _folders : function ( _action , _senders )
2013-12-20 11:48:04 +01:00
{
2013-12-20 17:17:12 +01:00
var mailbox = _senders [ 0 ] . id . split ( '::' ) ;
acc _id = mailbox [ 0 ] ;
egw . json ( 'mail.mail_ui.ajax_foldertree' , [ acc _id , ! _action . checked ] )
. sendRequest ( ) ;
} ,
/ * *
* Subscribe selected unsubscribed folder
*
* @ param { action } _action
2014-01-06 10:51:24 +01:00
* @ param { sender } _senders
2013-12-20 17:17:12 +01:00
* /
subscribe _folder : function ( _action , _senders )
{
var mailbox = _senders [ 0 ] . id . split ( '::' ) ;
var folder = mailbox [ 1 ] , acc _id = mailbox [ 0 ] ;
egw . json ( 'mail.mail_ui.ajax_foldersubscription' , [ acc _id , folder , true ] )
. sendRequest ( ) ;
} ,
/ * *
* Unsubscribe selected subscribed folder
*
* @ param { action } _action
2014-01-06 10:51:24 +01:00
* @ param { sender } _senders
2013-12-20 17:17:12 +01:00
* /
unsubscribe _folder : function ( _action , _senders )
{
var mailbox = _senders [ 0 ] . id . split ( '::' ) ;
var folder = mailbox [ 1 ] , acc _id = mailbox [ 0 ] ;
egw . json ( 'mail.mail_ui.ajax_foldersubscription' , [ acc _id , folder , false ] )
2013-12-20 11:48:04 +01:00
. sendRequest ( ) ;
} ,
2013-11-15 18:22:46 +01:00
/ * *
* Edit a folder acl for account ( s )
*
* @ param _action
* @ param _senders - the representation of the tree leaf to be manipulated
* /
edit _acl : function ( _action , _senders )
{
2013-12-20 17:17:12 +01:00
var mailbox = _senders [ 0 ] . id . split ( '::' ) ;
var folder = mailbox [ 1 ] , acc _id = mailbox [ 0 ] ;
this . egw . open _link ( 'mail.mail_acl.edit&mailbox=' + jQuery . base64Encode ( folder ) + '&acc_id=' + acc _id , '_blank' , '640x480' ) ;
2013-11-15 18:22:46 +01:00
} ,
2013-11-03 11:24:09 +01:00
/ * *
* Edit a mail account
*
* @ param _action
* @ param _senders - the representation of the tree leaf to be manipulated
* /
edit _account : function ( _action , _senders )
{
var acc _id = parseInt ( _senders [ 0 ] . id ) ;
2013-11-17 14:31:19 +01:00
this . egw . open _link ( 'mail.mail_wizard.edit&acc_id=' + acc _id , '_blank' , '720x500' ) ;
2013-11-03 11:24:09 +01:00
}
2013-04-09 10:53:25 +02:00
} ) ;
2013-11-04 12:22:38 +01:00
// wrapper functions to call functions within app
function mail _callEmptyTrash ( )
{
2014-01-09 12:26:40 +01:00
this . mail _emptyTrash ( ) ;
2013-11-04 12:22:38 +01:00
}
function mail _callCompressFolder ( )
{
2014-01-09 12:26:40 +01:00
this . mail _compressFolder ( ) ;
2013-11-04 12:22:38 +01:00
}