2011-07-01 12:37:47 +02:00
< ? php
/**
* EGroupware EMailAdmin : User interface
*
* @ link http :// www . stylite . de
* @ package emailadmin
* @ 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 $
*/
/**
* User interface
*/
class emailadmin_ui extends emailadmin_bo
2011-10-06 12:14:13 +02:00
{
2011-07-01 12:37:47 +02:00
var $public_functions = array
(
'index' => True ,
'add' => True ,
'delete' => True ,
'edit' => True ,
'save' => True ,
'listProfiles' => True ,
);
2011-10-06 12:14:13 +02:00
2011-07-01 12:37:47 +02:00
function __construct ()
{
parent :: __construct ();
}
/**
* Main emailadmin page
*
* @ param array $content = null
* @ param string $msg = null
*/
function index ( array $content = null , $msg = null )
{
$accountID = false ;
$groupID = false ;
$filter = '' ;
$rowsfound = 0 ;
if ( is_int ( intval ( $_GET [ 'account_id' ])) && ! empty ( $_GET [ 'account_id' ]))
{
if ( intval ( $_GET [ 'account_id' ]) < 0 ) {
$groupID = intval ( $_GET [ 'account_id' ]);
$filter [ 'ea_group' ] = intval ( $_GET [ 'account_id' ]);
} else {
$accountID = intval ( $_GET [ 'account_id' ]);
$filter [ 'ea_user' ] = intval ( $_GET [ 'account_id' ]);
}
$r = parent :: search ( $filter );
$rowsfound = count ( $r );
}
if ( $rowsfound )
{
2011-10-06 12:14:13 +02:00
if (( $accountID || ! empty ( $groupID )) && $rowsfound == 1 )
2011-07-01 12:37:47 +02:00
{
$linkData = array
(
'menuaction' => 'emailadmin.emailadmin_ui.edit' ,
'profileid' => $r [ 0 ][ 'ea_profile_id' ]
);
$addJavaScript = " <script type= \" text/javascript \" > " . 'egw_openWindowCentered2(\'' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ) . '\',\'ea_editProfile\',700,600);</script>' ;
}
} else {
if ( $accountID || ! empty ( $groupID )) {
$linkData = array
(
'menuaction' => 'emailadmin.emailadmin_ui.edit' ,
'account_id' => ( $accountID ? $accountID : $groupID )
);
$addJavaScript = " <script type= \" text/javascript \" > " . 'egw_openWindowCentered2(\'' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ) . '\',\'ea_addProfile\',700,600);</script>' ;
}
}
if ( $accountID || ! empty ( $groupID )) {
$linkData = array
(
'menuaction' => 'emailadmin.emailadmin_ui.index' ,
);
$listLink = '<a href="' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ) .
'" onClick="return confirm(\'' . lang ( 'Do you really want to reset the filter for the Profile listing' ) . '?\')">' .
lang ( 'reset filter' ) . '</a>' ;
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'admin' ]) {
$linkData = array
(
'menuaction' => 'admin.uiaccounts.list_' . ( $accountID ? 'users' : 'groups' ),
);
$listLink2 = '<a href="' . $GLOBALS [ 'egw' ] -> link ( '/index.php' , $linkData ) . '">' . ( $accountID ? lang ( 'Back to Admin/Userlist' ) : lang ( 'Back to Admin/Grouplist' )) . '</a>' ;
}
unset ( $r );
$subtitle = ( $accountID || ! empty ( $groupID ) ? ' ' . ( $accountID ? lang ( 'filtered by Account' ) : lang ( 'filtered by Group' )) . ' [' . $listLink . ']' . ' [' . $listLink2 . ']' : '' );
}
//_debug_array($content);
$tpl = new etemplate ( 'emailadmin.index' );
if ( ! is_array ( $content ))
{
$content = array (
'nm' => $GLOBALS [ 'egw' ] -> session -> appsession ( 'index' , parent :: APP ),
);
if ( ! is_array ( $content [ 'nm' ]))
{
$content [ 'nm' ] = array (
'get_rows' => 'emailadmin.emailadmin_ui.get_rows' , // I method/callback to request the data for the rows
'no_filter' => True , // nofilter
'no_filter2' => True , // I disable the 2. filter (params are the same as for filter)
'no_cat' => True , // I disable the cat-selectbox
'lettersearch' => True , // I show a lettersearch
'searchletter' => false , // I0 active letter of the lettersearch or false for [all]
'start' => 0 , // IO position in list
'order' => 'ea_order, ea_profile_id' , // IO name of the column to sort after (optional for the sortheaders)
'sort' => 'ASC' , // IO direction of the sort: 'ASC' or 'DESC'
//'default_cols' => '!comment,ctime', // I columns to use if there's no user or default pref (! as first char uses all but the columns listed)
'csv_fields' => false , // I false=disable csv export, true or unset=enable it with auto-detected fieldnames,
//or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type)
);
}
}
elseif ( isset ( $content [ 'nm' ][ 'rows' ][ 'delete' ]))
{
list ( $profileids ) = each ( $content [ 'nm' ][ 'rows' ][ 'delete' ]);
unset ( $content [ 'nm' ][ 'rows' ][ 'delete' ]);
if ( $profileids && self :: delete ( $profileids ))
{
$content [ 'msg' ] = lang ( '%1 entries deleted.' , 1 );
}
else
{
$content [ 'msg' ] = lang ( 'Error deleting entry!' );
}
}
elseif ( isset ( $content [ 'delete' ]))
{
unset ( $content [ 'delete' ]);
if (( $deleted = self :: delete ( $content [ 'nm' ][ 'rows' ][ 'selected' ])))
{
$content [ 'msg' ] = lang ( '%1 entries deleted.' , $deleted );
}
else
{
$content [ 'msg' ] = lang ( 'Error deleting entry!' );
}
}
if ( isset ( $_GET [ 'msg' ])) $msg = $_GET [ 'msg' ];
$content [ 'msg' ] .= $msg ;
/*
if ( $content [ 'action' ] || $content [ 'nm' ][ 'rows' ])
{
if ( $content [ 'action' ])
{
// SOME ACTION AS EDIT, DELETE, ...
$content [ 'msg' ] = self :: action ( $content [ 'action' ], $content [ 'nm' ][ 'rows' ][ 'checked' ]);
unset ( $content [ 'action' ]);
}
elseif ( $content [ 'nm' ][ 'rows' ][ 'delete' ])
{
$content [ 'msg' ] = self :: action ( 'delete' , array_keys ( $content [ 'nm' ][ 'rows' ][ 'delete' ]));
}
unset ( $content [ 'nm' ][ 'rows' ]);
}
*/
if ( $content [ 'AddProfile' ])
{
unset ( $content [ 'AddProfile' ]);
}
if ( $content [ 'button' ])
{
if ( $content [ 'button' ])
{
list ( $button ) = each ( $content [ 'button' ]);
unset ( $content [ 'button' ]);
}
switch ( $button )
{
default :
break ;
}
}
2012-11-20 14:46:32 +01:00
$sel_options [ 'ea_smtp_type' ] = parent :: getSMTPServerTypes ( false );
2011-07-01 12:37:47 +02:00
$sel_options [ 'ea_imap_type' ] = parent :: getIMAPServerTypes ( false );
$sel_options [ 'ea_appname' ] = self :: getAllowedApps ();
// setting for the top of the app, etc.
$content [ 'addJavaScript' ] = $addJavaScript ;
$content [ 'subtitle' ] = $subtitle ;
if ( ! empty ( $filter )) foreach ( $filter as $fk => $fv ) $content [ 'nm' ][ 'col_filter' ][ $fk ] = $fv ;
// seTting the Title of the app
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'app_header' ] = lang ( 'emailadmin' );
2011-10-06 12:14:13 +02:00
$tpl -> exec ( 'emailadmin.emailadmin_ui.index' , $content , $sel_options , $readonlys , array ( 'nm' => $content [ 'nm' ]));
2011-07-01 12:37:47 +02:00
}
/**
* query the table
*
* reimplemented from so_sql to disable action - buttons based on the acl and make some modification on the data
*
* @ param array & $query
* @ param array & $rows returned rows / cups
* @ param array & $readonlys eg . to disable buttons based on acl
* @ param boolean $id_only = false if true only return ( via $rows ) an array of ids , dont save state to session
* @ return int total number of rows matching the selection
*/
function get_rows ( & $query_in , & $rows , & $readonlys , $id_only = false )
{
$query = $query_in ;
$filteredby = '' ;
2012-11-23 15:02:31 +01:00
$defaultID = emailadmin_bo :: getDefaultProfileID ();
2011-07-01 12:37:47 +02:00
if ( $query [ 'searchletter' ]) // only show rows if the order-criteria starts with the given letter
{
$query [ 'col_filter' ][] = ( in_array ( $query [ 'order' ], parent :: $numericfields ) || ( is_string ( $query [ 'order' ]) && ! ( strpos ( $query [ 'order' ], ',' ) === false )) ? 'ea_description' : $query [ 'order' ]) . ' ' .
$GLOBALS [ 'egw' ] -> db -> capabilities [ 'case_insensitive_like' ] . ' ' . $GLOBALS [ 'egw' ] -> db -> quote ( $query [ 'searchletter' ] . '%' );
if ( in_array ( $query [ 'order' ], parent :: $numericfields )) $query_in [ 'order' ] = $query [ 'order' ] = 'ea_description' ;
$filteredby = $query [ 'order' ] . ' ' . lang ( 'starts with' ) . ' ' . $query [ 'searchletter' ];
}
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'app_header' ] = lang ( 'emailadmin' ) . ( $filteredby ? ' - ' . $filteredby : '' );
$total = parent :: get_rows ( $query , $rows , $readonlys );
2012-11-23 15:02:31 +01:00
foreach ( $rows as & $row )
{
if ( - $row [ 'ea_profile_id' ] == $defaultID ) $row [ 'class' ] = 'defaultProfile' ;
}
2011-07-01 12:37:47 +02:00
return $total ;
}
static function getAllowedApps ()
{
$applications = array (
'calendar' => $GLOBALS [ 'egw_info' ][ 'apps' ][ 'calendar' ][ 'title' ],
'felamimail' => $GLOBALS [ 'egw_info' ][ 'apps' ][ 'felamimail' ][ 'title' ],
2011-09-12 15:28:14 +02:00
// 'notifications' => $GLOBALS['egw_info']['apps']['notifications']['title'],
2011-07-01 12:37:47 +02:00
);
asort ( $applications );
return $applications = array_merge ( array ( '' => lang ( 'any application' )), $applications );
}
static function getIMAPLoginTypes ( $serverclass = 'defaultimap' )
{
if ( empty ( $serverclass )) $serverclass = 'defaultimap' ;
//error_log(__METHOD__.' called with:'.$serverclass." with capabilities:".parent::$IMAPServerType[$serverclass]['imapcapabilities']);
$returnval = array (
'standard' => lang ( 'username (standard)' ),
'vmailmgr' => lang ( 'username@domainname (Virtual MAIL ManaGeR)' ),
'admin' => lang ( 'Username/Password defined by admin' ),
'uidNumber' => lang ( 'UserId@domain eg. u1234@domain' ),
);
if ( strpos ( $serverclass , '_' ) === false )
{
include_once ( EGW_INCLUDE_ROOT . '/emailadmin/inc/class.' . $serverclass . '.inc.php' );
}
if ( ! empty ( $serverclass ) && stripos ( constant ( $serverclass . '::CAPABILITIES' ), 'logintypeemail' ) !== false )
{
$returnval [ 'email' ] = lang ( 'use Users eMail-Address (as seen in Useraccount)' );
}
return $returnval ;
}
2011-10-06 12:14:13 +02:00
/**
* Get a list of supported SMTP Auth Config options
2012-04-10 17:38:58 +02:00
*
2011-10-06 12:14:13 +02:00
* @ return array value => label pairs
*/
2012-04-10 17:38:58 +02:00
static public function getSMTPAuthConfig ()
2011-10-06 12:14:13 +02:00
{
return array (
'no' => 'No' ,
'yes' => 'Yes, use credentials of current user or if given credentials below' ,
'ann' => 'Yes, use credentials below only for alarms and notifications, otherwise use credentials of current user' ,
);
}
2011-07-01 12:37:47 +02:00
function edit ( $content = null )
{
//$this->editProfile($profileid);
$etpl = new etemplate ( parent :: APP . '.edit' );
if ( ! is_array ( $content ))
{
$rowfound = false ;
$filter = array ();
if ( is_int ( intval ( $_GET [ 'account_id' ])) && ! empty ( $_GET [ 'account_id' ]))
{
$GLOBALS [ 'egw' ] -> accounts -> get_account_name ( intval ( $_GET [ 'account_id' ]), $lid , $fname , $lname );
if ( intval ( $_GET [ 'account_id' ]) < 0 ) {
$groupID = intval ( $_GET [ 'account_id' ]);
$content [ 'ea_group' ] = $filter [ 'ea_group' ] = $groupID ;
} else {
$accountID = intval ( $_GET [ 'account_id' ]);
$content [ 'ea_user' ] = $filter [ 'ea_user' ] = $accountID ;
}
$content [ 'ea_active' ] = 'yes' ;
$content [ 'ea_imap_login_type' ] = 'admin' ;
$content [ 'ea_description' ] = common :: display_fullname ( $lid , $fname , $lname , intval ( $_GET [ 'account_id' ]));
2012-11-20 16:44:29 +01:00
$content [ 'ea_smtp_type' ] = 'emailadmin_smtp' ;
2012-11-23 15:02:31 +01:00
if ( empty ( $content [ 'defaultQuota' ])) unset ( $content [ 'defaultQuota' ]);
2011-07-01 12:37:47 +02:00
}
if ( ! empty ( $_GET [ 'profileid' ]))
{
$profileID = intval ( $_GET [ 'profileid' ]);
$filter [ 'ea_profile_id' ] = $profileID ;
$rowfound = parent :: read ( $filter );
}
else
{
$content [ 'ea_user_defined_accounts' ] = " yes " ;
2012-11-20 16:44:29 +01:00
$content [ 'ea_smtp_type' ] = 'emailadmin_smtp' ;
2011-07-01 12:37:47 +02:00
}
}
else
{
$rowfound = true ;
// handle action/submit buttons
if ( isset ( $content [ 'delete' ]))
{
unset ( $content [ 'delete' ]);
$button = 'delete' ;
}
if ( isset ( $content [ 'cancel' ]))
{
unset ( $content [ 'cancel' ]);
$button = 'cancel' ;
}
if ( isset ( $content [ 'apply' ]))
{
unset ( $content [ 'apply' ]);
$button = 'apply' ;
}
if ( isset ( $content [ 'save' ]))
{
unset ( $content [ 'save' ]);
$button = 'save' ;
}
unset ( $content [ 'manage_stationery_templates' ]);
//unset($content['tabs']);
if ( ! empty ( $content [ 'smtp_senders_email' ]))
{
$content [ 'ea_smtp_auth_username' ] = $content [ 'ea_smtp_auth_username' ] . ';' . $content [ 'smtp_senders_email' ];
unset ( $content [ 'smtp_senders_email' ]);
}
$this -> data = $content ;
switch ( $button )
{
case 'delete' :
if (( $deleted = self :: delete ( $content [ 'ea_profile_id' ])))
{
$msg = lang ( '%1 entries deleted.' , $deleted );
}
else
{
$msg = lang ( 'Error deleting entry!' );
}
$js = " opener.location.href=' " . $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
'menuaction' => parent :: APP . '.emailadmin_ui.index' ,
'msg' => $msg ,
)) . " '; " ;
$js .= 'window.close();' ;
echo " <html> \n <body> \n <script> \n $js\n </script> \n </body> \n </html> \n " ;
$GLOBALS [ 'egw' ] -> common -> egw_exit ();
2011-10-06 12:14:13 +02:00
break ;
2011-07-01 12:37:47 +02:00
case 'cancel' :
$js .= 'window.close();' ;
echo " <html> \n <body> \n <script> \n $js\n </script> \n </body> \n </html> \n " ;
$GLOBALS [ 'egw' ] -> common -> egw_exit ();
break ;
case 'apply' :
case 'save' :
if ( $etpl -> validation_errors ()) break ; // the user need to fix the error, before we can save the entry
//_debug_array($this->data);
2012-11-23 15:02:31 +01:00
if (( ! empty ( $this -> data [ 'ea_imap_type' ]) &&
$this -> data [ 'defaultQuota' ] &&
stripos ( $this -> data [ 'imapcapabilities' ], 'providedefaultquota' ) !== false ))
{
$classname = $this -> data [ 'ea_imap_type' ];
$classname :: setDefaultQuota ( $this -> data [ 'defaultQuota' ]);
}
2011-07-01 12:37:47 +02:00
if ( parent :: save () != 0 )
{
$msg = lang ( 'Error saving the entry!!!' );
$button = '' ;
}
else
{
$msg = lang ( 'Entry saved' );
}
$js = " opener.location.href=' " . $GLOBALS [ 'egw' ] -> link ( '/index.php' , array (
'menuaction' => parent :: APP . '.emailadmin_ui.index' ,
'msg' => $msg ,
)) . " '; " ;
if ( $button == 'save' )
{
$js .= 'window.close();' ;
echo " <html> \n <body> \n <script> \n $js\n </script> \n </body> \n </html> \n " ;
$GLOBALS [ 'egw' ] -> common -> egw_exit ();
break ;
}
2012-11-23 15:02:31 +01:00
$rowfound = true ;
2011-07-01 12:37:47 +02:00
}
}
2012-11-23 15:02:31 +01:00
$defaultID = emailadmin_bo :: getDefaultProfileID ();
2011-07-01 12:37:47 +02:00
if ( $rowfound ) $content = array_merge ( $this -> data , array ());
2012-11-20 16:44:29 +01:00
$content [ 'ea_smtp_type' ] = ( $content [ 'ea_smtp_type' ] == 'defaultsmtp' ? 'emailadmin_smtp' : $content [ 'ea_smtp_type' ]);
2011-10-06 12:14:13 +02:00
$preserv [ 'smtpcapabilities' ] = $content [ 'smtpcapabilities' ] =
2012-11-19 13:53:33 +01:00
constant (( ! empty ( $content [ 'ea_smtp_type' ]) ? $content [ 'ea_smtp_type' ] : 'emailadmin_smtp' ) . '::CAPABILITIES' );
2011-10-06 12:14:13 +02:00
$preserv [ 'imapcapabilities' ] = $content [ 'imapcapabilities' ] =
2011-07-01 12:37:47 +02:00
constant (( ! empty ( $content [ 'ea_imap_type' ]) ? $content [ 'ea_imap_type' ] : 'defaultimap' ) . '::CAPABILITIES' );
2012-11-23 15:02:31 +01:00
if ( - $content [ 'ea_profile_id' ] != $defaultID && stripos ( $preserv [ 'imapcapabilities' ], 'providedefaultquota' ) !== false )
{
$preserv [ 'imapcapabilities' ] = $content [ 'imapcapabilities' ] = str_ireplace ( array ( 'providedefaultquota|' , '|providedefaultquota' , 'providedefaultquota' ), '' , $preserv [ 'imapcapabilities' ]);
}
$content [ 'defaultQuota' ] = (( ! empty ( $content [ 'ea_imap_type' ]) && stripos ( $content [ 'imapcapabilities' ], 'providedefaultquota' ) !== false ) ? $content [ 'ea_imap_type' ] :: getDefaultQuota () : 0 );
if ( empty ( $content [ 'defaultQuota' ])) unset ( $content [ 'defaultQuota' ]);
//_debug_array(array(-$content['ea_profile_id']!=$defaultID,$defaultID,-$content['ea_profile_id'],$preserv,$readonlys));
2011-07-01 12:37:47 +02:00
if ( ! empty ( $msg )) $content [ 'msg' ] = $msg ;
list ( $content [ 'ea_smtp_auth_username' ], $content [ 'smtp_senders_email' ]) = explode ( ';' , $content [ 'ea_smtp_auth_username' ]);
$preserv [ 'ea_profile_id' ] = $content [ 'ea_profile_id' ];
//$preserv['ea_stationery_active_templates'] = $content['ea_stationery_active_templates'];
2012-11-20 14:46:32 +01:00
$sel_options [ 'ea_smtp_type' ] = parent :: getSMTPServerTypes ( false );
2011-07-01 12:37:47 +02:00
$sel_options [ 'ea_imap_type' ] = parent :: getIMAPServerTypes ( false );
$sel_options [ 'ea_appname' ] = self :: getAllowedApps ();
$sel_options [ 'ea_imap_login_type' ] = self :: getIMAPLoginTypes ( $content [ 'ea_imap_type' ]);
// Stationery settings
$bostationery = new felamimail_bostationery ();
$sel_options [ 'ea_stationery_active_templates' ] = $bostationery -> get_stored_templates ();
// setup history
$content [ 'history' ] = array (
'id' => $content [ 'ea_profile_id' ],
'app' => 'emailadmin'
);
//_debug_array($content);
foreach ( $this -> tracking -> field2label as $field => $label ) {
$sel_options [ 'status' ][ $field ] = lang ( $label );
}
2011-10-06 12:14:13 +02:00
$sel_options [ 'ea_smtp_auth' ] = self :: getSMTPAuthConfig ();
/*
2011-07-01 12:37:47 +02:00
$content [ 'stored_templates' ] = html :: checkbox_multiselect (
'ea_stationery_active_templates' , $content [ 'ea_stationery_active_templates' ]
, $bostationery -> get_stored_templates (), true , '' , 3 , true , 'width: 100%;' );
$content [ 'manage_stationery_templates' ] =
html :: a_href (
lang ( 'manage stationery templates' ),
'/index.php?menuaction=etemplate.editor.edit' ,
array ( 'name' => 'felamimail.stationery' ),
'target="_blank"'
);
*/
//_debug_array($this->data);
2012-04-10 17:38:58 +02:00
$GLOBALS [ 'egw' ] -> js -> set_onload ( 'javascript:disableGroupSelector();' );
2011-07-01 12:37:47 +02:00
return $etpl -> exec ( parent :: APP . '.emailadmin_ui.edit' , $content , $sel_options , $readonlys , $preserv , 2 );
}
function add ()
{
$this -> edit ();
}
function delete ( $profileid = null )
{
$_profileID = ( $profileid ? $profileid : ( int ) $_GET [ 'profileid' ]);
if ( empty ( $_profileID )) return 0 ;
return parent :: delete ( $_profileID );
}
function listProfiles ()
{
$GLOBALS [ 'egw' ] -> hooks -> register_all_hooks ();
self :: index ();
}
}