2006-12-11 00:44:18 +01:00
< ? php
/**
* eGW idots template
*
* @ link http :// www . egroupware . org
* @ author Ralf Becker < RalfBecker - AT - outdoor - training . de > rewrite in 12 / 2006
* @ author Pim Snel < pim @ lingewoud . nl > author of the idots template set
* @ license http :// opensource . org / licenses / gpl - license . php GPL - GNU General Public License
* @ package api
* @ subpackage framework
* @ access public
* @ version $Id $
*/
require_once ( EGW_API_INC . '/class.egw_framework.inc.php' );
require_once ( EGW_API_INC . '/class.Template.inc.php' );
2007-01-02 15:08:32 +01:00
require_once ( EGW_API_INC . '/class.dragdrop.inc.php' );
2007-01-05 19:13:33 +01:00
require_once ( EGW_API_INC . '/class.tplsavant2.inc.php' );
2006-12-11 00:44:18 +01:00
/**
* eGW idots template
*
* The idots_framework class draws the default idots template . It ' s a phplib template based template - set .
*
* Other phplib template based template - sets should extend ( not copy ! ) this class and reimplement methods they which to change .
*/
class idots_framework extends egw_framework
{
/**
* HTML of the sidebox menu , get ' s collected here by calls to $this -> sidebox
*
* @ var string
*/
var $sidebox_content = '' ;
/**
* Instance of the phplib Template class for the API ' s template dir ( EGW_TEMPLATE_DIR )
*
* @ var Template
*/
var $tpl ;
2006-12-20 10:24:38 +01:00
/**
* true if $this -> navbar () was called
*
* @ var boolean
*/
var $navbar_done ;
2006-12-11 00:44:18 +01:00
/**
* Constructor
*
* @ param string $template = 'idots' name of the template
* @ return idots_framework
*/
function idots_framework ( $template = 'idots' )
{
2007-01-04 17:34:23 +01:00
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'include_xajax' ] = True ;
$this -> egw_framework ( $template ); // call the constructor of the extended class
2007-01-05 15:06:34 +01:00
2007-01-05 19:13:33 +01:00
$this -> tplsav2 =& new tplsavant2 ();
2007-01-05 15:06:34 +01:00
$this -> tplsav2 -> set_tpl_path ( EGW_SERVER_ROOT . SEP . 'phpgwapi' . SEP . 'templates' . SEP . 'idots' );
2006-12-11 00:44:18 +01:00
}
/**
* Returns the html - header incl . the opening body tag
*
* @ return string with html
*/
function header ()
{
// add a content-type header to overwrite an existing default charset in apache (AddDefaultCharset directiv)
header ( 'Content-type: text/html; charset=' . $GLOBALS [ 'egw' ] -> translation -> charset ());
// catch error echo'ed before the header, ob_start'ed in the header.inc.php
$content = ob_get_contents ();
ob_end_clean ();
2006-12-14 16:17:33 +01:00
// the instanciation of the template has to be here and not in the constructor,
// as the old Template class has problems if restored from the session (php-restore)
$this -> tpl =& new Template ( EGW_TEMPLATE_DIR );
2006-12-11 00:44:18 +01:00
$this -> tpl -> set_file ( array ( '_head' => 'head.tpl' ));
$this -> tpl -> set_block ( '_head' , 'head' );
$this -> tpl -> set_var ( $this -> _get_header ());
2006-12-17 14:14:16 +01:00
2006-12-11 00:44:18 +01:00
$content .= $this -> tpl -> fp ( 'out' , 'head' );
2006-12-17 14:14:16 +01:00
$this -> sidebox_content = '' ; // need to be emptied here, as the object get's stored in the session
2006-12-11 00:44:18 +01:00
return $content ;
}
/**
* Returns the html from the body - tag til the main application area ( incl . opening div tag )
*
* @ return string with html
*/
function navbar ()
{
2006-12-20 10:24:38 +01:00
$this -> navbar_done = true ;
2006-12-11 00:44:18 +01:00
// the navbar
$this -> tpl -> set_file ( array ( 'navbar' => 'navbar.tpl' ));
$this -> tpl -> set_block ( 'navbar' , 'extra_blocks_header' , 'extra_block_header' );
$this -> tpl -> set_block ( 'navbar' , 'extra_block_row' , 'extra_block_row' );
$this -> tpl -> set_block ( 'navbar' , 'extra_block_row_raw' , 'extra_block_row_raw' );
$this -> tpl -> set_block ( 'navbar' , 'extra_block_row_no_link' , 'extra_block_row_no_link' );
$this -> tpl -> set_block ( 'navbar' , 'extra_block_spacer' , 'extra_block_spacer' );
$this -> tpl -> set_block ( 'navbar' , 'extra_blocks_footer' , 'extra_blocks_footer' );
$this -> tpl -> set_block ( 'navbar' , 'sidebox_hide_header' , 'sidebox_hide_header' );
$this -> tpl -> set_block ( 'navbar' , 'sidebox_hide_footer' , 'sidebox_hide_footer' );
$this -> tpl -> set_block ( 'navbar' , 'appbox' , 'appbox' );
$this -> tpl -> set_block ( 'navbar' , 'navbar_footer' , 'navbar_footer' );
2006-12-17 14:14:16 +01:00
$this -> tpl -> set_block ( 'navbar' , 'upper_tab_block' , 'upper_tabs' );
$this -> tpl -> set_block ( 'navbar' , 'app_icon_block' , 'app_icons' );
$this -> tpl -> set_block ( 'navbar' , 'app_title_block' , 'app_titles' );
$this -> tpl -> set_block ( 'navbar' , 'app_extra_block' , 'app_extra_icons' );
$this -> tpl -> set_block ( 'navbar' , 'app_extra_icons_div' );
$this -> tpl -> set_block ( 'navbar' , 'app_extra_icons_icon' );
$this -> tpl -> set_block ( 'navbar' , 'navbar_header' , 'navbar_header' );
2006-12-11 00:44:18 +01:00
$apps = $this -> _get_navbar_apps ();
$vars = $this -> _get_navbar ( $apps );
$this -> tpl -> set_var ( $vars );
$content = $this -> tpl -> fp ( 'out' , 'navbar_header' );
// general (app-unspecific) sidebox menu
2007-01-05 15:06:34 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'show_general_sideboxmenu' ] != 'no' )
2006-12-11 00:44:18 +01:00
{
2007-01-05 15:06:34 +01:00
$menu_title = lang ( 'General Menu' );
$file [ 'Home' ] = $apps [ 'home' ][ 'url' ];
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'preferences' ])
{
$file [ 'Preferences' ] = $apps [ 'preferences' ][ 'url' ];
}
$file += array (
array (
'text' => lang ( 'About %1' , $GLOBALS [ 'egw_info' ][ 'apps' ][ $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ]][ 'title' ]),
'no_lang' => True ,
'link' => $apps [ 'about' ][ 'url' ]
),
$GLOBALS [ 'egw_info' ][ 'user' ][ 'userid' ] != 'anonymous' ? 'Logout' : 'Login' => $apps [ 'logout' ][ 'url' ]
);
$this -> sidebox ( '' , $menu_title , $file );
2006-12-11 00:44:18 +01:00
}
2007-01-05 15:06:34 +01:00
2006-12-11 00:44:18 +01:00
$GLOBALS [ 'egw' ] -> hooks -> single ( 'sidebox_menu' , $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ]);
2007-01-05 15:06:34 +01:00
if ( $this -> sidebox_content )
2006-12-11 00:44:18 +01:00
{
2007-01-05 15:06:34 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'auto_hide_sidebox' ])
{
$this -> tpl -> set_var ( 'lang_show_menu' , lang ( 'show menu' ));
$content .= $this -> tpl -> parse ( 'out' , 'sidebox_hide_header' );
2006-12-11 00:44:18 +01:00
2007-01-05 15:06:34 +01:00
$content .= $this -> sidebox_content ; // content from calls to $this->sidebox
2006-12-11 00:44:18 +01:00
2007-01-05 15:06:34 +01:00
$content .= $this -> tpl -> parse ( 'out' , 'sidebox_hide_footer' );
2006-12-11 00:44:18 +01:00
2007-01-05 15:06:34 +01:00
$var [ 'sideboxcolstart' ] = '' ;
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$this -> tpl -> set_var ( $var );
$content .= $this -> tpl -> parse ( 'out' , 'appbox' );
$var [ 'remove_padding' ] = 'style="padding-left:0px;"' ;
$var [ 'sideboxcolend' ] = '' ;
2007-01-02 15:08:32 +01:00
}
2007-01-05 15:06:34 +01:00
else
2007-01-02 15:08:32 +01:00
{
2007-01-05 15:06:34 +01:00
$GLOBALS [ 'phpgw' ] -> preferences -> read_repository ();
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$prefs = array ();
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ])
{
$sideboxwidth = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'idotssideboxwidth' ];
}
if ( intval ( $sideboxwidth ) < 1 )
{
$sideboxwidth = 203 ;
}
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$var [ 'menu_link' ] = '' ;
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$var [ 'sideboxcolstart' ] = '<td id="tdSidebox" valign="top"><div id="thesideboxcolumn" style="width:' . $sideboxwidth . 'px">' ;
2007-01-06 07:29:43 +01:00
$var [ 'sideboxcolstart' ] .= '<div id="sideresize"></div>' ;
2007-01-05 15:06:34 +01:00
$var [ 'remove_padding' ] = '' ;
$this -> tpl -> set_var ( $var );
$content .= $this -> tpl -> parse ( 'out' , 'appbox' );
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$content .= $this -> sidebox_content ;
$var [ 'sideboxcolend' ] = '</div></td>' ;
// Add DHTML for resizing sidebox menu
// include wz_dragdrop once
if ( ! $GLOBALS [ 'egw_info' ][ 'flags' ][ 'wz_dragdrop_included' ])
{
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'need_footer' ] .= " <!-- BEGIN JavaScript for wz_dragdrop.js --> \n " ;
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'need_footer' ] .= '<script language="JavaScript" type="text/javascript" src="' . $GLOBALS [ 'egw_info' ][ 'server' ][ 'webserver_url' ] . '/phpgwapi/js/wz_dragdrop/wz_dragdrop.js"></script>' . " \n " ;
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'wz_dragdrop_included' ] = True ;
}
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$this -> tplsav2 -> assign ( 'sideboxwidth' , $sideboxwidth );
2007-01-02 15:08:32 +01:00
2007-01-05 15:06:34 +01:00
$GLOBALS [ 'egw_info' ][ 'flags' ][ 'need_footer' ] .= $this -> tplsav2 -> fetch ( 'sidebox_dhtml.tpl.php' );
}
}
else
{
$var [ 'sideboxcolend' ] = '' ;
2006-12-11 00:44:18 +01:00
}
$this -> tpl -> set_var ( $var );
$content .= $this -> tpl -> parse ( 'out' , 'navbar_footer' );
// depricated (!) application header, if not disabled
// ToDo: check if it can be removed
if ( !@ $GLOBALS [ 'egw_info' ][ 'flags' ][ 'noappheader' ] && @ isset ( $_GET [ 'menuaction' ]))
{
list ( $app , $class , $method ) = explode ( '.' , $_GET [ 'menuaction' ]);
if ( is_array ( $GLOBALS [ $class ] -> public_functions ) && $GLOBALS [ $class ] -> public_functions [ 'header' ])
{
ob_start ();
$GLOBALS [ $class ] -> header ();
$content .= ob_get_contents ();
ob_end_clean ();
}
}
// hook after navbar
// ToDo: change it to return the content!
ob_start ();
$GLOBALS [ 'egw' ] -> hooks -> process ( 'after_navbar' );
$content .= ob_get_contents ();
ob_end_clean ();
return $content ;
}
2006-12-25 12:05:44 +01:00
/**
* displays a login screen
*
* @ param string $extra_vars for login url
*/
function login_screen ( $extra_vars )
{
$tmpl =& new Template ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'template_dir' ]);
if ( ! is_object ( $GLOBALS [ 'egw' ] -> html ))
{
require_once ( EGW_API_INC . '/class.html.inc.php' );
$GLOBALS [ 'egw' ] -> html = new html ;
}
$tmpl -> set_file ( array ( 'login_form' => 'login.tpl' ));
$tmpl -> set_var ( 'lang_message' , $GLOBALS [ 'loginscreenmessage' ]);
$last_loginid = $_COOKIE [ 'last_loginid' ];
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'show_domain_selectbox' ])
{
foreach ( $GLOBALS [ 'egw_domain' ] as $domain => $data )
{
$domains [ $domain ] = $domain ;
}
$tmpl -> set_var ( array (
'lang_domain' => lang ( 'domain' ),
'select_domain' => $GLOBALS [ 'egw' ] -> html -> select ( 'logindomain' , $_COOKIE [ 'last_domain' ], $domains , true ),
));
}
else
{
/* trick to make domain section disapear */
2006-12-27 16:37:37 +01:00
$tmpl -> set_block ( 'login_form' , 'domain_selection' );
2006-12-25 12:05:44 +01:00
$tmpl -> set_var ( 'domain_selection' , $GLOBALS [ 'egw_info' ][ 'user' ][ 'domain' ] ?
$GLOBALS [ 'egw' ] -> html -> input_hidden ( 'logindomain' , $GLOBALS [ 'egw_info' ][ 'user' ][ 'domain' ]) : '' );
if ( $last_loginid !== '' )
{
reset ( $GLOBALS [ 'egw_domain' ]);
list ( $default_domain ) = each ( $GLOBALS [ 'egw_domain' ]);
if ( $_COOKIE [ 'last_domain' ] != $default_domain && ! empty ( $_COOKIE [ 'last_domain' ]))
{
$last_loginid .= '@' . $_COOKIE [ 'last_domain' ];
}
}
}
require_once ( EGW_API_INC . '/class.config.inc.php' );
$cnf_reg =& new config ( 'registration' );
$cnf_reg -> read_repository ();
$config_reg = $cnf_reg -> config_data ;
unset ( $cnf_reg );
if ( $config_reg [ 'enable_registration' ] == 'True' )
{
if ( $config_reg [ 'register_link' ] == 'True' )
{
$reg_link = ' <a href="' . $GLOBALS [ 'egw' ] -> link ( '/registration/index.php' , 'lang_code=' . $_GET [ 'lang' ]) . '">' . lang ( 'Not a user yet? Register now' ) . '</a><br/>' ;
}
if ( $config_reg [ 'lostpassword_link' ] == 'True' )
{
$lostpw_link = ' <a href="' . $GLOBALS [ 'egw' ] -> link ( '/registration/index.php' , 'menuaction=registration.uireg.lostpw_step1_ask_login&lang_code=' . $_GET [ 'lang' ]) . '">' . lang ( 'Lost password' ) . '</a><br/>' ;
}
if ( $config_reg [ 'lostid_link' ] == 'True' )
{
$lostid_link = ' <a href="' . $GLOBALS [ 'egw' ] -> link ( '/registration/index.php' , 'menuaction=registration.uireg.lostid_step1_ask_email&lang_code=' . $_GET [ 'lang' ]) . '">' . lang ( 'Lost Login Id' ) . '</a><br/>' ;
}
/* if at least one option of "registration" is activated display the registration section */
if ( $config_reg [ 'register_link' ] == 'True' || $config_reg [ 'lostpassword_link' ] == 'True' || $config_reg [ 'lostid_link' ] == 'True' )
{
$tmpl -> set_var ( array (
'register_link' => $reg_link ,
'lostpassword_link' => $lostpw_link ,
'lostid_link' => $lostid_link ,
));
}
else
{
/* trick to make registration section disapear */
$tmpl -> set_block ( 'login_form' , 'registration' );
$tmpl -> set_var ( 'registration' , '' );
}
}
$tmpl -> set_var ( 'login_url' , $GLOBALS [ 'egw_info' ][ 'server' ][ 'webserver_url' ] . '/login.php' . $extra_vars );
$tmpl -> set_var ( 'version' , $GLOBALS [ 'egw_info' ][ 'server' ][ 'versions' ][ 'phpgwapi' ]);
$tmpl -> set_var ( 'cd' , check_logoutcode ( $_GET [ 'cd' ]));
$tmpl -> set_var ( 'cookie' , $last_loginid );
$tmpl -> set_var ( 'lang_username' , lang ( 'username' ));
$tmpl -> set_var ( 'lang_password' , lang ( 'password' ));
$tmpl -> set_var ( 'lang_login' , lang ( 'login' ));
$tmpl -> set_var ( 'website_title' , $GLOBALS [ 'egw_info' ][ 'server' ][ 'site_title' ]);
$tmpl -> set_var ( 'template_set' , $this -> template );
if ( substr ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_file' ], 0 , 4 ) == 'http' )
{
$var [ 'logo_file' ] = $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_file' ];
}
else
{
$var [ 'logo_file' ] = $GLOBALS [ 'egw' ] -> common -> image ( 'phpgwapi' , $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_file' ] ? $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_file' ] : 'logo' );
}
$var [ 'logo_url' ] = $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_url' ] ? $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_url' ] : 'http://www.eGroupWare.org' ;
if ( substr ( $var [ 'logo_url' ], 0 , 4 ) != 'http' )
{
$var [ 'logo_url' ] = 'http://' . $var [ 'logo_url' ];
}
$var [ 'logo_title' ] = $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_title' ] ? $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_logo_title' ] : 'www.eGroupWare.org' ;
$tmpl -> set_var ( $var );
/* language section if activated in site config */
if ( @ $GLOBALS [ 'egw_info' ][ 'server' ][ 'login_show_language_selection' ])
{
$tmpl -> set_var ( array (
'lang_language' => lang ( 'Language' ),
'select_language' => $GLOBALS [ 'egw' ] -> html -> select ( 'lang' , $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'lang' ],
$GLOBALS [ 'egw' ] -> translation -> get_installed_langs (), true ),
));
}
else
{
$tmpl -> set_block ( 'login_form' , 'language_select' );
$tmpl -> set_var ( 'language_select' , '' );
}
/******************************************************** \
* Check if authentification via cookies is allowed *
* and place a time selectbox , how long cookie is valid *
\ ********************************************************/
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'allow_cookie_auth' ])
{
$tmpl -> set_block ( 'login_form' , 'remember_me_selection' );
$tmpl -> set_var ( 'lang_remember_me' , lang ( 'Remember me' ));
$tmpl -> set_var ( 'select_remember_me' , $GLOBALS [ 'egw' ] -> html -> select ( 'remember_me' , 'forever' , array (
false => lang ( 'not' ),
'1hour' => lang ( '1 Hour' ),
'1day' => lang ( '1 Day' ),
'1week' => lang ( '1 Week' ),
'1month' => lang ( '1 Month' ),
'forever' => lang ( 'Forever' ),
), true ));
}
else
{
/* trick to make remember_me section disapear */
$tmpl -> set_block ( 'login_form' , 'remember_me_selection' );
$tmpl -> set_var ( 'remember_me_selection' , '' );
}
$tmpl -> set_var ( 'autocomplete' , ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'autocomplete_login' ] ? 'autocomplete="off"' : '' ));
if ( ! is_object ( $GLOBALS [ 'egw' ] -> js ))
{
require_once ( EGW_API_INC . '/class.javascript.inc.php' );
$GLOBALS [ 'egw' ] -> js = new javascript ();
}
$GLOBALS [ 'egw' ] -> js -> set_onload ( 'document.login_form.login.focus();' );
$this -> render ( $tmpl -> fp ( 'loginout' , 'login_form' ), false , false );
}
/**
* displays a login denied message
*/
function denylogin_screen ()
{
$tmpl =& new Template ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'template_dir' ]);
$tmpl -> set_file ( array (
'login_form' => 'login_denylogin.tpl'
));
$tmpl -> set_var ( array (
'template_set' => 'default' ,
'deny_msg' => lang ( 'Oops! You caught us in the middle of system maintainance.' ) .
'<br />' . lang ( 'Please, check back with us shortly.' ),
));
$this -> render ( $tmpl -> fp ( 'loginout' , 'login_form' ), false , false );
}
2006-12-11 00:44:18 +01:00
/**
* Get navbar as array to eg . set as vars for a template ( from idots ' navbar . inc . php )
*
* Reimplemented so set the vars for the navbar itself ( uses $this -> tpl and the blocks a and b )
*
* @ internal PHP5 protected
* @ param array $apps navbar apps from _get_navbar_apps
* @ return array
*/
function _get_navbar ( $apps )
{
2007-01-05 15:06:34 +01:00
$var = parent :: _get_navbar ( $apps );
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'show_top_menu' ] == 'yes' )
{
$var [ 'quick_add' ] = '' ;
$var [ 'user_info' ] = '' ;
}
2006-12-11 00:44:18 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'click_or_onmouseover' ] == 'onmouseover' )
{
$var [ 'show_menu_event' ] = 'onMouseOver' ;
}
else
{
$var [ 'show_menu_event' ] = 'onClick' ;
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'userid' ] == 'anonymous' )
{
2006-12-25 12:05:44 +01:00
require_once ( EGW_API_INC . '/class.config.inc.php' );
$cnf_reg =& new config ( 'registration' );
2006-12-11 00:44:18 +01:00
$cnf_reg -> read_repository ();
$config_reg = $cnf_reg -> config_data ;
unset ( $cnf_reg );
$this -> tpl -> set_var ( array (
'url' => $GLOBALS [ 'egw' ] -> link ( '/logout.php' ),
'title' => lang ( 'Login' ),
));
$this -> tpl -> fp ( 'upper_tabs' , 'upper_tab_block' );
if ( $config_reg [ enable_registration ] == 'True' && $config_reg [ register_link ] == 'True' )
{
$this -> tpl -> set_var ( array (
'url' => $GLOBALS [ 'egw' ] -> link ( '/registration/index.php' ),
'title' => lang ( 'Register' ),
));
}
}
if ( ! ( $max_icons = $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'max_icons' ]))
{
$max_icons = 30 ;
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'start_and_logout_icons' ] == 'no' )
{
$tdwidth = 100 / $max_icons ;
}
else
{
$tdwidth = 100 / ( $max_icons + 1 ); // +1 for logout
}
$this -> tpl -> set_var ( 'tdwidth' , round ( $tdwidth ));
// not shown in the navbar
foreach ( $apps as $app => $app_data )
{
if ( $app != 'preferences' && $app != 'about' && $app != 'logout' &&
( $app != 'home' || $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'start_and_logout_icons' ] != 'no' ))
{
$this -> tpl -> set_var ( $app_data );
if ( $i < $max_icons )
{
$this -> tpl -> set_var ( $app_data );
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'navbar_format' ] != 'text' )
{
$this -> tpl -> fp ( 'app_icons' , 'app_icon_block' , true );
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'navbar_format' ] != 'icons' )
{
$this -> tpl -> fp ( 'app_titles' , 'app_title_block' , true );
}
}
else // generate extra icon layer shows icons and/or text
{
$this -> tpl -> fp ( 'app_extra_icons' , 'app_extra_block' , true );
}
$i ++ ;
}
}
2006-12-17 14:14:16 +01:00
// settings for the extra icons dif
if ( $i < $max_icons ) // no extra icon div
{
$this -> tpl -> set_var ( 'app_extra_icons_div' , '' );
$this -> tpl -> set_var ( 'app_extra_icons_icon' , '' );
}
else
{
$var [ 'lang_close' ] = lang ( 'Close' );
$var [ 'lang_show_more_apps' ] = lang ( 'show_more_apps' );
}
2006-12-11 00:44:18 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'start_and_logout_icons' ] != 'no' &&
$GLOBALS [ 'egw_info' ][ 'user' ][ 'userid' ] != 'anonymous' )
{
$this -> tpl -> set_var ( $apps [ 'logout' ]);
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'navbar_format' ] != 'text' )
{
$this -> tpl -> fp ( 'app_icons' , 'app_icon_block' , true );
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'navbar_format' ] != 'icons' )
{
$this -> tpl -> fp ( 'app_titles' , 'app_title_block' , true );
}
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'navbar_format' ] == 'icons' )
{
$var [ 'app_titles' ] = '<td colspan="' . $max_icons . '"> </td>' ;
}
return $var ;
}
2007-01-05 15:06:34 +01:00
/**
* Add menu items to the topmenu template class to be displayed
*
* @ param string $app application name
* @ param mixed $alt_label string with alternative menu item label default value = null
* @ access protected
* @ return void
*/
function _add_topmenu_item ( $app , $alt_label = null )
{
$_item [ 'url' ] = $this -> apps [ $app ][ 'url' ];
$_item [ 'label' ] = ( $alt_label ? $alt_label : $this -> apps [ $app ][ 'title' ]);
$this -> tplsav2 -> menuitems [ $app ] = $_item ;
$this -> tplsav2 -> icon_or_star = $GLOBALS [ 'egw_info' ][ 'server' ][ 'webserver_url' ] . '/phpgwapi/templates/' . $this -> template . '/images' . '/orange-ball.png' ;
}
/**
* Add info items to the topmenu template class to be displayed
*
* @ param string $content html of item
* @ access protected
* @ return void
*/
function _add_topmenu_info_item ( $content )
{
$this -> tplsav2 -> menuinfoitems [] = $content ;
}
/**
* Display the string with html of the topmenu if its enabled
*
* @ return void
*/
function topmenu ()
{
$this -> tplsav2 -> menuitems = array ();
$this -> tplsav2 -> menuinfoitems = array ();
$this -> apps = $this -> _get_navbar_apps ();
$this -> _add_topmenu_item ( 'home' );
/* if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'manual' ])
{
$this -> _add_topmenu_item ( 'manual' );
}
*/
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'preferences' ])
{
$this -> _add_topmenu_item ( 'preferences' );
}
$this -> _add_topmenu_item ( 'about' , lang ( 'About %1' , $GLOBALS [ 'egw_info' ][ 'apps' ][ $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ]][ 'title' ]));
$this -> _add_topmenu_item ( 'logout' );
$this -> _add_topmenu_info_item ( $this -> _user_time_info ());
$this -> _add_topmenu_info_item ( $this -> _get_quick_add ());
$this -> tplsav2 -> display ( 'topmenu.tpl.php' );
}
2006-12-11 00:44:18 +01:00
/**
* Returns the html from the closing div of the main application area to the closing html - tag
*
* @ return string html or null if no footer needed / wanted
*/
function footer ()
{
static $footer_done ;
if ( $footer_done ++ ) return ; // prevent multiple footers, not sure we still need this (RalfBecker)
2006-12-20 10:24:38 +01:00
2006-12-11 00:44:18 +01:00
if ( ! isset ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'nofooter' ]) || ! $GLOBALS [ 'egw_info' ][ 'flags' ][ 'nofooter' ])
{
// get the (depricated) application footer
$content = $this -> _get_app_footer ();
// run the hook navbar_end
// ToDo: change to return the content
ob_start ();
$GLOBALS [ 'egw' ] -> hooks -> process ( 'navbar_end' );
$content .= ob_get_contents ();
ob_end_clean ();
// eg. javascript, which need to be at the end of the page
if ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'need_footer' ])
{
$content .= $GLOBALS [ 'egw_info' ][ 'flags' ][ 'need_footer' ];
}
// do the template sets footer, former parse_navbar_end function
// this closes the application area AND renders the closing body- and html-tag
2006-12-20 10:24:38 +01:00
if ( $this -> navbar_done )
2006-12-11 00:44:18 +01:00
{
$this -> tpl -> set_file ( array ( 'footer' => 'footer.tpl' ));
$this -> tpl -> set_var ( $this -> _get_footer ());
$content .= $this -> tpl -> fp ( 'out' , 'footer' );
}
2006-12-20 10:24:38 +01:00
elseif ( ! isset ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'noheader' ]) || ! $GLOBALS [ 'egw_info' ][ 'flags' ][ 'noheader' ])
{
$content .= " </body> \n </html> \n " ; // close body and html tag, eg. for popups
}
2006-12-11 00:44:18 +01:00
if ( DEBUG_TIMER )
{
$totaltime = sprintf ( '%4.2lf' , perfgetmicrotime () - $GLOBALS [ 'egw_info' ][ 'flags' ][ 'page_start_time' ]);
$content .= lang ( 'Page was generated in %1 seconds' , $totaltime );
}
return $content ;
}
}
/**
* Parses one sidebox menu and add ' s the html to $this -> sidebox_content for later use by $this -> navbar
*
* @ param string $appname
* @ param string $menu_title
* @ param array $file
*/
function sidebox ( $appname , $menu_title , $file )
{
2007-01-02 15:08:32 +01:00
if ( ! $appname || ( $appname == $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ] && $file ))
{
$this -> tpl -> set_var ( 'lang_title' , $menu_title );
$this -> sidebox_content .= $this -> tpl -> fp ( 'out' , 'extra_blocks_header' );
foreach ( $file as $text => $url )
{
$this -> sidebox_content .= $this -> _sidebox_menu_item ( $url , $text );
}
$this -> sidebox_content .= $this -> tpl -> parse ( 'out' , 'extra_blocks_footer' );
}
2006-12-11 00:44:18 +01:00
}
/**
* Return a sidebox menu item
*
* @ internal PHP5 protected
* @ param string $item_link
* @ param string $item_text
* @ return string
*/
function _sidebox_menu_item ( $item_link = '' , $item_text = '' )
{
if ( $item_text === '_NewLine_' || $item_link === '_NewLine_' )
{
return $this -> tpl -> parse ( 'out' , 'extra_block_spacer' );
}
if ( strtolower ( $item_text ) == 'grant access' && $GLOBALS [ 'egw_info' ][ 'server' ][ 'deny_user_grants_access' ])
{
return ;
}
$var [ 'icon_or_star' ] = '<img src="' . $GLOBALS [ 'egw_info' ][ 'server' ][ 'webserver_url' ] . '/phpgwapi/templates/' . $this -> template . '/images' . '/orange-ball.png" width="9" height="9" alt="ball"/>' ;
$var [ 'target' ] = '' ;
if ( is_array ( $item_link ))
{
if ( isset ( $item_link [ 'icon' ]))
{
$app = isset ( $item_link [ 'app' ]) ? $item_link [ 'app' ] : $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ];
$var [ 'icon_or_star' ] = $item_link [ 'icon' ] ? '<img style="margin:0px 2px 0px 2px" src="' . $GLOBALS [ 'egw' ] -> common -> image ( $app , $item_link [ 'icon' ]) . '"/>' : False ;
}
$var [ 'lang_item' ] = isset ( $item_link [ 'no_lang' ]) && $item_link [ 'no_lang' ] ? $item_link [ 'text' ] : lang ( $item_link [ 'text' ]);
$var [ 'item_link' ] = $item_link [ 'link' ];
if ( $item_link [ 'target' ])
{
$var [ 'target' ] = ' target="' . $item_link [ 'target' ] . '"' ;
}
}
else
{
$var [ 'lang_item' ] = lang ( $item_text );
$var [ 'item_link' ] = $item_link ;
}
$this -> tpl -> set_var ( $var );
$block = 'extra_block_row' ;
if ( $var [ 'item_link' ] === False )
{
$block .= $var [ 'icon_or_star' ] === False ? '_raw' : '_no_link' ;
}
return $this -> tpl -> parse ( 'out' , $block );
}
}