Index: dashboard.php =================================================================== --- dashboard.php (revision 27618) +++ dashboard.php (working copy) @@ -77,6 +77,11 @@ $dashconf['severity'] = zbx_empty($severity) ? null : explode(';', $severity); $dashconf['severity'] = zbx_toHash($dashconf['severity']); + // widgets + $widgets = CProfile::get('web.dashconf.widgets.list', null); + $widgets = zbx_empty($widgets) ? null : explode(';', $widgets); + $widgets = zbx_toHash($widgets); + $config = select_config(); $dashconf['extAck'] = $config['event_ack_enable'] ? CProfile::get('web.dashconf.events.extAck', 0) : 0; } @@ -254,25 +259,31 @@ $leftColumn = array(); // favorite graphs -$graph_menu = get_icon('menu', array('menu' => 'graphs')); -$fav_grph = new CUIWidget('hat_favgrph', make_favorite_graphs(), CProfile::get('web.dashboard.hats.hat_favgrph.state', 1)); -$fav_grph->setHeader(_('Favourite graphs'), array($graph_menu)); -$fav_grph->setFooter(new CLink(_('Graphs').' »', 'charts.php', 'highlight'), true); -$leftColumn[] = $fav_grph; +if (isset($widgets['6']) or !isset($widgets)) { + $graph_menu = get_icon('menu', array('menu' => 'graphs')); + $fav_grph = new CUIWidget('hat_favgrph', make_favorite_graphs(), CProfile::get('web.dashboard.hats.hat_favgrph.state', 1)); + $fav_grph->setHeader(_('Favourite graphs'), array($graph_menu)); + $fav_grph->setFooter(new CLink(_('Graphs').' »', 'charts.php', 'highlight'), true); + $leftColumn[] = $fav_grph; +} // favorite screens -$screen_menu = get_icon('menu', array('menu' => 'screens')); -$fav_scr = new CUIWidget('hat_favscr', make_favorite_screens(), CProfile::get('web.dashboard.hats.hat_favscr.state', 1)); -$fav_scr->setHeader(_('Favourite screens'), array($screen_menu)); -$fav_scr->setFooter(new CLink(_('Screens').' »', 'screens.php', 'highlight'), true); -$leftColumn[] = $fav_scr; +if (isset($widgets['7']) or !isset($widgets)) { + $screen_menu = get_icon('menu', array('menu' => 'screens')); + $fav_scr = new CUIWidget('hat_favscr', make_favorite_screens(), CProfile::get('web.dashboard.hats.hat_favscr.state', 1)); + $fav_scr->setHeader(_('Favourite screens'), array($screen_menu)); + $fav_scr->setFooter(new CLink(_('Screens').' »', 'screens.php', 'highlight'), true); + $leftColumn[] = $fav_scr; +} // favorite sysmaps -$sysmap_menu = get_icon('menu', array('menu' => 'sysmaps')); -$fav_maps = new CUIWidget('hat_favmap', make_favorite_maps(), CProfile::get('web.dashboard.hats.hat_favmap.state', 1)); -$fav_maps->setHeader(_('Favourite maps'), array($sysmap_menu)); -$fav_maps->setFooter(new CLink(_('Maps').' »', 'maps.php', 'highlight'), true); -$leftColumn[] = $fav_maps; +if (isset($widgets['8']) or !isset($widgets)) { + $sysmap_menu = get_icon('menu', array('menu' => 'sysmaps')); + $fav_maps = new CUIWidget('hat_favmap', make_favorite_maps(), CProfile::get('web.dashboard.hats.hat_favmap.state', 1)); + $fav_maps->setHeader(_('Favourite maps'), array($sysmap_menu)); + $fav_maps->setFooter(new CLink(_('Maps').' »', 'maps.php', 'highlight'), true); + $leftColumn[] = $fav_maps; +} // refresh tab $refresh_tab = array( @@ -289,7 +300,7 @@ $rightColumn = array(); // status of zbx -if ($USER_DETAILS['type'] == USER_TYPE_SUPER_ADMIN) { +if ($USER_DETAILS['type'] == USER_TYPE_SUPER_ADMIN and (isset($widgets['0']) or !isset($widgets))) { $refresh_menu = get_icon('menu', array('menu' => 'hat_stszbx')); $zbxStatus = new CUIWidget('hat_stszbx', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_stszbx.state', 1)); $zbxStatus->setHeader(_('Status of Zabbix'), array($refresh_menu)); @@ -298,42 +309,52 @@ } // system status -$refresh_menu = new CIcon(_('Menu'), 'iconmenu', 'create_page_menu(event,"hat_syssum");'); -$sys_stat = new CUIWidget('hat_syssum', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_syssum.state', 1)); -$sys_stat->setHeader(_('System status'), array($refresh_menu)); -$sys_stat->setFooter(new CDiv(SPACE, 'textwhite', 'hat_syssum_footer')); -$rightColumn[] = $sys_stat; +if (isset($widgets['1']) or !isset($widgets)) { + $refresh_menu = new CIcon(_('Menu'), 'iconmenu', 'create_page_menu(event,"hat_syssum");'); + $sys_stat = new CUIWidget('hat_syssum', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_syssum.state', 1)); + $sys_stat->setHeader(_('System status'), array($refresh_menu)); + $sys_stat->setFooter(new CDiv(SPACE, 'textwhite', 'hat_syssum_footer')); + $rightColumn[] = $sys_stat; +} // host status -$refresh_menu = get_icon('menu', array('menu' => 'hat_hoststat')); -$hoststat = new CUIWidget('hat_hoststat', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_hoststat.state', 1)); -$hoststat->setHeader(_('Host status'), array($refresh_menu)); -$hoststat->setFooter(new CDiv(SPACE, 'textwhite', 'hat_hoststat_footer')); -$rightColumn[] = $hoststat; +if (isset($widgets['2']) or !isset($widgets)) { + $refresh_menu = get_icon('menu', array('menu' => 'hat_hoststat')); + $hoststat = new CUIWidget('hat_hoststat', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_hoststat.state', 1)); + $hoststat->setHeader(_('Host status'), array($refresh_menu)); + $hoststat->setFooter(new CDiv(SPACE, 'textwhite', 'hat_hoststat_footer')); + $rightColumn[] = $hoststat; +} // last issues -$refresh_menu = get_icon('menu', array('menu' => 'hat_lastiss')); -$lastiss = new CUIWidget('hat_lastiss', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_lastiss.state', 1)); -$lastiss->setHeader(_n('Last %1$d issue', 'Last %1$d issues', DEFAULT_LATEST_ISSUES_CNT), array($refresh_menu)); -$lastiss->setFooter(new CDiv(SPACE, 'textwhite', 'hat_lastiss_footer')); -$rightColumn[] = $lastiss; +if (isset($widgets['3']) or !isset($widgets)) { + $refresh_menu = get_icon('menu', array('menu' => 'hat_lastiss')); + $lastiss = new CUIWidget('hat_lastiss', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_lastiss.state', 1)); + $lastiss->setHeader(_n('Last %1$d issue', 'Last %1$d issues', DEFAULT_LATEST_ISSUES_CNT), array($refresh_menu)); + $lastiss->setFooter(new CDiv(SPACE, 'textwhite', 'hat_lastiss_footer')); + $rightColumn[] = $lastiss; +} // web monitoring -$refresh_menu = get_icon('menu', array('menu' => 'hat_webovr')); -$web_mon = new CUIWidget('hat_webovr', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_webovr.state', 1)); -$web_mon->setHeader(_('Web monitoring'), array($refresh_menu)); -$web_mon->setFooter(new CDiv(SPACE, 'textwhite', 'hat_webovr_footer')); -$rightColumn[] = $web_mon; +if (isset($widgets['4']) or !isset($widgets)) { + $refresh_menu = get_icon('menu', array('menu' => 'hat_webovr')); + $web_mon = new CUIWidget('hat_webovr', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_webovr.state', 1)); + $web_mon->setHeader(_('Web monitoring'), array($refresh_menu)); + $web_mon->setFooter(new CDiv(SPACE, 'textwhite', 'hat_webovr_footer')); + $rightColumn[] = $web_mon; +} // discovery info -$drules = DBfetch(DBselect('SELECT COUNT(d.druleid) AS cnt FROM drules d WHERE '.DBin_node('d.druleid').' AND d.status='.DRULE_STATUS_ACTIVE)); -if ($drules['cnt'] > 0 && check_right_on_discovery(PERM_READ_ONLY)) { - $refresh_tab[] = array('id' => 'hat_dscvry', 'frequency' => CProfile::get('web.dashboard.rf_rate.hat_dscvry', 60)); - $refresh_menu = get_icon('menu', array('menu' => 'hat_dscvry')); - $dcvr_mon = new CUIWidget('hat_dscvry', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_dscvry.state', 1)); - $dcvr_mon->setHeader(_('Discovery status'), array($refresh_menu)); - $dcvr_mon->setFooter(new CDiv(SPACE, 'textwhite', 'hat_dscvry_footer')); - $rightColumn[] = $dcvr_mon; +if (isset($widgets['5']) or !isset($widgets)) { + $drules = DBfetch(DBselect('SELECT COUNT(d.druleid) AS cnt FROM drules d WHERE '.DBin_node('d.druleid').' AND d.status='.DRULE_STATUS_ACTIVE)); + if ($drules['cnt'] > 0 && check_right_on_discovery(PERM_READ_ONLY)) { + $refresh_tab[] = array('id' => 'hat_dscvry', 'frequency' => CProfile::get('web.dashboard.rf_rate.hat_dscvry', 60)); + $refresh_menu = get_icon('menu', array('menu' => 'hat_dscvry')); + $dcvr_mon = new CUIWidget('hat_dscvry', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.hats.hat_dscvry.state', 1)); + $dcvr_mon->setHeader(_('Discovery status'), array($refresh_menu)); + $dcvr_mon->setFooter(new CDiv(SPACE, 'textwhite', 'hat_dscvry_footer')); + $rightColumn[] = $dcvr_mon; + } } add_doll_objects($refresh_tab); Index: include/classes/class.ctweenbox.php =================================================================== --- include/classes/class.ctweenbox.php (revision 27618) +++ include/classes/class.ctweenbox.php (working copy) @@ -47,6 +47,18 @@ return $this->name; } + public function setEnabled($value = 'yes') { + if ((is_string($value) && ($value == 'yes' || $value == 'checked' || $value == 'on') || $value == '1') || (is_int($value) && $value <> 0) || $value === true) { + $this->lbox->removeAttr('disabled'); + $this->rbox->removeAttr('disabled'); + return $this; + } + + $this->lbox->setAttribute('disabled', 'disabled'); + $this->rbox->setAttribute('disabled', 'disabled'); + return $this; + } + public function addItem($value, $caption, $selected = null, $enabled = 'yes') { if (is_null($selected)) { if (is_array($this->value)) { @@ -92,6 +104,11 @@ $rmv_btn = new CButton('remove', ' » ', null, 'formlist'); $rmv_btn->setAttribute('onclick', 'javascript: moveListBoxSelectedItem("'.$this->form->getName().'", "'.$this->varname.'", "'.$this->id_l.'", "'.$this->id_r.'", "rmv");'); + if (!is_null($this->lbox->getAttribute('disabled'))) { + $add_btn->setAttribute('disabled', 'disabled'); + $rmv_btn->setAttribute('disabled', 'disabled'); + } + $grp_tab->addRow(array($this->lbox, new CCol(array($add_btn, BR(), $rmv_btn), 'top'), $this->rbox)); return $grp_tab; } Index: dashconf.php =================================================================== --- dashconf.php (revision 27618) +++ dashconf.php (working copy) @@ -44,6 +44,8 @@ 'maintenance'=> array(T_ZBX_INT, O_OPT, P_SYS, BETWEEN(0, 1), NULL), 'extAck'=> array(T_ZBX_INT, O_OPT, P_SYS, null, NULL), + 'wdgtList'=>array(T_ZBX_INT, O_OPT, P_SYS, NULL, NULL), + 'form_refresh'=>array(T_ZBX_INT, O_OPT, P_SYS, null, NULL), 'save'=> array(T_ZBX_STR, O_OPT, P_SYS, null, NULL), 'delete'=> array(T_ZBX_STR, O_OPT, P_SYS, null, NULL) @@ -81,6 +83,10 @@ $_REQUEST['extAck'] = get_request('extAck', 0); CProfile::update('web.dashconf.events.extAck', $_REQUEST['extAck'], PROFILE_TYPE_INT); +// WIDGETS + $_REQUEST['wdgtList'] = get_request('wdgtList', array()); + $wdgtList = implode(';', array_keys($_REQUEST['wdgtList'])); + CProfile::update('web.dashconf.widgets.list', $wdgtList, PROFILE_TYPE_STR); } jsRedirect('dashboard.php'); @@ -135,6 +141,9 @@ $severity = get_request('trgSeverity', array()); $severity = array_keys($severity); + + $wdgtList = get_request('wdgtList', array()); + $wdgtList = array_keys($wdgtList); } else{ $filterEnable = CProfile::get('web.dashconf.filter.enable', 0); @@ -149,6 +158,9 @@ $severity = CProfile::get('web.dashconf.triggers.severity', '0;1;2;3;4;5'); $severity = zbx_empty($severity) ? array() : explode(';', $severity); + + $wdgtList = CProfile::get('web.dashconf.widgets.list'); + $wdgtList = zbx_empty($wdgtList) ? array() : explode(';', $wdgtList); } $dashForm->addVar('filterEnable', $filterEnable); @@ -246,6 +258,40 @@ $cb->setAttribute('title', _('Event acknowledging disabled')); } $dashList->addRow(_('Problem display'), $cb); + +// Custom widgets + $all_widgets = array( + _('Status of Zabbix'), + _('System status'), + _('Host status'), + _n('Last %1$d issue', 'Last %1$d issues', DEFAULT_LATEST_ISSUES_CNT), + _('Web monitoring'), + _('Discovery status'), + _('Favourite graphs'), + _('Favourite screens'), + _('Favourite maps'), + ); + + if ($USER_DETAILS['type'] != USER_TYPE_SUPER_ADMIN) { + unset($all_widgets[0]); + } + + if (count($wdgtList) == 0) { + foreach($all_widgets as $snum => $widget){ + $wdgtList[] = $snum; + } + } + + $wdgt_tb = new CTweenBox($dashForm, 'wdgtList', $wdgtList, 10); + + $wdgt_tb->setEnabled($filterEnable); + + foreach($all_widgets as $snum => $widget){ + $wdgt_tb->addItem($snum, $widget); + } + + $dashList->addRow(_('Widgets'), $wdgt_tb->get(_('Visible'), _('Invisible'))); + //----- $divTabs->addTab('dashFilterTab', _('Filter'), $dashList);