2011-07-01 12:37:47 +02:00
< ? php
/**
* EGroupware - FeLaMiMail - user interface
*
* @ link http :// www . egroupware . org
* @ package felamimail
* @ author Lars Kneschke [ lkneschke @ linux - at - work . de ]
* @ author Klaus Leithoff [ kl @ stylite . de ]
* @ copyright ( c ) 2009 - 10 by Klaus Leithoff < kl - AT - stylite . de >
* @ license http :// opensource . org / licenses / gpl - license . php GPL - GNU General Public License
* @ version $Id $
*/
/**
* FeLaMiMail user interface class , provides UI functionality for mainview
*/
class uifelamimail
{
var $public_functions = array
(
'addVcard' => True ,
'changeFilter' => True ,
'changeFolder' => True ,
'changeSorting' => True ,
'compressFolder' => True ,
'importMessage' => True ,
2012-03-08 14:42:04 +01:00
'importMessageFromVFS2DraftAndDisplay' => True ,
2011-07-01 12:37:47 +02:00
'hookAdmin' => True ,
'toggleFilter' => True ,
'viewMainScreen' => True ,
'redirectToPreferences' => True ,
'redirectToEmailadmin' => True ,
2012-01-16 17:43:33 +01:00
'TestConnection' => True ,
2011-07-01 12:37:47 +02:00
);
var $mailbox ; // the current folder in use
var $startMessage ; // the first message to show
var $sort ; // how to sort the messages
var $moveNeeded ; // do we need to move some messages?
var $timeCounter ;
// the object storing the data about the incoming imap server
static $icServerID ;
var $connectionStatus = false ;
var $bofelamimail ;
var $bofilter ;
var $bopreferences ;
function uifelamimail ()
{
//error_log(__METHOD__);
// no autohide of the sidebox, as we use it for folderlist now.
unset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'auto_hide_sidebox' ]);
$this -> timeCounter = microtime ( true );
if ( ! isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ]))
{
// globals preferences add appname varname value
$GLOBALS [ 'egw' ] -> preferences -> add ( 'felamimail' , 'ActiveProfileID' , 0 , 'user' );
// save prefs
$GLOBALS [ 'egw' ] -> preferences -> save_repository ( true );
}
if ( is_null ( self :: $icServerID )) self :: $icServerID =& egw_cache :: getSession ( 'felamimail' , 'activeProfileID' );
2012-07-27 11:59:49 +02:00
if ( ! empty ( $_GET [ " resetConnection " ])) $connectionReset = html :: purify ( $_GET [ " resetConnection " ]);
unset ( $_GET [ " resetConnection " ]);
//_debug_array(self::$icServerID);
if ( $connectionReset )
{
error_log ( __METHOD__ . __LINE__ . ' Connection Reset triggered:' . $connectionReset . ' for Profile with ID:' . self :: $icServerID );
emailadmin_bo :: unsetCachedObjects ( self :: $icServerID );
}
2011-07-01 12:37:47 +02:00
$this -> displayCharset = translation :: charset ();
if ( isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ]))
self :: $icServerID = ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ];
//error_log(__METHOD__.'->'.self::$icServerID);
$this -> bofelamimail = felamimail_bo :: getInstance ( false , self :: $icServerID );
2011-07-29 11:22:33 +02:00
self :: $icServerID = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ] = $this -> bofelamimail -> profileID ;
2011-07-01 12:37:47 +02:00
$this -> bofilter = new felamimail_bofilter ( false );
$this -> bopreferences =& $this -> bofelamimail -> bopreferences ;
$this -> preferences =& $this -> bofelamimail -> mailPreferences ;
if ( is_object ( $this -> preferences ))
{
// account select box
$selectedID = $this -> bofelamimail -> getIdentitiesWithAccounts ( $identities );
// if nothing valid is found return to user defined account definition
if ( empty ( $this -> bofelamimail -> icServer -> host ) && count ( $identities ) == 0 && $this -> preferences -> userDefinedAccounts )
{
// redirect to new personal account
egw :: redirect_link ( '/index.php' , array ( 'menuaction' => 'felamimail.uipreferences.editAccountData' ,
'accountID' => " new " ,
'msg' => lang ( " There is no IMAP Server configured. " ) . " - " . lang ( " Please configure access to an existing individual IMAP account. " ),
));
}
2012-09-18 14:05:36 +02:00
if ( isset ( $this -> bofelamimail -> icServer -> ImapServerId ) && ! empty ( $this -> bofelamimail -> icServer -> ImapServerId ))
{
self :: $icServerID = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ] = $this -> bofelamimail -> icServer -> ImapServerId ;
}
2011-07-01 12:37:47 +02:00
}
2011-12-14 13:03:21 +01:00
else
{
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'emailadmin' ]) {
$errormessage .= " <br> " . lang ( " Configure a valid IMAP Server in emailadmin for the profile you are using. " );
} else {
$errormessage .= " <br> " . lang ( 'Please ask the administrator to correct the emailadmin IMAP Server Settings for you.' );
}
$errormessage = ' < table style = " width:100%; " >
< tr >
< td bgcolor = " #FFFFCC " align = " center " colspan = " 6 " >
< div style = " color:red " >< b > '.lang("There is no IMAP Server configured.").' </ b ></ div >< br >
< br > '.$errormessage.' < br >< br >
</ td >
</ tr >
</ table > ' ;
egw :: redirect_link ( '/index.php' , array ( 'menuaction' => 'felamimail.uipreferences.editAccountData' ,
'accountID' => " new " ,
'msg' => $errormessage ,
));
}
2011-07-01 12:37:47 +02:00
$this -> bofelamimail -> saveSessionData ();
$this -> mailbox = $this -> bofelamimail -> sessionData [ 'mailbox' ];
$this -> startMessage = $this -> bofelamimail -> sessionData [ 'startMessage' ];
$this -> sort = $this -> bofelamimail -> sessionData [ 'sort' ];
$this -> sortReverse = $this -> bofelamimail -> sessionData [ 'sortReverse' ];
#$this->filter = $this->bofelamimail->sessionData['activeFilter'];
$this -> t = CreateObject ( 'phpgwapi.Template' , EGW_APP_TPL );
#$this->grants[$this->account] = EGW_ACL_READ + EGW_ACL_ADD + EGW_ACL_EDIT + EGW_ACL_DELETE;
// this need to fixed
// this does not belong to here
if ( $_GET [ 'menuaction' ] != 'felamimail.uifelamimail.hookAdmin' &&
$_GET [ 'menuaction' ] != 'felamimail.uifelamimail.changeFolder' ) {
$this -> connectionStatus = $this -> bofelamimail -> openConnection ( self :: $icServerID );
}
$this -> rowColor [ 0 ] = $GLOBALS [ 'egw_info' ][ " theme " ][ " row_on " ];
$this -> rowColor [ 1 ] = $GLOBALS [ 'egw_info' ][ " theme " ][ " row_off " ];
$this -> dataRowColor [ 0 ] = $GLOBALS [ 'egw_info' ][ " theme " ][ " bg01 " ];
$this -> dataRowColor [ 1 ] = $GLOBALS [ 'egw_info' ][ " theme " ][ " bg02 " ];
#print __LINE__ . ': ' . (microtime(true) - $this->timeCounter) . '<br>';
}
function redirectToPreferences ()
{
$this -> display_app_header ( false );
//appname is a $_GET parameter, so the passing as function parameter does not work
ExecMethod ( 'preferences.uisettings.index' , array ( 'appname' => 'felamimail' ));
exit ;
}
function redirectToEmailadmin ()
{
//$GLOBALS['egw_info']['flags']['currentapp'] = 'emailadmin';
$this -> display_app_header ( false );
if ( ! file_exists ( EGW_SERVER_ROOT . ( $et_css_file = '/etemplate/templates/' . $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'template_set' ] . '/app.css' )))
{
$et_css_file = '/etemplate/templates/default/app.css' ;
}
echo '
< style type = " text/css " >
<!--
@ import url ( '.$GLOBALS[' egw_info '][' server '][' webserver_url '].$et_css_file.' );
-->
</ style > ' ;
ExecMethod2 ( 'emailadmin.emailadmin_ui.index' );
exit ;
}
2012-01-16 17:43:33 +01:00
function TestConnection ()
{
// Simple Test, resets the active connections cachedObjects / ImapServer
$this -> display_app_header ( false );
$preferences =& $this -> preferences ;
2012-01-24 15:44:21 +01:00
if ( $preferences -> preferences [ 'prefcontroltestconnection' ] == 'none' ) die ( 'You should not be here!' );
2012-01-16 17:43:33 +01:00
if ( isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ]))
self :: $icServerID = ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ];
//_debug_array(self::$icServerID);
2012-08-29 11:29:42 +02:00
if ( is_object ( $preferences )) $imapServer = $preferences -> getIncomingServer ( self :: $icServerID );
if ( isset ( $imapServer -> ImapServerId ) && ! empty ( $imapServer -> ImapServerId ))
{
self :: $icServerID = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ] = $imapServer -> ImapServerId ;
}
2012-01-16 17:43:33 +01:00
echo " <h2> " . lang ( 'Test Connection and display basic information about the selected profile' ) . " </h2> " ;
_debug_array ( 'Connection Reset triggered:' . $connectionReset . ' for Profile with ID:' . self :: $icServerID );
emailadmin_bo :: unsetCachedObjects ( self :: $icServerID );
2012-01-24 15:44:21 +01:00
if ( $preferences -> preferences [ 'prefcontroltestconnection' ] == 'reset' ) exit ;
2012-01-16 17:43:33 +01:00
echo " <hr /><h3 style='color:red'> " . lang ( 'IMAP Server' ) . " </h3> " ;
if ( $imapServer -> _connectionErrorObject ) $eO = $imapServer -> _connectionErrorObject ;
unset ( $imapServer -> _connectionErrorObject );
2012-08-21 11:56:53 +02:00
$sieveServer = clone $imapServer ;
2012-01-16 17:43:33 +01:00
if ( ! empty ( $imapServer -> adminPassword )) $imapServer -> adminPassword = '**********************' ;
2012-01-24 15:44:21 +01:00
if ( $preferences -> preferences [ 'prefcontroltestconnection' ] == 'nopasswords' || $preferences -> preferences [ 'prefcontroltestconnection' ] == 'nocredentials' )
{
if ( ! empty ( $imapServer -> password )) $imapServer -> password = '**********************' ;
}
if ( $preferences -> preferences [ 'prefcontroltestconnection' ] == 'nocredentials' )
{
if ( ! empty ( $imapServer -> adminUsername )) $imapServer -> adminUsername = '++++++++++++++++++++++' ;
if ( ! empty ( $imapServer -> username )) $imapServer -> username = '++++++++++++++++++++++' ;
if ( ! empty ( $imapServer -> loginName )) $imapServer -> loginName = '++++++++++++++++++++++' ;
}
if ( $preferences -> preferences [ 'prefcontroltestconnection' ] <> 'basic' )
{
_debug_array ( $imapServer );
}
else
{
2012-08-29 11:29:42 +02:00
_debug_array ( array ( 'ImapServerId' => $imapServer -> ImapServerId ,
2012-01-24 15:44:21 +01:00
'host' => $imapServer -> host ,
'port' => $imapServer -> port ,
'validatecert' => $imapServer -> validatecert ));
}
2012-01-16 17:43:33 +01:00
echo " <h4 style='color:red'> " . lang ( 'Connection Status' ) . " </h4> " ;
$lE = false ;
if ( $eO && $eO -> message )
{
_debug_array ( $eO -> message );
$lE = true ;
}
$isError = egw_cache :: getCache ( egw_cache :: INSTANCE , 'email' , 'icServerIMAP_connectionError' . trim ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'account_id' ]), null , array (), $expiration = 60 * 5 );
if ( $isError [ self :: $icServerID ]) {
_debug_array ( $isError [ self :: $icServerID ]);
$lE = true ;
}
_debug_array (( $lE ? '' : lang ( 'Successfully connected' )));
2012-08-21 11:56:53 +02:00
if (( $sieveServer instanceof defaultimap ) && $sieveServer -> enableSieve ) {
2012-01-16 17:43:33 +01:00
$scriptName = ( ! empty ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'sieveScriptName' ])) ? $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'sieveScriptName' ] : 'felamimail' ;
2012-08-21 11:56:53 +02:00
$sieveServer -> getScript ( $scriptName );
$rules = $sieveServer -> retrieveRules ( $sieveServer -> scriptName , true );
$vacation = $sieveServer -> getVacation ( $sieveServer -> scriptName );
2012-01-16 17:43:33 +01:00
echo " <h4 style='color:red'> " . lang ( 'Sieve Connection Status' ) . " </h4> " ;
$isSieveError = egw_cache :: getCache ( egw_cache :: INSTANCE , 'email' , 'icServerSIEVE_connectionError' . trim ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'account_id' ]), $callback = null , $callback_params = array (), $expiration = 60 * 15 );
2012-08-21 11:56:53 +02:00
if ( $isSieveError [ self :: $icServerID ])
{
_debug_array ( $isSieveError [ self :: $icServerID ]);
}
else
{
_debug_array ( array ( lang ( 'Successfully connected' ), $rules ));
}
2012-01-16 17:43:33 +01:00
}
echo " <hr /><h3 style='color:red'> " . lang ( 'Preferences' ) . " </h3> " ;
_debug_array ( $preferences -> preferences );
//error_log(__METHOD__.__LINE__.' ImapServerId:'.$imapServer->ImapServerId.' Prefs:'.array2string($preferences->preferences));
//error_log(__METHOD__.__LINE__.' ImapServerObject:'.array2string($imapServer));
if ( is_object ( $preferences )) $activeIdentity =& $preferences -> getIdentity ( self :: $icServerID , true );
//_debug_array($activeIdentity);
$maxMessages = 50 ;
if ( isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ]) && ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ] <> 0 )
$maxMessages = ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ];
$userPreferences =& $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ];
// retrieve data for/from user defined accounts
$selectedID = 0 ;
if ( $this -> preferences -> userDefinedAccounts ) $allAccountData = $this -> bopreferences -> getAllAccountData ( $this -> preferences );
if ( $allAccountData ) {
foreach ( $allAccountData as $tmpkey => $accountData )
{
$identity =& $accountData [ 'identity' ];
$icServer =& $accountData [ 'icServer' ];
//_debug_array($identity);
//_debug_array($icServer);
//error_log(__METHOD__.__LINE__.' Userdefined Profiles ImapServerId:'.$icServer->ImapServerId);
if ( empty ( $icServer -> host )) continue ;
$identities [ $identity -> id ] = $identity -> realName . ' ' . $identity -> organization . ' <' . $identity -> emailAddress . '>' ;
if ( ! empty ( $identity -> default )) $identities [ $identity -> id ] = $identities [ $identity -> id ] . '<b>(' . lang ( 'selected' ) . ')</b>' ;
}
}
if ( count ( $identities ) > 0 )
{
echo " <hr /><h3 style='color:red'> " . lang ( 'available personal EMail-Accounts/Profiles' ) . " </h3> " ;
_debug_array ( $identities );
}
if ( empty ( $imapServer -> host ) && count ( $identities ) == 0 && $this -> preferences -> userDefinedAccounts )
{
// redirect to new personal account
egw :: redirect_link ( '/index.php' , array ( 'menuaction' => 'felamimail.uipreferences.editAccountData' ,
'accountID' => " new " ,
'msg' => lang ( " There is no IMAP Server configured. " ) . " - " . lang ( " Please configure access to an existing individual IMAP account. " ),
));
}
exit ;
}
2011-07-01 12:37:47 +02:00
function addVcard ()
{
error_log ( __METHOD__ . " called from: " . function_backtrace ());
$messageID = $_GET [ 'messageID' ];
$partID = $_GET [ 'partID' ];
$attachment = $this -> bofelamimail -> getAttachment ( $messageID , $partID );
$tmpfname = tempnam ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'temp_dir' ], " egw_ " );
$fp = fopen ( $tmpfname , " w " );
fwrite ( $fp , $attachment [ 'attachment' ]);
fclose ( $fp );
$vcard = CreateObject ( 'phpgwapi.vcard' );
$entry = $vcard -> in_file ( $tmpfname );
$entry [ 'owner' ] = $GLOBALS [ 'egw_info' ][ 'user' ][ 'account_id' ];
$entry [ 'access' ] = 'private' ;
$entry [ 'tid' ] = 'n' ;
print quoted_printable_decode ( $entry [ 'fn' ]) . " <br> " ;
unlink ( $tmpfname );
$GLOBALS [ 'egw' ] -> common -> egw_exit ();
}
function changeFilter ()
{
error_log ( __METHOD__ . " called from: " . function_backtrace ());
if ( isset ( $_POST [ " filter " ]))
{
$data [ 'quickSearch' ] = $_POST [ " quickSearch " ];
$data [ 'filter' ] = $_POST [ " filter " ];
$this -> bofilter -> updateFilter ( $data );
}
elseif ( isset ( $_GET [ " filter " ]))
{
$data [ 'filter' ] = $_GET [ " filter " ];
$this -> bofilter -> updateFilter ( $data );
}
$this -> viewMainScreen ();
}
function changeFolder ()
{
// change folder
$this -> bofelamimail -> sessionData [ 'mailbox' ] = urldecode ( $_GET [ " mailbox " ]);
$this -> bofelamimail -> sessionData [ 'startMessage' ] = 1 ;
$this -> bofelamimail -> sessionData [ 'sort' ] = $this -> preferences -> preferences [ 'sortOrder' ];
$this -> bofelamimail -> sessionData [ 'activeFilter' ] = - 1 ;
$this -> bofelamimail -> saveSessionData ();
$this -> mailbox = $this -> bofelamimail -> sessionData [ 'mailbox' ];
$this -> startMessage = $this -> bofelamimail -> sessionData [ 'startMessage' ];
$this -> sort = $this -> bofelamimail -> sessionData [ 'sort' ];
$this -> connectionStatus = $this -> bofelamimail -> openConnection ();
$this -> viewMainScreen ();
}
function changeSorting ()
{
error_log ( __METHOD__ . " called from: " . function_backtrace ());
// change sorting
if ( isset ( $_GET [ " sort " ]))
{
$this -> bofelamimail -> sessionData [ 'sort' ] = $_GET [ " sort " ];
$this -> sort = $_GET [ " sort " ];
$this -> bofelamimail -> saveSessionData ();
}
$this -> viewMainScreen ();
}
/**
* importMessage
*/
function importMessage ()
{
//error_log(array2string($_POST));
if ( empty ( $importtype )) $importtype = htmlspecialchars ( $_POST [ " importtype " ]);
if ( empty ( $toggleFS )) $toggleFS = htmlspecialchars ( $_POST [ " toggleFS " ]);
if ( empty ( $importID )) $importID = htmlspecialchars ( $_POST [ " importid " ]);
if ( empty ( $addFileName )) $addFileName = html :: purify ( $_POST [ 'addFileName' ]);
if ( empty ( $importtype )) $importtype = 'file' ;
if ( empty ( $toggleFS )) $toggleFS = false ;
if ( empty ( $addFileName )) $addFileName = false ;
if ( $toggleFS == 'vfs' && $importtype == 'file' ) $importtype = 'vfs' ;
if ( ! $toggleFS && $importtype == 'vfs' ) $importtype = 'file' ;
// get passed messages
if ( ! empty ( $_GET [ " msg " ])) $alert_message [] = html :: purify ( $_GET [ " msg " ]);
if ( ! empty ( $_POST [ " msg " ])) $alert_message [] = html :: purify ( $_POST [ " msg " ]);
unset ( $_GET [ " msg " ]);
unset ( $_POST [ " msg " ]);
//_debug_array($alert_message);
//error_log(__METHOD__." called from:".function_backtrace());
$proceed = false ;
if ( is_array ( $_FILES [ " addFileName " ]))
{
//phpinfo();
//error_log(print_r($_FILES,true));
if ( $_FILES [ 'addFileName' ][ 'error' ] == $UPLOAD_ERR_OK ) {
$proceed = true ;
$formData [ 'name' ] = $_FILES [ 'addFileName' ][ 'name' ];
$formData [ 'type' ] = $_FILES [ 'addFileName' ][ 'type' ];
$formData [ 'file' ] = $_FILES [ 'addFileName' ][ 'tmp_name' ];
$formData [ 'size' ] = $_FILES [ 'addFileName' ][ 'size' ];
}
}
if ( $addFileName && $toggleFS == 'vfs' && $importtype == 'vfs' && $importID )
{
$sessionData = $GLOBALS [ 'egw' ] -> session -> appsession ( 'compose_session_data_' . $importID , 'felamimail' );
//error_log(__METHOD__.__LINE__.array2string($sessionData));
foreach (( array ) $sessionData [ 'attachments' ] as $attachment ) {
//error_log(__METHOD__.__LINE__.array2string($attachment));
if ( $addFileName == $attachment [ 'name' ])
{
$proceed = true ;
$formData [ 'name' ] = $attachment [ 'name' ];
$formData [ 'type' ] = $attachment [ 'type' ];
$formData [ 'file' ] = $attachment [ 'file' ];
$formData [ 'size' ] = $attachment [ 'size' ];
break ;
}
}
}
if ( $proceed === true )
{
$destination = html :: purify ( $_POST [ 'newMailboxMoveName' ] ? $_POST [ 'newMailboxMoveName' ] : '' );
try
{
$messageUid = $this -> importMessageToFolder ( $formData , $destination , $importID );
$linkData = array
(
'menuaction' => 'felamimail.uidisplay.display' ,
'uid' => $messageUid ,
'mailbox' => base64_encode ( $destination ),
);
}
catch ( egw_exception_wrong_userinput $e )
{
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.importMessage' ,
'msg' => htmlspecialchars ( $e -> getMessage ()),
);
}
egw :: redirect_link ( '/index.php' , $linkData );
exit ;
}
if ( !@ is_object ( $GLOBALS [ 'egw' ] -> js ))
{
$GLOBALS [ 'egw' ] -> js = CreateObject ( 'phpgwapi.javascript' );
}
// this call loads js and css for the treeobject
html :: tree ( false , false , false , null , 'foldertree' , '' , '' , false , '/' , null , false );
$GLOBALS [ 'egw' ] -> common -> egw_header ();
#$uiwidgets =& CreateObject('felamimail.uiwidgets');
$this -> t -> set_file ( array ( " importMessage " => " importMessage.tpl " ));
$this -> t -> set_block ( 'importMessage' , 'fileSelector' , 'fileSelector' );
$importID = felamimail_bo :: getRandomString ();
// prepare saving destination of imported message
$linkData = array
(
'menuaction' => 'felamimail.uipreferences.listSelectFolder' ,
);
$this -> t -> set_var ( 'folder_select_url' , $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ));
// messages that may be passed to the Form
if ( isset ( $alert_message ) && ! empty ( $alert_message ))
{
$this -> t -> set_var ( 'messages' , implode ( '; ' , $alert_message ));
}
else
{
$this -> t -> set_var ( 'messages' , '' );
}
// preset for saving destination, we use draftfolder
$savingDestination = ( $this -> preferences -> ic_server [ 0 ] -> draftfolder ? $this -> preferences -> ic_server [ 0 ] -> draftfolder : $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'draftFolder' ]);
$this -> t -> set_var ( 'mailboxNameShort' , $savingDestination );
$this -> t -> set_var ( 'importtype' , $importtype );
$this -> t -> set_var ( 'importid' , $importID );
if ( $toggleFS ) $this -> t -> set_var ( 'toggleFS_preset' , 'checked' ); else $this -> t -> set_var ( 'toggleFS_preset' , '' );
$this -> translate ();
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.importMessage' ,
);
$this -> t -> set_var ( 'file_selector_url' , $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ));
$this -> t -> set_var ( 'vfs_selector_url' , egw :: link ( '/index.php' , array (
'menuaction' => 'filemanager.filemanager_select.select' ,
'mode' => 'open-multiple' ,
'method' => 'felamimail.uifelamimail.selectFromVFS' ,
'id' => $importID ,
'label' => lang ( 'Attach' ),
)));
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'filemanager' ] && $importtype == 'vfs' )
{
$this -> t -> set_var ( 'vfs_attach_button' , '
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; < a onclick = " fm_import_displayVfsSelector(); " title = " '.htmlspecialchars(lang('filemanager')).' " >
< img src = " '. $GLOBALS['egw'] ->common->image('filemanager','navbar').' " height = " 18 " >
</ a >& nbsp ; & nbsp ; & nbsp ; & nbsp ; ' );
$this -> t -> set_var ( 'filebox_readonly' , 'readonly="readonly"' );
}
else
{
$this -> t -> set_var ( 'vfs_attach_button' , '' );
$this -> t -> set_var ( 'filebox_readonly' , '' );
}
$maxUploadSize = ini_get ( 'upload_max_filesize' );
$this -> t -> set_var ( 'max_uploadsize' , $maxUploadSize );
$this -> t -> set_var ( 'ajax-loader' , $GLOBALS [ 'egw' ] -> common -> image ( 'felamimail' , 'ajax-loader' ));
$this -> t -> pparse ( " out " , " fileSelector " );
}
/**
* Callback for filemanagers select file dialog
*
* @ param string | array $files path of file ( s ) in vfs ( no egw_vfs :: PREFIX , just the path )
* @ return string javascript output by the file select dialog , usually to close it
*/
function selectFromVFS ( $importid , $files )
{
//error_log(__METHOD__.__LINE__.'->ImportID:'.$importid);
$bocompose = CreateObject ( 'felamimail.bocompose' , $importid , $this -> displayCharset );
$path = implode ( ' ' , $files );
foreach (( array ) $files as $path )
{
$formData = array (
'name' => egw_vfs :: basename ( $path ),
'type' => egw_vfs :: mime_content_type ( $path ),
'file' => egw_vfs :: PREFIX . $path ,
'size' => filesize ( egw_vfs :: PREFIX . $path ),
);
$bocompose -> addAttachment ( $formData );
}
//error_log(__METHOD__.__LINE__.$path);
return 'window.close();' ;
}
/**
* importMessageToFolder
*
* @ param array $_formData Array with information of name , type , file and size
* @ param string $_folder ( passed by reference ) will set the folder used . must be set with a folder , but will hold modifications if
* folder is modified
* @ param string $importID ID for the imported message , used by attachments to identify them unambiguously
* @ return mixed $messageUID or exception
*/
function importMessageToFolder ( $_formData , & $_folder , $importID = '' )
{
$importfailed = false ;
// check if formdata meets basic restrictions (in tmp dir, or vfs, mimetype, etc.)
try
{
$tmpFileName = felamimail_bo :: checkFileBasics ( $_formData , $importID );
}
catch ( egw_exception_wrong_userinput $e )
{
$importfailed = true ;
$alert_msg .= $e -> getMessage ();
}
// -----------------------------------------------------------------------
if ( $importfailed === false )
{
$mailObject = new egw_mailer ();
try
{
$this -> bofelamimail -> parseFileIntoMailObject ( $mailObject , $tmpFileName , $Header , $Body );
}
catch ( egw_exception_assertion_failed $e )
{
$importfailed = true ;
$alert_msg .= $e -> getMessage ();
}
//_debug_array($Body);
$this -> bofelamimail -> openConnection ();
if ( empty ( $_folder ))
{
$importfailed = true ;
$alert_msg .= lang ( " Import of message %1 failed. Destination Folder not set. " , $_formData [ 'name' ]);
}
$delimiter = $this -> bofelamimail -> getHierarchyDelimiter ();
if ( $_folder == 'INBOX' . $delimiter ) $_folder = 'INBOX' ;
if ( $importfailed === false )
{
if ( $this -> bofelamimail -> folderExists ( $_folder , true )) {
try
{
$messageUid = $this -> bofelamimail -> appendMessage ( $_folder ,
$Header . $mailObject -> LE . $mailObject -> LE ,
$Body ,
$flags );
}
catch ( egw_exception_wrong_userinput $e )
{
$importfailed = true ;
$alert_msg .= lang ( " Import of message %1 failed. Could not save message to folder %2 due to: %3 " , $_formData [ 'name' ], $_folder , $e -> getMessage ());
}
}
else
{
$importfailed = true ;
$alert_msg .= lang ( " Import of message %1 failed. Destination Folder %2 does not exist. " , $_formData [ 'name' ], $_folder );
}
}
}
// set the url to open when refreshing
if ( $importfailed == true )
{
throw new egw_exception_wrong_userinput ( $alert_msg );
}
else
{
return $messageUid ;
}
}
2012-03-08 14:42:04 +01:00
/**
* importMessageFromVFS2DraftAndDisplay
*
2012-03-20 17:02:00 +01:00
* @ param array $formData Array with information of name , type , file and size ; file is required ,
2012-03-09 15:33:00 +01:00
* name , type and size may be set here to meet the requirements
* Example : $formData [ 'name' ] = 'a_email.eml' ;
* $formData [ 'type' ] = 'message/rfc822' ;
* $formData [ 'file' ] = 'vfs://default/home/leithoff/a_email.eml' ;
* $formData [ 'size' ] = 2136 ;
2012-03-08 14:42:04 +01:00
* @ return mixed $messageUID or exception
*/
function importMessageFromVFS2DraftAndDisplay ( $formData = '' )
{
if ( empty ( $formData )) if ( isset ( $_REQUEST [ 'formData' ])) $formData = $_REQUEST [ 'formData' ];
//error_log(array2string($formData));
$draftFolder = $this -> bofelamimail -> getDraftFolder ( false );
$importID = felamimail_bo :: getRandomString ();
2012-03-09 15:33:00 +01:00
// name should be set to meet the requirements of checkFileBasics
if ( parse_url ( $formData [ 'file' ], PHP_URL_SCHEME ) == 'vfs' && ( ! isset ( $formData [ 'name' ]) || empty ( $formData [ 'name' ])))
{
2012-03-20 17:02:00 +01:00
$buff = explode ( '/' , $formData [ 'file' ]);
2012-03-09 15:33:00 +01:00
$suffix = '' ;
if ( is_array ( $buff )) $formData [ 'name' ] = array_pop ( $buff ); // take the last part as name
}
// type should be set to meet the requirements of checkFileBasics
if ( parse_url ( $formData [ 'file' ], PHP_URL_SCHEME ) == 'vfs' && ( ! isset ( $formData [ 'type' ]) || empty ( $formData [ 'type' ])))
{
2012-03-20 17:02:00 +01:00
$buff = explode ( '.' , $formData [ 'file' ]);
2012-03-09 15:33:00 +01:00
$suffix = '' ;
if ( is_array ( $buff )) $suffix = array_pop ( $buff ); // take the last extension to check with ext2mime
if ( ! empty ( $suffix )) $formData [ 'type' ] = mime_magic :: ext2mime ( $suffix );
}
// size should be set to meet the requirements of checkFileBasics
if ( parse_url ( $formData [ 'file' ], PHP_URL_SCHEME ) == 'vfs' && ! isset ( $formData [ 'size' ]))
{
$formData [ 'size' ] = strlen ( $formData [ 'file' ]); // set some size, to meet requirements of checkFileBasics
}
2012-03-08 14:42:04 +01:00
try
{
$messageUid = $this -> importMessageToFolder ( $formData , $draftFolder , $importID );
$linkData = array
(
'menuaction' => 'felamimail.uidisplay.display' ,
'uid' => $messageUid ,
'mailbox' => base64_encode ( $draftFolder ),
2012-03-20 17:02:00 +01:00
'deleteDraftOnClose' => 1 ,
2012-03-08 14:42:04 +01:00
);
}
catch ( egw_exception_wrong_userinput $e )
{
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.importMessage' ,
'msg' => htmlspecialchars ( $e -> getMessage ()),
);
}
egw :: redirect_link ( '/index.php' , $linkData );
exit ;
}
2011-07-01 12:37:47 +02:00
function display_app_header ( $includeFMStuff = true )
{
if ( $includeFMStuff )
{
// this call loads js and css for the treeobject
html :: tree ( false , false , false , null , 'foldertree' , '' , '' , false , '/' , null , false );
egw_framework :: validate_file ( 'jquery' , 'jquery-ui' );
egw_framework :: validate_file ( 'dhtmlxtree' , 'dhtmlxMenu/codebase/dhtmlxcommon' );
egw_framework :: validate_file ( 'dhtmlxtree' , 'dhtmlxMenu/codebase/dhtmlxmenu' );
egw_framework :: validate_file ( 'egw_action' , 'egw_action' );
egw_framework :: validate_file ( 'egw_action' , 'egw_keymanager' );
egw_framework :: validate_file ( 'egw_action' , 'egw_action_common' );
egw_framework :: validate_file ( 'egw_action' , 'egw_action_popup' );
egw_framework :: validate_file ( 'egw_action' , 'egw_action_dragdrop' );
egw_framework :: validate_file ( 'egw_action' , 'egw_dragdrop_dhtmlx_tree' );
egw_framework :: validate_file ( 'egw_action' , 'egw_menu' );
egw_framework :: validate_file ( 'egw_action' , 'egw_menu_dhtmlx' );
egw_framework :: validate_file ( 'egw_action' , 'egw_grid' );
egw_framework :: validate_file ( 'egw_action' , 'egw_grid_data' );
egw_framework :: validate_file ( 'egw_action' , 'egw_grid_view' );
egw_framework :: validate_file ( 'egw_action' , 'egw_grid_columns' );
egw_framework :: validate_file ( 'egw_action' , 'egw_stylesheet' );
// The ext stuff has to be loaded at the end
2012-03-07 11:39:23 +01:00
// egw_framework::validate_file('dhtmlxtree','dhtmlxMenu/codebase/ext/dhtmlxmenu_ext');
2011-07-01 12:37:47 +02:00
egw_framework :: validate_file ( 'jscode' , 'viewMainScreen' , 'felamimail' );
egw_framework :: includeCSS ( '/phpgwapi/js/egw_action/test/skins/dhtmlxmenu_egw.css' );
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'include_xajax' ] = True ;
}
$GLOBALS [ 'egw' ] -> common -> egw_header ();
echo $GLOBALS [ 'egw' ] -> framework -> navbar ();
}
function hookAdmin ()
{
if ( ! $GLOBALS [ 'egw' ] -> acl -> check ( 'run' , 1 , 'admin' ))
{
$GLOBALS [ 'egw' ] -> common -> egw_header ();
echo $GLOBALS [ 'egw' ] -> framework -> navbar ();
echo lang ( 'access not permitted' );
$GLOBALS [ 'egw' ] -> log -> message ( 'F-Abort, Unauthorized access to felamimail.uifelamimail.hookAdmin' );
$GLOBALS [ 'egw' ] -> log -> commit ();
$GLOBALS [ 'egw' ] -> common -> egw_exit ();
}
if ( ! empty ( $_POST [ 'profileID' ]) && is_int ( intval ( $_POST [ 'profileID' ])))
{
$profileID = intval ( $_POST [ 'profileID' ]);
$this -> bofelamimail -> setEMailProfile ( $profileID );
}
$boemailadmin = new emailadmin_bo ();
$profileList = $boemailadmin -> getProfileList ();
$profileID = $this -> bofelamimail -> getEMailProfile ();
$this -> display_app_header ();
$this -> t -> set_file ( array ( " body " => " selectprofile.tpl " ));
$this -> t -> set_block ( 'body' , 'main' );
$this -> t -> set_block ( 'body' , 'select_option' );
$this -> t -> set_var ( 'lang_select_email_profile' , lang ( 'select emailprofile' ));
$this -> t -> set_var ( 'lang_site_configuration' , lang ( 'site configuration' ));
$this -> t -> set_var ( 'lang_save' , lang ( 'save' ));
$this -> t -> set_var ( 'lang_back' , lang ( 'back' ));
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.hookAdmin'
);
$this -> t -> set_var ( 'action_url' , $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ));
$linkData = array
(
'menuaction' => 'emailadmin.emailadmin_ui.listProfiles'
);
$this -> t -> set_var ( 'lang_go_emailadmin' , lang ( 'use <a href="%1">EmailAdmin</a> to create profiles' , $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData )));
$this -> t -> set_var ( 'back_url' , $GLOBALS [ 'egw' ] -> link ( '/admin/index.php' ));
if ( isset ( $profileList ) && is_array ( $profileList ))
{
foreach ( $profileList as $key => $value )
{
#print "$key => $value<br>";
#_debug_array($value);
$this -> t -> set_var ( 'profileID' , $value [ 'profileID' ]);
$this -> t -> set_var ( 'description' , $value [ 'description' ]);
if ( is_int ( $profileID ) && $profileID == $value [ 'profileID' ])
{
$this -> t -> set_var ( 'selected' , 'selected' );
}
else
{
$this -> t -> set_var ( 'selected' , '' );
}
$this -> t -> parse ( 'select_options' , 'select_option' , True );
}
}
$this -> t -> parse ( " out " , " main " );
print $this -> t -> get ( 'out' , 'main' );
}
function viewMainScreen ()
{
2012-07-02 13:16:29 +02:00
if ( ! $GLOBALS [ 'egw' ] -> hooks -> hook_exists ( 'session_creation' , 'felamimail' )) $GLOBALS [ 'egw' ] -> hooks -> register_single_app_hook ( 'felamimail' , 'session_creation' );
2011-10-07 12:27:09 +02:00
$connectionReset = false ;
2011-07-01 12:37:47 +02:00
// get passed messages
if ( ! empty ( $_GET [ " msg " ])) $message [] = html :: purify ( $_GET [ " msg " ]);
if ( ! empty ( $_GET [ " message " ])) $message [] = html :: purify ( $_GET [ " message " ]);
2011-10-07 12:27:09 +02:00
if ( ! empty ( $_GET [ " resetConnection " ])) $connectionReset = html :: purify ( $_GET [ " resetConnection " ]);
2011-07-01 12:37:47 +02:00
unset ( $_GET [ " msg " ]);
unset ( $_GET [ " message " ]);
2011-10-07 12:27:09 +02:00
unset ( $_GET [ " resetConnection " ]);
//error_log(__METHOD__.__LINE__.$connectionReset);
2011-07-01 12:37:47 +02:00
#printf ("this->uifelamimail->viewMainScreen() start: %s<br>",date("H:i:s",mktime()));
$bofilter =& $this -> bofilter ;
$uiwidgets = CreateObject ( 'felamimail.uiwidgets' );
// fetch the active account with prefs and identities
$preferences =& $this -> preferences ;
$urlMailbox = urlencode ( $this -> mailbox );
//_debug_array($preferences->preferences);
if ( isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ]))
self :: $icServerID = ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'ActiveProfileID' ];
//_debug_array(self::$icServerID);
2011-10-07 12:27:09 +02:00
if ( $connectionReset )
{
error_log ( __METHOD__ . __LINE__ . ' Connection Reset triggered:' . $connectionReset . ' for Profile with ID:' . self :: $icServerID );
emailadmin_bo :: unsetCachedObjects ( self :: $icServerID );
}
2011-07-01 12:37:47 +02:00
if ( is_object ( $preferences )) $imapServer = $preferences -> getIncomingServer ( self :: $icServerID );
//_debug_array($imapServer);
//_debug_array($preferences->preferences);
//error_log(__METHOD__.__LINE__.' ImapServerId:'.$imapServer->ImapServerId.' Prefs:'.array2string($preferences->preferences));
//error_log(__METHOD__.__LINE__.' ImapServerObject:'.array2string($imapServer));
2011-07-18 15:41:13 +02:00
if ( is_object ( $preferences )) $activeIdentity =& $preferences -> getIdentity ( self :: $icServerID , true );
2011-07-01 12:37:47 +02:00
//_debug_array($activeIdentity);
$maxMessages = 50 ;
if ( isset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ]) && ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ] <> 0 )
$maxMessages = ( int ) $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefMailGridBehavior' ];
$userPreferences =& $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ];
// retrieve data for/from user defined accounts
$selectedID = 0 ;
if ( $this -> preferences -> userDefinedAccounts ) $allAccountData = $this -> bopreferences -> getAllAccountData ( $this -> preferences );
if ( $allAccountData ) {
foreach ( $allAccountData as $tmpkey => $accountData )
{
$identity =& $accountData [ 'identity' ];
$icServer =& $accountData [ 'icServer' ];
//_debug_array($identity);
//_debug_array($icServer);
//error_log(__METHOD__.__LINE__.' Userdefined Profiles ImapServerId:'.$icServer->ImapServerId);
if ( empty ( $icServer -> host )) continue ;
$identities [ $identity -> id ] = $identity -> realName . ' ' . $identity -> organization . ' <' . $identity -> emailAddress . '>' ;
if ( ! empty ( $identity -> default )) $selectedID = $identity -> id ;
}
}
if ( empty ( $imapServer -> host ) && count ( $identities ) == 0 && $this -> preferences -> userDefinedAccounts )
{
// redirect to new personal account
egw :: redirect_link ( '/index.php' , array ( 'menuaction' => 'felamimail.uipreferences.editAccountData' ,
'accountID' => " new " ,
'msg' => lang ( " There is no IMAP Server configured. " ) . " - " . lang ( " Please configure access to an existing individual IMAP account. " ),
));
}
$this -> display_app_header ();
$this -> t -> set_file ( array ( " body " => 'mainscreen.tpl' ));
$this -> t -> set_block ( 'body' , 'main' );
$this -> t -> set_block ( 'body' , 'status_row_tpl' );
$this -> t -> set_block ( 'body' , 'error_message' );
$this -> t -> set_block ( 'body' , 'quota_block' );
$this -> t -> set_block ( 'body' , 'subject_same_window' );
$this -> t -> set_block ( 'body' , 'subject_new_window' );
$this -> translate ();
if ( empty ( $imapServer -> host ) && count ( $identities ) == 0 ) {
$errormessage = " <br> " . lang ( " There is no IMAP Server configured. " );
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'emailadmin' ]) {
$errormessage .= " <br> " . lang ( " Configure a valid IMAP Server in emailadmin for the profile you are using. " );
} else {
$errormessage .= " <br> " . lang ( 'Please ask the administrator to correct the emailadmin IMAP Server Settings for you.' );
}
if ( $this -> preferences -> userDefinedAccounts )
$errormessage .= " <br> " . lang ( 'or configure an valid IMAP Server connection using the Manage Accounts/Identities preference in the Sidebox Menu.' );
$this -> t -> set_var ( 'connection_error_message' , $errormessage );
$this -> t -> set_var ( 'message' , ' ' );
$this -> t -> parse ( 'header_rows' , 'error_message' , True );
$this -> t -> parse ( " out " , " main " );
print $this -> t -> get ( 'out' , 'main' );
echo $GLOBALS [ 'egw' ] -> framework -> footer ( false );
exit ;
}
$this -> t -> set_var ( 'activeServerID' , self :: $icServerID );
$this -> t -> set_var ( 'activeFolder' , $urlMailbox );
$this -> t -> set_var ( 'activeFolderB64' , base64_encode ( $this -> mailbox ));
2011-08-01 16:23:45 +02:00
$sentFolder = $this -> bofelamimail -> getSentFolder ( false );
$this -> t -> set_var ( 'sentFolder' ,( $sentFolder ? $sentFolder : '' ));
$this -> t -> set_var ( 'sentFolderB64' ,( $sentFolder ? base64_encode ( $sentFolder ) : '' ));
2011-07-01 12:37:47 +02:00
$draftFolder = $this -> bofelamimail -> getDraftFolder ( false );
$this -> t -> set_var ( 'draftFolder' ,( $draftFolder ? $draftFolder : '' ));
$this -> t -> set_var ( 'draftFolderB64' ,( $draftFolder ? base64_encode ( $draftFolder ) : '' ));
$templateFolder = $this -> bofelamimail -> getTemplateFolder ( false );
$this -> t -> set_var ( 'templateFolder' ,( $templateFolder ? $templateFolder : '' ));
$this -> t -> set_var ( 'templateFolderB64' ,( $templateFolder ? base64_encode ( $templateFolder ) : '' ));
$this -> t -> set_var ( 'oldMailbox' , $urlMailbox );
$this -> t -> set_var ( 'image_path' , EGW_IMAGES );
#printf ("this->uifelamimail->viewMainScreen() Line 272: %s<br>",date("H:i:s",mktime()));
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.viewMainScreen'
);
$refreshURL = $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData );
$this -> t -> set_var ( 'reloadView' , $refreshURL );
// display a warning if vacation notice is active
2011-09-12 16:06:30 +02:00
if (( $imapServer instanceof defaultimap ) && $imapServer -> enableSieve ) {
2011-12-21 16:25:46 +01:00
$scriptName = ( ! empty ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'sieveScriptName' ])) ? $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'sieveScriptName' ] : 'felamimail' ;
$imapServer -> getScript ( $scriptName );
2011-07-01 12:37:47 +02:00
$imapServer -> retrieveRules ( $imapServer -> scriptName );
$vacation = $imapServer -> getVacation ( $imapServer -> scriptName );
//_debug_array($vacation);
// [status] => can be: on, off, by_date
// [end_date] => 1247522400 (timestamp, use showdate for visualisation)
// [start_date] => 1247176800 (timestamp, use showdate for visualisation)
}
if ( is_array ( $vacation ) && ( $vacation [ 'status' ] == 'on' || $vacation [ 'status' ] == 'by_date' ))
{
$dtfrmt = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'dateformat' ];
$this -> t -> set_var ( 'vacation_warning' ,
html :: image ( 'phpgwapi' , 'dialog_warning' , false , 'style="vertical-align: middle; width: 16px;"' ) . lang ( 'Vacation notice is active' ) . ( $vacation [ 'status' ] == 'by_date' ? ' ' . common :: show_date ( $vacation [ 'start_date' ], $dtfrmt , true ) . '->' . common :: show_date ( $vacation [ 'end_date' ], $dtfrmt , true ) : '' ));
}
else
{
$this -> t -> set_var ( 'vacation_warning' , ' ' );
}
//error_log(__METHOD__.__LINE__.'->'.$this->connectionStatus);
// ui for the quotas
if ( $this -> connectionStatus !== false ) {
$quota = $this -> bofelamimail -> getQuotaRoot ();
} else {
$quota [ 'limit' ] = 'NOT SET' ;
}
if ( $quota !== false && $quota [ 'limit' ] != 'NOT SET' ) {
$quotaDisplay = $uiwidgets -> quotaDisplay ( $quota [ 'usage' ], $quota [ 'limit' ]);
$this -> t -> set_var ( 'quota_display' , $quotaDisplay );
} else {
$this -> t -> set_var ( 'quota_display' , ' ' );
}
// navigation
if ( $maxMessages > 0 )
{
$navbarImages = array (
'last' => array (
'action' => " jumpEnd(); return false; " ,
'tooltip' => '' ,
),
'right' => array (
'action' => " skipForward(); return false; " ,
'tooltip' => '' ,
),
'left' => array (
'action' => " skipPrevious(); return false; " ,
'tooltip' => '' ,
),
'first' => array (
'action' => " jumpStart(); return false; " ,
'tooltip' => '' ,
),
);
$navbarButtons = '' ;
foreach ( $navbarImages as $buttonName => $buttonInfo ) {
$navbarButtons .= $uiwidgets -> navbarButton ( $buttonName , $buttonInfo [ 'action' ], $buttonInfo [ 'tooltip' ], 'right' );
}
}
else
{
$navbarButtons = '' ;
}
$this -> t -> set_var ( 'navbarButtonsRight' , $navbarButtons );
$composeImage = $GLOBALS [ 'egw' ] -> common -> image ( 'phpgwapi' , 'new' );
$this -> t -> set_var ( 'composeBGImage' , $composeImage );
2011-08-15 17:52:07 +02:00
$searchImage = $GLOBALS [ 'egw' ] -> common -> image ( 'phpgwapi' , 'search' );
$this -> t -> set_var ( 'searchButton' , $searchImage );
2011-07-01 12:37:47 +02:00
// set the images
$listOfImages = array (
'read_small' ,
'unread_small' ,
'unread_flagged_small' ,
'read_flagged_small' ,
'trash' ,
'sm_envelope' ,
'write_mail' ,
'manage_filter' ,
'msg_icon_sm' ,
'mail_find' ,
'new' ,
'start_kde' ,
'previous_kde' ,
'next_kde' ,
'finnish_kde' ,
'ajax-loader' ,
);
foreach ( $listOfImages as $image ) {
$this -> t -> set_var ( $image , $GLOBALS [ 'egw' ] -> common -> image ( 'felamimail' , $image ));
}
$this -> t -> set_var ( 'img_clear_left' , html :: image ( 'felamimail' , 'clear_left' , lang ( 'clear search' ), 'style="margin-left:5px; cursor: pointer;" onclick="fm_clearSearch()"' ));
// refresh settings
$refreshTime = $userPreferences [ 'refreshTime' ];
$this -> t -> set_var ( 'refreshTime' , $refreshTime * 60 * 1000 );
// other settings
$prefaskformove = intval ( $userPreferences [ 'prefaskformove' ]) ? intval ( $userPreferences [ 'prefaskformove' ]) : 0 ;
$this -> t -> set_var ( 'prefaskformove' , $prefaskformove );
$prefaskformultipleforward = intval ( $userPreferences [ 'prefaskformultipleforward' ]) ? intval ( $userPreferences [ 'prefaskformultipleforward' ]) : 0 ;
$this -> t -> set_var ( 'prefaskformultipleforward' , $prefaskformultipleforward );
#// set the url to open when refreshing
#$linkData = array
#(
# 'menuaction' => 'felamimail.uifelamimail.viewMainScreen'
#);
#$this->t->set_var('refresh_url',$GLOBALS['egw']->link('/index.php',$linkData));
// define the sort defaults
$dateSort = '0' ;
$dateCSS = 'text_small' ;
$fromSort = '3' ;
$fromCSS = 'text_small' ;
$subjectSort = '5' ;
$subjectCSS = 'text_small' ;
$sizeSort = '6' ;
$sizeCSS = 'text_small' ;
// and no overwrite the defaults
switch ( $this -> sort )
{
// sort by date newest first
case '0' :
$dateCSS = 'text_small_bold' ;
break ;
// sort by from z->a
case '2' :
$fromCSS = 'text_small_bold' ;
break ;
// sort by from a->z
case '3' :
$subjectCSS = 'text_small_bold' ;
break ;
// sort by size z->a
case '6' :
$sizeCSS = 'text_small_bold' ;
break ;
}
// sort by date
$this -> t -> set_var ( 'css_class_date' , $dateCSS );
// sort by from
$this -> t -> set_var ( 'css_class_from' , $fromCSS );
// sort by subject
$this -> t -> set_var ( 'css_class_subject' , $subjectCSS );
// sort by size
$this -> t -> set_var ( 'css_class_size' , $sizeCSS );
#_debug_array($this->bofelamimail->sessionData['messageFilter']);
if ( ! empty ( $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'string' ])) {
$this -> t -> set_var ( 'quicksearch' , $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'string' ]);
}
$defaultSearchType = ( isset ( $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'type' ]) ? $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'type' ] : 'quick' );
$defaultSelectStatus = ( isset ( $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'status' ]) ? $this -> bofelamimail -> sessionData [ 'messageFilter' ][ 'status' ] : 'any' );
$searchTypes = array (
'quick' => 'quicksearch' ,
'subject' => 'subject' ,
'body' => 'message' ,
'from' => 'from' ,
'to' => 'to' ,
'cc' => 'cc' ,
);
$selectSearchType = html :: select ( 'searchType' , $defaultSearchType , $searchTypes , false , " style='width:100%;' id='searchType' onchange='document.getElementById( \" quickSearch \" ).focus(); document.getElementById( \" quickSearch \" ).value= \" \" ;return false;' " );
$this -> t -> set_var ( 'select_search' , $selectSearchType );
$statusTypes = array (
'any' => 'any status' ,
'flagged' => 'flagged' ,
'unseen' => 'unread' ,
'answered' => 'replied' ,
'seen' => 'read' ,
'deleted' => 'deleted' ,
);
$selectStatus = html :: select ( 'status' , $defaultSelectStatus , $statusTypes , false , " style='width:100%;' onchange='javascript:quickSearch();' id='status' " );
$this -> t -> set_var ( 'select_status' , $selectStatus );
if ( $this -> connectionStatus === false ) {
2011-10-07 12:27:09 +02:00
$linkData = array ( 'menuaction' => 'felamimail.uifelamimail.viewMainScreen' , 'resetConnection' => true );
$this -> t -> set_var ( 'connection_error_message' , lang ( $this -> bofelamimail -> getErrorMessage ()) .
'<br/><a href="' . egw :: link ( '/index.php' , $linkData ) . '">' .
lang ( 'You may try to reset the connection using this link.' ) . '</a>' );
2011-07-01 12:37:47 +02:00
$this -> t -> set_var ( 'message' , ' ' );
$this -> t -> parse ( 'header_rows' , 'error_message' , True );
} else {
$previewMessageId = ( $this -> bofelamimail -> sessionData [ 'previewMessage' ] ? $this -> bofelamimail -> sessionData [ 'previewMessage' ] : 0 );
if ( $previewMessageId )
{
$headers = $this -> bofelamimail -> getHeaders ( $this -> mailbox , $this -> startMessage , $maxMessages , $this -> sort , $this -> sortReverse , $this -> bofelamimail -> sessionData [ 'messageFilter' ],( $previewMessageId ? $previewMessageId : null ));
}
else
{
$headers = array ( 'header' => array (), 'info' => array ());
}
$headerCount = count ( $headers [ 'header' ]);
$folderStatus = $this -> bofelamimail -> getFolderStatus ( $this -> mailbox );
2011-10-13 16:35:01 +02:00
// since we are connected,(and selected the folder) we check for capabilities SUPPORTS_KEYWORDS to eventually add the keyword filters
if ( $this -> bofelamimail -> icServer -> hasCapability ( 'SUPPORTS_KEYWORDS' ))
{
$statusTypes = $statusTypes + array (
'keyword1' => 'urgent' ,
'keyword2' => 'job' ,
'keyword3' => 'personal' ,
'keyword4' => 'to do' ,
'keyword5' => 'later' ,
);
$selectStatus = html :: select ( 'status' , $defaultSelectStatus , $statusTypes , false , " style='width:100%;' onchange='javascript:quickSearch();' id='status' " );
$this -> t -> set_var ( 'select_status' , $selectStatus );
}
2011-07-01 12:37:47 +02:00
$headers [ 'info' ][ 'total' ] = $folderStatus [ 'messages' ];
$headers [ 'info' ][ 'first' ] = $this -> startMessage ;
$headers [ 'info' ][ 'last' ] = ( $headers [ 'info' ][ 'total' ] > $maxMessages ? $maxMessages : $headers [ 'info' ][ 'total' ]);
//_debug_array($folderStatus);
// if there aren't any messages left (eg. after delete or move)
// adjust $this->startMessage
if ( $maxMessages > 0 && $headerCount == 0 && $this -> startMessage > $maxMessages ) {
$this -> startMessage = $this -> startMessage - $maxMessages ;
}
$msg_icon_sm = $GLOBALS [ 'egw' ] -> common -> image ( 'felamimail' , 'msg_icon_sm' );
// determine how to display the current folder: as sent folder (to address visible) or normal (from address visible)
//$folderType = $this->bofelamimail->getFolderType($this->mailbox);
//_debug_array($this->bofelamimail->sessionData['previewMessage']);
$messageTable = $uiwidgets -> messageTable (
$headers ,
$folderType ,
$this -> mailbox ,
$userPreferences [ 'message_newwindow' ],
$userPreferences [ 'rowOrderStyle' ],
$previewMessageId );
$this -> t -> set_var ( 'header_rows' , $messageTable );
$firstMessage = $headers [ 'info' ][ 'first' ];
$lastMessage = $headers [ 'info' ][ 'last' ];
$totalMessage = $headers [ 'info' ][ 'total' ];
$langTotal = lang ( " total " );
// set the select all/nothing link
if ( $_GET [ " select_all " ] == " select_all " ) {
// link to unselect all messages
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.viewMainScreen'
);
$selectLink = sprintf ( " <a class= \" body_link \" href= \" %s \" >%s</a> " ,
$GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ),
lang ( " Unselect All " ));
$this -> t -> set_var ( 'change_folder_checked' , '' );
$this -> t -> set_var ( 'move_message_checked' , 'checked' );
} else {
// link to select all messages
$linkData = array
(
'select_all' => 'select_all' ,
'menuaction' => 'felamimail.uifelamimail.viewMainScreen'
);
$selectLink = sprintf ( " <a class= \" body_link \" href= \" %s \" >%s</a> " ,
$GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ),
lang ( " Select all " ));
$this -> t -> set_var ( 'change_folder_checked' , 'checked' );
$this -> t -> set_var ( 'move_message_checked' , '' );
}
$this -> t -> set_var ( 'select_all_link' , $selectLink );
$shortName = '' ;
//if ($folderStatus = $this->bofelamimail->getFolderStatus($this->mailbox)) $shortName =$folderStatus['shortDisplayName'];
if ( $folderStatus ) $shortName = $folderStatus [ 'shortDisplayName' ]; // already fetched folderStatus earlier.
$addmessage = '' ;
if ( $message ) $addmessage = ' <font color="red">' . implode ( '; ' , $message ) . '</font> ' ;
$this -> t -> set_var ( 'message' , '<b>' . $shortName . ': </b>' . lang ( " Viewing messages " ) . ( $maxMessages > 0 && $lastMessage > 0 ? " <b> $firstMessage </b> - <b> $lastMessage </b> " : " " ) . " ( $totalMessage $langTotal ) " . $addmessage );
if ( $maxMessages > 0 )
{
if ( $firstMessage > 1 ) {
$linkData = array
(
'menuaction' => 'felamimail.uifelamimail.viewMainScreen' ,
'startMessage' => $this -> startMessage - $maxMessages
);
$link = $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData );
$this -> t -> set_var ( 'link_previous' , " <a class= \" body_link \" href= \" $link\ " > " .lang( " previous " ). " </ a > " );
} else {
$this -> t -> set_var ( 'link_previous' , lang ( " previous " ));
}
if ( $totalMessage > $lastMessage ) {
$linkData = array (
'menuaction' => 'felamimail.uifelamimail.viewMainScreen' ,
'startMessage' => $this -> startMessage + $maxMessages
);
$link = $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData );
$this -> t -> set_var ( 'link_next' , " <a class= \" body_link \" href= \" $link\ " > " .lang( " next " ). " </ a > " );
} else {
$this -> t -> set_var ( 'link_next' , lang ( " next " ));
}
$this -> t -> parse ( 'status_row' , 'status_row_tpl' , True );
//print __LINE__ . ': ' . (microtime(true) - $this->timeCounter) . '<br>';
}
else
{
$this -> t -> set_var ( 'link_previous' , lang ( " previous " ));
$this -> t -> set_var ( 'link_next' , lang ( " next " ));
$this -> t -> parse ( 'status_row' , 'status_row_tpl' , True );
}
}
//print __LINE__ . ': ' . (microtime(true) - $this->timeCounter) . '<br>';
$this -> t -> parse ( " out " , " main " );
$neededSkript = " " ;
if ( $this -> connectionStatus !== false )
{
$neededSkript = " <div id='skriptGridOnFirstLoad' name='skriptGridOnFirstLoad'> " .
$uiwidgets -> get_grid_js ( $folderType , $this -> mailbox , $rowsFetched , $this -> startMessage , false ,( $maxMessages >= 0 ? false : true )) .
" </div> " ;
$this -> bofelamimail -> closeConnection ();
}
print $this -> t -> get ( 'out' , 'main' ) . $neededSkript ;
echo $GLOBALS [ 'egw' ] -> framework -> footer ( false );
}
function array_merge_replace ( $array , $newValues )
{
foreach ( $newValues as $key => $value )
{
if ( is_array ( $value ) )
{
if ( ! isset ( $array [ $key ] ) )
{
$array [ $key ] = array ();
}
$array [ $key ] = $this -> array_merge_replace ( $array [ $key ], $value );
}
else
{
if ( isset ( $array [ $key ] ) && is_array ( $array [ $key ] ) )
{
$array [ $key ][ 0 ] = $value ;
}
else
{
if ( isset ( $array ) && ! is_array ( $array ) )
{
$temp = $array ;
$array = array ();
$array [ 0 ] = $temp ;
}
$array [ $key ] = $value ;
}
}
}
return $array ;
}
/* Returns a string showing the size of the message/attachment */
function show_readable_size ( $bytes , $_mode = 'short' )
{
$bytes /= 1024 ;
$type = 'k' ;
if ( $bytes / 1024 > 1 )
{
$bytes /= 1024 ;
$type = 'M' ;
}
if ( $bytes < 10 )
{
$bytes *= 10 ;
settype ( $bytes , 'integer' );
$bytes /= 10 ;
}
else
settype ( $bytes , 'integer' );
return $bytes . ' ' . $type ;
}
function toggleFilter ()
{
error_log ( __METHOD__ . " called from: " . function_backtrace ());
$this -> bofelamimail -> toggleFilter ();
$this -> viewMainScreen ();
}
function translate ()
{
$this -> t -> set_var ( 'th_bg' , $GLOBALS [ 'egw_info' ][ " theme " ][ " th_bg " ]);
$this -> t -> set_var ( 'bg_01' , $GLOBALS [ 'egw_info' ][ " theme " ][ " bg01 " ]);
$this -> t -> set_var ( 'bg_02' , $GLOBALS [ 'egw_info' ][ " theme " ][ " bg02 " ]);
$this -> t -> set_var ( 'lang_compose' , lang ( 'compose' ));
$this -> t -> set_var ( 'lang_edit_filter' , lang ( 'edit filter' ));
$this -> t -> set_var ( 'lang_move_selected_to' , lang ( 'move selected to' ));
$this -> t -> set_var ( 'lang_doit' , lang ( 'do it!' ));
$this -> t -> set_var ( 'lang_change_folder' , lang ( 'change folder' ));
$this -> t -> set_var ( 'lang_move_message' , lang ( 'move messages' ));
$this -> t -> set_var ( 'desc_read' , lang ( " mark selected as read " ));
$this -> t -> set_var ( 'desc_unread' , lang ( " mark selected as unread " ));
$this -> t -> set_var ( 'desc_important' , lang ( " mark selected as flagged " ));
$this -> t -> set_var ( 'desc_unimportant' , lang ( " mark selected as unflagged " ));
$this -> t -> set_var ( 'desc_deleted' , lang ( " delete selected " ));
$this -> t -> set_var ( 'lang_date' , lang ( " date " ));
$this -> t -> set_var ( 'lang_status' , lang ( 'status' ));
$this -> t -> set_var ( 'lang_size' , lang ( " size " ));
$this -> t -> set_var ( 'lang_search' , lang ( " search " ));
$this -> t -> set_var ( 'lang_replied' , lang ( " replied " ));
$this -> t -> set_var ( 'lang_read' , lang ( " read " ));
$this -> t -> set_var ( " lang_select " , lang ( 'select' ));
$this -> t -> set_var ( 'lang_unread' , lang ( " unread " ));
$this -> t -> set_var ( 'lang_deleted' , lang ( " deleted " ));
$this -> t -> set_var ( 'lang_recent' , lang ( " recent " ));
$this -> t -> set_var ( 'lang_flagged' , lang ( " flagged " ));
$this -> t -> set_var ( 'lang_unflagged' , lang ( " unflagged " ));
$this -> t -> set_var ( 'lang_subject' , lang ( " subject " ));
$this -> t -> set_var ( 'lang_add_to_addressbook' , lang ( " add to addressbook " ));
$this -> t -> set_var ( 'lang_no_filter' , lang ( " no filter " ));
$this -> t -> set_var ( 'lang_connection_failed' , lang ( " The connection to the IMAP Server failed!! " ));
$this -> t -> set_var ( 'lang_select_target_folder' , lang ( " Simply click the target-folder " ));
$this -> t -> set_var ( 'lang_updating_message_status' , lang ( " updating message status " ));
$this -> t -> set_var ( 'lang_max_uploadsize' , lang ( 'max uploadsize' ));
$this -> t -> set_var ( 'lang_loading' , lang ( 'loading' ));
$this -> t -> set_var ( 'lang_deleting_messages' , lang ( 'deleting messages' ));
$this -> t -> set_var ( 'lang_open_all' , lang ( " open all " ));
$this -> t -> set_var ( 'lang_close_all' , lang ( " close all " ));
$this -> t -> set_var ( 'lang_moving_messages_to' , lang ( 'moving messages to' ));
$this -> t -> set_var ( 'lang_copying_messages_to' , lang ( 'copying messages to' ));
$this -> t -> set_var ( 'lang_MoveCopyTitle' ,( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefaskformove' ] == 2 ? lang ( 'Copy or Move Messages?' ) : lang ( 'Move Messages?' )));
$this -> t -> set_var ( 'lang_askformove' ,( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'felamimail' ][ 'prefaskformove' ] == 2 ? lang ( 'Do you really want to move or copy the selected messages to folder:' ) : lang ( 'Do you really want to move the selected messages to folder:' )));
$this -> t -> set_var ( 'lang_move' , lang ( " Move " ));
$this -> t -> set_var ( 'lang_multipleforward' , lang ( " Do you really want to attach the selected messages to the new mail? " ));
$this -> t -> set_var ( 'lang_copy' , lang ( " Copy " ));
$this -> t -> set_var ( 'lang_cancel' , lang ( " Cancel " ));
$this -> t -> set_var ( 'lang_mark_all_messages' , lang ( 'all messages in folder' ));
$this -> t -> set_var ( 'lang_confirm_all_messages' , lang ( 'The action will be applied to all messages of the current folder.\nDo you want to proceed?' ));
$this -> t -> set_var ( 'lang_empty_trash' , lang ( 'empty trash' ));
$this -> t -> set_var ( 'lang_compress_folder' , lang ( 'compress folder' ));
$this -> t -> set_var ( 'lang_skipping_forward' , lang ( 'skipping forward' ));
$this -> t -> set_var ( 'lang_skipping_previous' , lang ( 'skipping previous' ));
$this -> t -> set_var ( 'lang_jumping_to_start' , lang ( 'jumping to start' ));
$this -> t -> set_var ( 'lang_jumping_to_end' , lang ( 'jumping to end' ));
$this -> t -> set_var ( 'lang_updating_view' , lang ( 'updating view' ));
$this -> t -> set_var ( 'lang_toggleFS' , lang ( 'choose from VFS' ));
$this -> t -> set_var ( 'lang_sendnotify' , lang ( 'The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?' ));
}
}
?>