From 38bb1c75caa606827a3ce08c2eb06fb990909a37 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 6 Aug 2008 07:33:36 +0000 Subject: [PATCH] "fixed topmenu to not query every info again" --- .../idots/class.idots_framework.inc.php | 286 +++++++++--------- 1 file changed, 140 insertions(+), 146 deletions(-) diff --git a/phpgwapi/templates/idots/class.idots_framework.inc.php b/phpgwapi/templates/idots/class.idots_framework.inc.php index c873319a42..df3be6e0fb 100644 --- a/phpgwapi/templates/idots/class.idots_framework.inc.php +++ b/phpgwapi/templates/idots/class.idots_framework.inc.php @@ -1,7 +1,7 @@ rewrite in 12/2006 * @author Pim Snel author of the idots template set @@ -14,9 +14,9 @@ /** * 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 @@ -45,15 +45,15 @@ class idots_framework extends egw_framework * @var boolean */ var $navbar_done; - + /** - * Contains array with linked icons in the topmenu - * + * Contains array with linked icons in the topmenu + * * @var mixed * @access public */ var $topmenu_icon_arr = array(); - + /** * Constructor * @@ -64,11 +64,11 @@ class idots_framework extends egw_framework { $GLOBALS['egw_info']['flags']['include_xajax'] = True; $this->egw_framework($template); // call the constructor of the extended class - + $this->tplsav2 =& new tplsavant2(); $this->tplsav2->set_tpl_path(EGW_SERVER_ROOT.SEP.'phpgwapi'.SEP.'templates'.SEP.'idots'); } - + /** * Returns the html-header incl. the opening body tag * @@ -78,26 +78,26 @@ class idots_framework extends egw_framework { // 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(); - + // 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); $this->tpl->set_file(array('_head' => 'head.tpl')); $this->tpl->set_block('_head','head'); - + $this->tpl->set_var($this->_get_header()); - + $content .= $this->tpl->fp('out','head'); - - $this->sidebox_content = ''; // need to be emptied here, as the object get's stored in the session - + + $this->sidebox_content = ''; // need to be emptied here, as the object get's stored in the session + return $content; } - + /** * Returns the html from the body-tag til the main application area (incl. opening div tag) * @@ -105,17 +105,11 @@ class idots_framework extends egw_framework */ function navbar() { - if($GLOBALS['egw_info']['user']['preferences']['common']['show_general_menu'] != 'sidebox') - { - $GLOBALS['egw']->hooks->process('topmenu_info'); - $content = $this->topmenu(); - } - $this->navbar_done = true; - + // 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'); @@ -126,28 +120,35 @@ class idots_framework extends egw_framework $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'); - + $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'); - + $apps = $this->_get_navbar_apps(); $vars = $this->_get_navbar($apps); - + + if($GLOBALS['egw_info']['user']['preferences']['common']['show_general_menu'] != 'sidebox') + { + $GLOBALS['egw']->hooks->process('topmenu_info'); + $content = $this->topmenu($vars,$apps); + $vars['current_users'] = $vars['quick_add'] = $vars['user_info']=''; + } + $this->tpl->set_var($vars); $content .= $this->tpl->fp('out','navbar_header'); - + // general (app-unspecific) sidebox menu if($GLOBALS['egw_info']['user']['preferences']['common']['show_general_menu'] == 'sidebox') //if($GLOBALS['egw_info']['user']['preferences']['common']['show_general_sideboxmenu']!='no') { $menu_title = lang('General Menu'); - + $file['Home'] = $apps['home']['url']; if($GLOBALS['egw_info']['user']['apps']['preferences']) { @@ -167,22 +168,22 @@ class idots_framework extends egw_framework ); $this->sidebox('',$menu_title,$file); } - + $GLOBALS['egw']->hooks->single('sidebox_menu',$GLOBALS['egw_info']['flags']['currentapp']); - + if($this->sidebox_content) { 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'); - + $content .= $this->sidebox_content; // content from calls to $this->sidebox - + $content .= $this->tpl->parse('out','sidebox_hide_footer'); - + $var['sideboxcolstart']=''; - + $this->tpl->set_var($var); $content .= $this->tpl->parse('out','appbox'); $var['remove_padding'] = 'style="padding-left:0px;"'; @@ -191,9 +192,9 @@ class idots_framework extends egw_framework else { $GLOBALS['phpgw']->preferences->read_repository(); - + $prefs = array(); - + if ($GLOBALS['egw_info']['user']['preferences']['common']) { $sideboxwidth = $GLOBALS['egw_info']['user']['preferences']['common']['idotssideboxwidth']; @@ -202,32 +203,32 @@ class idots_framework extends egw_framework { $sideboxwidth = 203; } - + $var['menu_link'] = ''; - + $var['sideboxcolstart'] = '
'; $var['sideboxcolstart'] .= '
'; $var['remove_padding'] = ''; $this->tpl->set_var($var); $content .= $this->tpl->parse('out','appbox'); - + $content .= $this->sidebox_content; - + $var['sideboxcolend'] = '
'; - + $this->tplsav2->assign('sideboxwidth', $sideboxwidth); - + $GLOBALS['egw_info']['flags']['need_footer'] .= $this->tplsav2->fetch('sidebox_dhtml.tpl.php'); } } else { - $var['sideboxcolend']=''; + $var['sideboxcolend']=''; } - + $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'])) @@ -241,16 +242,16 @@ class idots_framework extends egw_framework ob_end_clean(); } } - + // hook after navbar ob_start(); $GLOBALS['egw']->hooks->process('after_navbar'); $content .= ob_get_contents(); ob_end_clean(); - + return $content; } - + /** * displays a login screen * @@ -259,13 +260,13 @@ class idots_framework extends egw_framework function login_screen($extra_vars) { $tmpl =& new Template($GLOBALS['egw_info']['server']['template_dir']); - + $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) @@ -281,23 +282,23 @@ class idots_framework extends egw_framework { /* trick to make domain section disapear */ $tmpl->set_block('login_form','domain_selection'); - $tmpl->set_var('domain_selection',$GLOBALS['egw_info']['user']['domain'] ? + $tmpl->set_var('domain_selection',$GLOBALS['egw_info']['user']['domain'] ? 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']; } } } - + $config_reg = config::read('registration'); - + if($config_reg['enable_registration'] == 'True') { if ($config_reg['register_link'] == 'True') @@ -312,7 +313,7 @@ class idots_framework extends egw_framework { $lostid_link=' '.lang('Lost Login Id').'
'; } - + /* 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') { @@ -329,19 +330,19 @@ class idots_framework extends egw_framework $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']; @@ -357,7 +358,7 @@ class idots_framework extends egw_framework } $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']) { @@ -372,12 +373,12 @@ class idots_framework extends egw_framework $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'); @@ -398,34 +399,34 @@ class idots_framework extends egw_framework $tmpl->set_var('remember_me_selection',''); } $tmpl->set_var('autocomplete', ($GLOBALS['egw_info']['server']['autocomplete_login'] ? 'autocomplete="off"' : '')); - + $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.'). '
'.lang('Please, check back with us shortly.'), )); $this->render($tmpl->fp('loginout','login_form'),false,false); - } - + } + /** * 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 @@ -435,14 +436,7 @@ class idots_framework extends egw_framework function _get_navbar($apps) { $var = parent::_get_navbar($apps); - - if($GLOBALS['egw_info']['user']['preferences']['common']['show_general_menu'] != 'sidebox') - { - $var['current_users'] = ''; - $var['quick_add'] = ''; - $var['user_info']=''; - } - + if($GLOBALS['egw_info']['user']['preferences']['common']['click_or_onmouseover'] == 'onmouseover') { $var['show_menu_event'] = 'onMouseOver'; @@ -451,11 +445,11 @@ class idots_framework extends egw_framework { $var['show_menu_event'] = 'onClick'; } - + if($GLOBALS['egw_info']['user']['userid'] == 'anonymous') { $config_reg = config::read('registration'); - + $this->tpl->set_var(array( 'url' => $GLOBALS['egw']->link('/logout.php'), 'title' => lang('Login'), @@ -469,12 +463,12 @@ class idots_framework extends egw_framework )); } } - + 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; @@ -484,7 +478,7 @@ class idots_framework extends egw_framework $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) { @@ -492,7 +486,7 @@ class idots_framework extends egw_framework ($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); @@ -523,7 +517,7 @@ class idots_framework extends egw_framework $var['lang_close'] = lang('Close'); $var['lang_show_more_apps'] = lang('show_more_apps'); } - if ($GLOBALS['egw_info']['user']['preferences']['common']['start_and_logout_icons'] != 'no' && + if ($GLOBALS['egw_info']['user']['preferences']['common']['start_and_logout_icons'] != 'no' && $GLOBALS['egw_info']['user']['userid'] != 'anonymous') { $this->tpl->set_var($apps['logout']); @@ -536,35 +530,35 @@ class idots_framework extends egw_framework $this->tpl->fp('app_titles','app_title_block',true); } } - + if($GLOBALS['egw_info']['user']['preferences']['common']['navbar_format'] == 'icons') { - $var['app_titles'] = ' '; + $var['app_titles'] = ' '; } return $var; } - + /** - * 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 + * Add menu items to the topmenu template class to be displayed + * + * @param array $app application data + * @param mixed $alt_label string with alternative menu item label default value = null * @param string $urlextra string with alternate additional code inside -tag * @access protected * @return void */ - function _add_topmenu_item($app,$alt_label=null) + function _add_topmenu_item(array $app_data,$alt_label=null) { - $_item['url'] = $this->apps[$app]['url']; - $_item['urlextra'] = $this->apps[$app]['target']; - $_item['label'] = ($alt_label?$alt_label:$this->apps[$app]['title']); - $this->tplsav2->menuitems[$app] = $_item; + $_item['url'] = $app_data['url']; + $_item['urlextra'] = $app_data['target']; + $_item['label'] = ($alt_label?$alt_label:$app_data['title']); + $this->tplsav2->menuitems[$app_data['name']] = $_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 - * + * Add info items to the topmenu template class to be displayed + * * @param string $content html of item * @access protected * @return void @@ -573,50 +567,50 @@ class idots_framework extends egw_framework { $this->tplsav2->menuinfoitems[] = $content; } - + /** * Display the string with html of the topmenu if its enabled - * - * @return void + * + * @param array $vars + * @param array $apps + * @return string */ - function topmenu() + function topmenu(array &$vars,array &$apps) { $this->tplsav2->menuitems = array(); $this->tplsav2->menuinfoitems = array(); - - $this->apps = $this->_get_navbar_apps(); - - $this->_add_topmenu_item('home'); - + + $this->_add_topmenu_item($apps['home']); + if($GLOBALS['egw_info']['user']['apps']['preferences']) { - $this->_add_topmenu_item('preferences'); + $this->_add_topmenu_item($apps['preferences']); } - - if($GLOBALS['egw_info']['user']['apps']['manual'] && $this->apps['manual']) + + if($GLOBALS['egw_info']['user']['apps']['manual'] && isset($apps['manual'])) { - $this->_add_topmenu_item('manual'); + $this->_add_topmenu_item($apps['manual']); } - - //$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_item($apps['about'],lang('About %1',$GLOBALS['egw_info']['apps'][$GLOBALS['egw_info']['flags']['currentapp']]['title'])); + $this->_add_topmenu_item($apps['logout']); + $this->tplsav2->assign('info_icons',$this->topmenu_icon_arr); - + if($GLOBALS['egw_info']['user']['apps']['notifications']) { $this->_add_topmenu_info_item($this->_get_notification_bell()); } - $this->_add_topmenu_info_item($this->_user_time_info()); - $this->_add_topmenu_info_item($this->_current_users()); - $this->_add_topmenu_info_item($this->_get_quick_add()); - + $this->_add_topmenu_info_item($vars['user_info']); + $this->_add_topmenu_info_item($vars['current_users']); + $this->_add_topmenu_info_item($vars['quick_add']); + return $this->tplsav2->fetch('topmenu.tpl.php'); } - + /** - * called by hooks to add an icon in the topmenu info location - * + * called by hooks to add an icon in the topmenu info location + * * @param string $id unique element id * @param string $icon_src src of the icon image. Make sure this nog height then 18pixels * @param string $iconlink where the icon links to @@ -631,15 +625,15 @@ class idots_framework extends egw_framework $icon_arr['blink'] = $blink; $icon_arr['link'] = $iconlink; $icon_arr['image'] = $icon_src; - + if(!is_null($tooltip)) { $icon_arr['tooltip'] = html::tooltip($tooltip); } - + $this->topmenu_icon_arr[]=$icon_arr; } - + /** * Returns the html from the closing div of the main application area to the closing html-tag * @@ -649,25 +643,25 @@ class idots_framework extends egw_framework { static $footer_done; if ($footer_done++) return; // prevent multiple footers, not sure we still need this (RalfBecker) - + 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 if ($this->navbar_done) @@ -683,7 +677,7 @@ class idots_framework extends egw_framework return $content; } } - + /** * Parses one sidebox menu and add's the html to $this->sidebox_content for later use by $this->navbar * @@ -697,7 +691,7 @@ class idots_framework extends egw_framework { $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); @@ -705,7 +699,7 @@ class idots_framework extends egw_framework $this->sidebox_content .= $this->tpl->parse('out','extra_blocks_footer'); } } - + /** * Return a sidebox menu item * @@ -720,11 +714,11 @@ class idots_framework extends egw_framework { return $this->tpl->parse('out','extra_block_spacer'); } - if (strtolower($item_text) == 'grant access' && $GLOBALS['egw_info']['server']['deny_user_grants_access']) + if (strtolower($item_text) == 'grant access' && $GLOBALS['egw_info']['server']['deny_user_grants_access']) { return; } - + $var['icon_or_star']='ball'; $var['target'] = ''; if(is_array($item_link)) @@ -738,10 +732,10 @@ class idots_framework extends egw_framework $var['item_link'] = $item_link['link']; if ($item_link['target']) { - if (strpos($item_link['target'], 'target=') !== false) + if (strpos($item_link['target'], 'target=') !== false) { $var['target'] = $item_link['target']; - } + } else { $var['target'] = ' target="' . $item_link['target'] . '"'; @@ -754,7 +748,7 @@ class idots_framework extends egw_framework $var['item_link'] = $item_link; } $this->tpl->set_var($var); - + $block = 'extra_block_row'; if ($var['item_link'] === False) {