function init_nodes() { /* Init CURRENT NODE ID */ if (defined('ZBX_NODES_INITIALIZED')) { return; } global $USER_DETAILS; global $ZBX_LOCALNODEID, $ZBX_LOCMASTERID, $ZBX_CURRENT_NODEID, $ZBX_CURMASTERID, $ZBX_NODES, $ZBX_NODES_IDS, $ZBX_AVAILABLE_NODES, $ZBX_VIEWED_NODES, $ZBX_WITH_ALL_NODES; $ZBX_AVAILABLE_NODES = array(); $ZBX_NODES_IDS = array(); $ZBX_NODES = array(); $ZBX_CURRENT_NODEID = $ZBX_LOCALNODEID; $ZBX_WITH_ALL_NODES = !defined('ZBX_NOT_ALLOW_ALL_NODES'); if (!defined('ZBX_PAGE_NO_AUTHORIZATION') && ZBX_DISTRIBUTED) { if ($USER_DETAILS['type'] == USER_TYPE_SUPER_ADMIN) { $sql = 'SELECT DISTINCT n.nodeid,n.name,n.masterid FROM nodes n '; } else { $sql = 'SELECT DISTINCT n.nodeid,n.name,n.masterid ' . ' FROM nodes n, groups hg,rights r, users_groups g ' . ' WHERE r.id=hg.groupid ' . ' AND r.groupid=g.usrgrpid ' . ' AND g.userid=' . $USER_DETAILS['userid'] . ' AND n.nodeid=' . DBid2nodeid('hg.groupid'); } $db_nodes = DBselect($sql); while ($node = DBfetch($db_nodes)) { $ZBX_NODES[$node['nodeid']] = $node; $ZBX_NODES_IDS[$node['nodeid']] = $node['nodeid']; } $ZBX_AVAILABLE_NODES = get_accessible_nodes_by_user($USER_DETAILS, PERM_READ_LIST, PERM_RES_IDS_ARRAY, $ZBX_NODES_IDS); $ZBX_VIEWED_NODES = get_viewed_nodes(); $ZBX_CURRENT_NODEID = $ZBX_VIEWED_NODES['selected']; if ($node_data = DBfetch(DBselect('SELECT masterid FROM nodes WHERE nodeid=' . $ZBX_CURRENT_NODEID))) { $ZBX_CURMASTERID = $node_data['masterid']; } if (!isset($ZBX_NODES[$ZBX_CURRENT_NODEID])) { $ZBX_CURRENT_NODEID = $ZBX_LOCALNODEID; $ZBX_CURMASTERID = $ZBX_LOCMASTERID; } if (isset($_REQUEST['select_nodes'])) { // CProfile::update('web.nodes.selected', $ZBX_VIEWED_NODES['nodeids'], PROFILE_TYPE_ARRAY_ID); update_node_profile($ZBX_VIEWED_NODES['nodeids']); } if (isset($_REQUEST['switch_node'])) { CProfile::update('web.nodes.switch_node', $ZBX_VIEWED_NODES['selected'], PROFILE_TYPE_ID); } } else { $ZBX_CURRENT_NODEID = $ZBX_LOCALNODEID; $ZBX_CURMASTERID = $ZBX_LOCMASTERID; } // zbx_set_post_cookie('zbx_current_nodeid', $ZBX_CURRENT_NODEID); define('ZBX_NODES_INITIALIZED', 1); // reset profiles if node is different than local if ($ZBX_CURRENT_NODEID != $ZBX_LOCALNODEID) { CProfile::init(); } }
} elseif (in_array($resourceType, array(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW))) { $data = array(); if ($resourceId > 0) { $data = API::HostGroup()->get(array('groupids' => $resourceId, 'output' => array('groupid', 'name'), 'editable' => true)); if ($data) { $data = reset($data); $data['prefix'] = get_node_name_by_elid($data['groupid'], true, NAME_DELIMITER); } } $screenFormList->addRow(_('Group'), new CMultiSelect(array('name' => 'resourceid', 'objectName' => 'hostGroup', 'objectOptions' => array('editable' => true), 'data' => $data ? array(array('id' => $data['groupid'], 'name' => $data['name'], 'prefix' => $data['prefix'])) : null, 'selectedLimit' => 1, 'popup' => array('parameters' => 'srctbl=host_groups&dstfrm=' . $screenForm->getName() . '&dstfld1=resourceid' . '&srcfld1=groupid&writeonly=1', 'width' => 450, 'height' => 450)))); $screenFormList->addRow(_('Application'), new CTextBox('application', $application, ZBX_TEXTBOX_STANDARD_SIZE, false, 255)); } elseif ($resourceType == SCREEN_RESOURCE_SCREEN) { $caption = ''; $id = 0; if ($resourceId > 0) { $db_screens = DBselect('SELECT DISTINCT n.name AS node_name,s.screenid,s.name' . ' FROM screens s' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('s.screenid') . ' WHERE s.screenid=' . zbx_dbstr($resourceId)); while ($row = DBfetch($db_screens)) { $screen = API::Screen()->get(array('screenids' => $row['screenid'], 'output' => array('screenid'))); if (empty($screen)) { continue; } if (check_screen_recursion($_REQUEST['screenid'], $row['screenid'])) { continue; } $row['node_name'] = !empty($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceId; } } $screenFormList->addVar('resourceid', $id); $screenFormList->addRow(_('Parameter'), array(new CTextBox('caption', $caption, ZBX_TEXTBOX_STANDARD_SIZE, 'yes'), new CButton('select', _('Select'), 'javascript: return PopUp("popup.php?srctbl=screens2&srcfld1=screenid&srcfld2=name' . '&dstfrm=' . $screenForm->getName() . '&dstfld1=resourceid&dstfld2=caption' . '&writeonly=1&screenid=' . $_REQUEST['screenid'] . '", 800, 450);', 'formlist')));
$data['usrgrp'] = reset($dbUserGroup); } if (isset($_REQUEST['usrgrpid']) && !isset($_REQUEST['form_refresh'])) { $data['name'] = $data['usrgrp']['name']; $data['users_status'] = $data['usrgrp']['users_status']; $data['gui_access'] = $data['usrgrp']['gui_access']; $data['debug_mode'] = $data['usrgrp']['debug_mode']; // group users $data['group_users'] = array(); $dbUsers = DBselect('SELECT DISTINCT u.userid ' . ' FROM users u,users_groups ug ' . ' WHERE u.userid=ug.userid ' . ' AND ug.usrgrpid=' . zbx_dbstr($data['usrgrpid'])); while ($dbUser = DBfetch($dbUsers)) { $data['group_users'][$dbUser['userid']] = $dbUser['userid']; } // group rights $data['group_rights'] = array(); $dbRights = DBselect('SELECT r.*,n.name AS nodename,g.name AS name' . ' FROM groups g' . ' LEFT JOIN rights r ON r.id=g.groupid' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE r.groupid=' . zbx_dbstr($data['usrgrpid'])); while ($dbRight = DBfetch($dbRights)) { if (!empty($dbRight['nodename'])) { $dbRight['name'] = $dbRight['nodename'] . NAME_DELIMITER . $dbRight['name']; } $data['group_rights'][$dbRight['id']] = array('permission' => $dbRight['permission'], 'name' => $dbRight['name'], 'id' => $dbRight['id']); } } else { $data['name'] = get_request('gname', ''); $data['users_status'] = get_request('users_status', GROUP_STATUS_ENABLED); $data['gui_access'] = get_request('gui_access', GROUP_GUI_ACCESS_SYSTEM); $data['debug_mode'] = get_request('debug_mode', GROUP_DEBUG_MODE_DISABLED); $data['group_users'] = get_request('group_users', array()); $data['group_rights'] = get_request('group_rights', array()); } $data['selected_usrgrp'] = get_request('selusrgrp', 0);
function insert_map_element_form() { global $USER_DETAILS; $frmEl = new CFormTable('New map element', 'sysmap.php'); $frmEl->SetHelp('web.sysmap.host.php'); $frmEl->addVar('sysmapid', $_REQUEST['sysmapid']); if (isset($_REQUEST['selementid'])) { $frmEl->addVar('selementid', $_REQUEST['selementid']); $element = get_sysmaps_element_by_selementid($_REQUEST['selementid']); $frmEl->SetTitle('Map element "' . $element['label'] . '"'); } if (isset($_REQUEST['selementid']) && !isset($_REQUEST['form_refresh'])) { $elementid = $element['elementid']; $elementtype = $element['elementtype']; $label = $element['label']; $x = $element['x']; $y = $element['y']; $url = $element['url']; $iconid_off = $element['iconid_off']; $iconid_on = $element['iconid_on']; $iconid_unknown = $element['iconid_unknown']; $iconid_disabled = $element['iconid_disabled']; $label_location = $element['label_location']; if (is_null($label_location)) { $label_location = -1; } } else { $elementid = get_request('elementid', 0); $elementtype = get_request('elementtype', SYSMAP_ELEMENT_TYPE_HOST); $label = get_request('label', ''); $x = get_request('x', 0); $y = get_request('y', 0); $url = get_request('url', ''); $iconid_off = get_request('iconid_off', 0); $iconid_on = get_request('iconid_on', 0); $iconid_unknown = get_request('iconid_unknown', 0); $iconid_disabled = get_request('iconid_disabled', 0); $label_location = get_request('label_location', '-1'); } $cmbType = new CComboBox('elementtype', $elementtype, 'submit()'); $available_hosts = get_accessible_hosts_by_user($USER_DETAILS, PERM_READ_ONLY, null, get_current_nodeid(true)); $sql = 'SELECT DISTINCT n.name as node_name,h.hostid,h.host ' . ' FROM hosts h' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('h.hostid') . ' WHERE ' . DBcondition('h.hostid', $available_hosts) . ' ORDER BY node_name,h.host'; $db_hosts = DBselect($sql); if ($db_hosts) { $cmbType->addItem(SYSMAP_ELEMENT_TYPE_HOST, S_HOST); } $db_maps = DBselect('SELECT sysmapid FROM sysmaps WHERE sysmapid!=' . $_REQUEST['sysmapid']); if (DBfetch($db_maps)) { $cmbType->addItem(SYSMAP_ELEMENT_TYPE_MAP, S_MAP); } $cmbType->addItem(SYSMAP_ELEMENT_TYPE_TRIGGER, S_TRIGGER); $cmbType->addItem(SYSMAP_ELEMENT_TYPE_HOST_GROUP, S_HOST_GROUP); $cmbType->addItem(SYSMAP_ELEMENT_TYPE_IMAGE, S_IMAGE); $frmEl->addRow(S_TYPE, $cmbType); $frmEl->addRow(S_LABEL, new CTextArea('label', $label, 32, 4)); $cmbLocation = new CComboBox('label_location', $label_location); $cmbLocation->addItem(-1, '-'); $cmbLocation->addItem(0, S_BOTTOM); $cmbLocation->addItem(1, S_LEFT); $cmbLocation->addItem(2, S_RIGHT); $cmbLocation->addItem(3, S_TOP); $frmEl->addRow(S_LABEL_LOCATION, $cmbLocation); if ($elementtype == SYSMAP_ELEMENT_TYPE_HOST) { $host = ''; $host_info = DBfetch(DBselect('SELECT DISTINCT n.name as node_name,h.hostid,h.host ' . ' FROM hosts h ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('h.hostid') . ' WHERE ' . DBcondition('h.hostid', $available_hosts) . ' AND hostid=' . $elementid . ' ORDER BY node_name,h.host')); if ($host_info) { $host = $host_info['host']; } else { $elementid = 0; } if ($elementid == 0) { $host = ''; $elementid = 0; } $frmEl->addVar('elementid', $elementid); $frmEl->addRow(S_HOST, array(new CTextBox('host', $host, 32, 'yes'), new CButton('btn1', S_SELECT, "return PopUp('popup.php?dstfrm=" . $frmEl->GetName() . "&dstfld1=elementid&dstfld2=host&srctbl=hosts&srcfld1=hostid&srcfld2=host',450,450);", 'T'))); } else { if ($elementtype == SYSMAP_ELEMENT_TYPE_MAP) { $cmbMaps = new CComboBox('elementid', $elementid); $db_maps = DBselect('SELECT DISTINCT n.name as node_name,s.sysmapid,s.name ' . ' FROM sysmaps s' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('s.sysmapid') . ' ORDER BY node_name,s.name'); while ($db_map = DBfetch($db_maps)) { if (!sysmap_accessible($db_map['sysmapid'], PERM_READ_ONLY)) { continue; } $node_name = isset($db_map['node_name']) ? '(' . $db_map['node_name'] . ') ' : ''; $cmbMaps->addItem($db_map['sysmapid'], $node_name . $db_map['name']); } $frmEl->addRow(S_MAP, $cmbMaps); } else { if ($elementtype == SYSMAP_ELEMENT_TYPE_TRIGGER) { $available_triggers = get_accessible_triggers(PERM_READ_ONLY, array(), PERM_RES_IDS_ARRAY, get_current_nodeid(true)); $trigger = ''; $trigger_info = DBfetch(DBselect('SELECT DISTINCT n.name as node_name,h.hostid,h.host,t.*' . ' FROM triggers t ' . ' LEFT JOIN functions f on t.triggerid=f.triggerid ' . ' LEFT JOIN items i on i.itemid=f.itemid ' . ' LEFT JOIN hosts h on h.hostid=i.hostid ' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('t.triggerid') . ' WHERE t.triggerid=' . $elementid . ' AND ' . DBcondition('t.triggerid', $available_triggers) . ' ORDER BY node_name,h.host,t.description')); if ($trigger_info) { $trigger = expand_trigger_description_by_data($trigger_info); } else { $elementid = 0; } if ($elementid == 0) { $trigger = ''; $elementid = 0; } $frmEl->addVar('elementid', $elementid); $frmEl->addRow(S_TRIGGER, array(new CTextBox('trigger', $trigger, 32, 'yes'), new CButton('btn1', S_SELECT, "return PopUp('popup.php?dstfrm=" . $frmEl->GetName() . "&dstfld1=elementid&dstfld2=trigger&srctbl=triggers&srcfld1=triggerid&srcfld2=description');", 'T'))); } else { if ($elementtype == SYSMAP_ELEMENT_TYPE_HOST_GROUP) { $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY, null, get_current_nodeid(true)); $group = ''; $group_info = DBfetch(DBselect('SELECT DISTINCT n.name as node_name,g.groupid,g.name ' . ' FROM groups g ' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE ' . DBcondition('g.groupid', $available_groups) . ' AND g.groupid=' . $elementid . ' ORDER BY node_name,g.name')); if ($group_info) { $group = $group_info['name']; } else { $elementid = 0; } if ($elementid == 0) { $group = ''; $elementid = 0; } $frmEl->addVar('elementid', $elementid); $frmEl->addRow(S_HOST_GROUP, array(new CTextBox('group', $group, 32, 'yes'), new CButton('btn1', S_SELECT, "return PopUp('popup.php?dstfrm=" . $frmEl->GetName() . "&dstfld1=elementid&dstfld2=group&srctbl=host_group&srcfld1=groupid&srcfld2=name',450,450);", 'T'))); } else { if ($elementtype == SYSMAP_ELEMENT_TYPE_IMAGE) { $frmEl->addVar('elementid', 0); } } } } } $cmbIconOff = new CComboBox('iconid_off', $iconid_off); $cmbIconOn = new CComboBox('iconid_on', $iconid_on); if ($elementtype != SYSMAP_ELEMENT_TYPE_MAP) { $cmbIconUnknown = new CComboBox('iconid_unknown', $iconid_unknown); } if ($elementtype != SYSMAP_ELEMENT_TYPE_HOST_GROUP && $elementtype != SYSMAP_ELEMENT_TYPE_MAP) { $cmbIconDisabled = new CComboBox('iconid_disabled', $iconid_disabled); } $result = DBselect('SELECT * FROM images WHERE imagetype=1 AND ' . DBin_node('imageid') . ' order by name'); while ($row = DBfetch($result)) { $row['name'] = get_node_name_by_elid($row['imageid']) . $row['name']; $cmbIconOff->addItem($row['imageid'], $row['name']); $cmbIconOn->addItem($row['imageid'], $row['name']); if ($elementtype != SYSMAP_ELEMENT_TYPE_MAP) { $cmbIconUnknown->addItem($row['imageid'], $row['name']); } if ($elementtype != SYSMAP_ELEMENT_TYPE_HOST_GROUP && $elementtype != SYSMAP_ELEMENT_TYPE_MAP) { $cmbIconDisabled->addItem($row['imageid'], $row['name']); } } $frmEl->addRow(S_ICON_OK, $cmbIconOff); if ($elementtype != SYSMAP_ELEMENT_TYPE_IMAGE) { $frmEl->addRow(S_ICON_PROBLEM, $cmbIconOn); } else { $frmEl->addVar('iconid_on', 0); } if ($elementtype != SYSMAP_ELEMENT_TYPE_MAP && $elementtype != SYSMAP_ELEMENT_TYPE_IMAGE) { $frmEl->addRow(S_ICON_UNKNOWN, $cmbIconUnknown); } else { $frmEl->addVar('iconid_unknown', 0); } if ($elementtype != SYSMAP_ELEMENT_TYPE_HOST_GROUP && $elementtype != SYSMAP_ELEMENT_TYPE_MAP && $elementtype != SYSMAP_ELEMENT_TYPE_IMAGE) { $frmEl->addRow(S_ICON_DISABLED, $cmbIconDisabled); } else { $frmEl->addVar('iconid_disabled', 0); } $frmEl->addRow(S_COORDINATE_X, new CNumericBox('x', $x, 5)); $frmEl->addRow(S_COORDINATE_Y, new CNumericBox('y', $y, 5)); $frmEl->addRow(S_URL, new CTextBox('url', $url, 64)); $frmEl->addItemToBottomRow(new CButton('save', S_SAVE)); if (isset($_REQUEST['selementid'])) { $frmEl->addItemToBottomRow(SPACE); $frmEl->addItemToBottomRow(new CButtonDelete('Delete element?', url_param('form') . url_param('selementid') . url_param('sysmapid'))); } $frmEl->addItemToBottomRow(SPACE); $frmEl->addItemToBottomRow(new CButtonCancel(url_param('sysmapid'))); $frmEl->Show(); }
function get_accessible_groups_by_rights(&$rights, $user_type, $perm, $perm_res = null, $nodeid = null) { if (is_null($perm_res)) { $perm_res = PERM_RES_STRING_LINE; } $result = array(); $where = array(); if (!is_null($nodeid)) { array_push($where, DBin_node('g.groupid', $nodeid)); } if (count($where)) { $where = ' WHERE ' . implode(' AND ', $where); } else { $where = ''; } $group_perm = array(); foreach ($rights as $id => $right) { $group_perm[$right['id']] = $right['permission']; } $sql = 'SELECT n.nodeid as nodeid,n.name as node_name, g.*, ' . PERM_DENY . ' as permission ' . ' FROM groups g ' . ' LEFT JOIN nodes n ON ' . DBid2nodeid('g.groupid') . '=n.nodeid ' . $where . ' ORDER BY n.name, g.name'; $db_groups = DBselect($sql); while ($group_data = DBfetch($db_groups)) { if (USER_TYPE_SUPER_ADMIN == $user_type) { $group_data['permission'] = PERM_MAX; } else { if (isset($group_perm[$group_data['groupid']])) { $group_data['permission'] = $group_perm[$group_data['groupid']]; } else { if (is_null($group_data['nodeid'])) { $group_data['nodeid'] = id2nodeid($group_data['groupid']); } $group_data['permission'] = PERM_DENY; } } if ($group_data['permission'] < $perm) { continue; } switch ($perm_res) { case PERM_RES_DATA_ARRAY: $result[$group_data['groupid']] = $group_data; break; default: $result[$group_data['groupid']] = $group_data['groupid']; } } if ($perm_res == PERM_RES_STRING_LINE) { if (count($result) == 0) { $result = '-1'; } else { $result = implode(',', $result); } } return $result; }
function init_nodes() { /* Init CURRENT NODE ID */ global $USER_DETAILS, $ZBX_LOCALNODEID, $ZBX_LOCMASTERID, $ZBX_CURRENT_NODEID, $ZBX_CURRENT_SUBNODES, $ZBX_CURMASTERID, $ZBX_NODES, $ZBX_NODES_IDS, $ZBX_WITH_SUBNODES; $ZBX_CURRENT_SUBNODES = array(); $ZBX_NODES_IDS = array(); $ZBX_NODES = array(); if (!defined('ZBX_PAGE_NO_AUTHERIZATION') && ZBX_DISTRIBUTED) { $ZBX_CURRENT_NODEID = get_cookie('zbx_current_nodeid', $ZBX_LOCALNODEID); // Selected node $ZBX_WITH_SUBNODES = get_cookie('zbx_with_subnodes', false); // Show elements FROM subnodes if (isset($_REQUEST['switch_node'])) { if ($node_data = DBfetch(DBselect('SELECT * FROM nodes WHERE nodeid=' . $_REQUEST['switch_node']))) { $ZBX_CURRENT_NODEID = $_REQUEST['switch_node']; } unset($node_data); } if (isset($_REQUEST['show_subnodes'])) { $ZBX_WITH_SUBNODES = !empty($_REQUEST['show_subnodes']); } if ($node_data = DBfetch(DBselect('SELECT * FROM nodes WHERE nodeid=' . $ZBX_CURRENT_NODEID))) { $ZBX_CURMASTERID = $node_data['masterid']; } if ($USER_DETAILS['type'] == USER_TYPE_SUPER_ADMIN) { $sql = 'SELECT DISTINCT n.nodeid,n.name,n.masterid FROM nodes n'; } else { $sql = 'SELECT DISTINCT n.nodeid,n.name,n.masterid ' . ' FROM nodes n, groups hg,rights r, users_groups g ' . ' WHERE r.id=hg.groupid ' . ' AND r.groupid=g.usrgrpid ' . ' AND g.userid=' . $USER_DETAILS['userid'] . ' AND ' . DBid2nodeid('hg.groupid') . '=n.nodeid;'; } $db_nodes = DBselect($sql); while ($node = DBfetch($db_nodes)) { $ZBX_NODES_IDS[$node['nodeid']] = $node['nodeid']; $ZBX_NODES[$node['nodeid']] = $node; } if (!isset($ZBX_NODES[$ZBX_CURRENT_NODEID])) { $denyed_page_requested = true; $ZBX_CURRENT_NODEID = $ZBX_LOCALNODEID; $ZBX_CURMASTERID = $ZBX_LOCMASTERID; } foreach ($ZBX_NODES as $nodeid => $node_data) { $curr_node =& $node_data; if ($curr_node['masterid'] != 0 && bccomp($curr_node['masterid'], $ZBX_CURRENT_NODEID) != 0) { $curr_node =& $ZBX_NODES[$curr_node['masterid']]; } if (bccomp($curr_node['masterid'], $ZBX_CURRENT_NODEID) == 0) { $ZBX_CURRENT_SUBNODES[$nodeid] = $nodeid; } } zbx_set_post_cookie('zbx_current_nodeid', $ZBX_CURRENT_NODEID); zbx_set_post_cookie('zbx_with_subnodes', $ZBX_WITH_SUBNODES); } else { $ZBX_CURRENT_NODEID = $ZBX_LOCALNODEID; $ZBX_CURMASTERID = $ZBX_LOCMASTERID; $ZBX_WITH_SUBNODES = false; } $ZBX_CURRENT_SUBNODES[$ZBX_CURRENT_NODEID] = $ZBX_CURRENT_NODEID; if (count($ZBX_CURRENT_SUBNODES) < 2 && !defined('ZBX_DISABLE_SUBNODES')) { define('ZBX_DISABLE_SUBNODES', 1); } else { $ZBX_CURRENT_SUBNODES = get_accessible_nodes_by_user($USER_DETAILS, PERM_READ_LIST, PERM_RES_IDS_ARRAY, $ZBX_CURRENT_SUBNODES); } }
$row['name'] = $row['node_name'] . $row['name']; if (isset($_REQUEST['reference']) && $_REQUEST['reference'] == 'dashboard') { $action = get_window_opener($dstfrm, $dstfld1, $srcfld2) . get_window_opener($dstfrm, $dstfld2, $row[$srcfld2]) . "window.opener.setTimeout('add2favorites();', 1000);"; } else { $action = get_window_opener($dstfrm, $dstfld1, $row[$srcfld1]) . (isset($srcfld2) ? get_window_opener($dstfrm, $dstfld2, $row[$srcfld2]) : ''); } $name->setAction($action . " close_window(); return false;"); $table->addRow($name); } $table->Show(); } else { if ($srctbl == 'host_group_scr') { $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY, null, $nodeid); $table = new CTableInfo(S_NO_GROUPS_DEFINED); $table->setHeader(array(S_NAME)); $db_groups = DBselect('SELECT DISTINCT n.name as node_name,g.groupid,g.name,n.nodeid ' . ' FROM hosts_groups hg, groups g ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE ' . DBcondition('g.groupid', $available_groups) . ' AND ' . DBin_node('g.groupid', $nodeid) . ' ORDER BY n.nodeid,g.name'); $all = false; while ($row = DBfetch($db_groups)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; if (!$all) { $name = new CLink(bold(S_MINUS_ALL_GROUPS_MINUS), '#', 'action'); if (isset($_REQUEST['reference']) && $_REQUEST['reference'] == 'dashboard') { $action = get_window_opener($dstfrm, $dstfld1, $srcfld2) . get_window_opener($dstfrm, $dstfld2, create_id_by_nodeid(0, $nodeid)) . "window.opener.setTimeout('add2favorites();', 1000);"; } else { $action = get_window_opener($dstfrm, $dstfld1, create_id_by_nodeid(0, $nodeid)) . get_window_opener($dstfrm, $dstfld2, $row['node_name'] . S_MINUS_ALL_GROUPS_MINUS); } $name->setAction($action . " close_window(); return false;"); $table->addRow($name); $all = true; } $name = new CLink($row['name'], '#', 'action');
function insert_usergroups_form() { $frm_title = S_USER_GROUP; if (isset($_REQUEST['usrgrpid'])) { $usrgrp = CUserGroup::get(array('usrgrpids' => $_REQUEST['usrgrpid'], 'extendoutput' => 1)); $usrgrp = reset($usrgrp); $frm_title = S_USER_GROUP . ' "' . $usrgrp['name'] . '"'; } if (isset($_REQUEST['usrgrpid']) && !isset($_REQUEST['form_refresh'])) { $name = $usrgrp['name']; $users_status = $usrgrp['users_status']; $gui_access = $usrgrp['gui_access']; $api_access = $usrgrp['api_access']; $debug_mode = $usrgrp['debug_mode']; $group_users = array(); $sql = 'SELECT DISTINCT u.userid ' . ' FROM users u,users_groups ug ' . ' WHERE u.userid=ug.userid ' . ' AND ug.usrgrpid=' . $_REQUEST['usrgrpid']; $db_users = DBselect($sql); while ($db_user = DBfetch($db_users)) { $group_users[$db_user['userid']] = $db_user['userid']; } $group_rights = array(); $sql = 'SELECT r.*, n.name as node_name, g.name as name ' . ' FROM groups g ' . ' LEFT JOIN rights r on r.id=g.groupid ' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE r.groupid=' . $_REQUEST['usrgrpid']; $db_rights = DBselect($sql); while ($db_right = DBfetch($db_rights)) { if (isset($db_right['node_name'])) { $db_right['name'] = $db_right['node_name'] . ':' . $db_right['name']; } $group_rights[$db_right['id']] = array('permission' => $db_right['permission'], 'name' => $db_right['name'], 'id' => $db_right['id']); } } else { $name = get_request('gname', ''); $users_status = get_request('users_status', GROUP_STATUS_ENABLED); $gui_access = get_request('gui_access', GROUP_GUI_ACCESS_SYSTEM); $api_access = get_request('api_access', GROUP_API_ACCESS_DISABLED); $debug_mode = get_request('debug_mode', GROUP_DEBUG_MODE_DISABLED); $group_users = get_request('group_users', array()); $group_rights = get_request('group_rights', array()); } $perm_details = get_request('perm_details', 0); order_result($group_rights, 'name'); $frmUserG = new CFormTable($frm_title, 'usergrps.php'); $frmUserG->setHelp('web.users.groups.php'); if (isset($_REQUEST['usrgrpid'])) { $frmUserG->addVar('usrgrpid', $_REQUEST['usrgrpid']); } $grName = new CTextBox('gname', $name, 49); $grName->attributes['style'] = 'width: 280px'; $frmUserG->addRow(S_GROUP_NAME, $grName); $frmUserG->addVar('group_rights', $group_rights); ///////////////// // create table header + $selusrgrp = get_request('selusrgrp', 0); $cmbGroups = new CComboBox('selusrgrp', $selusrgrp, 'submit()'); $cmbGroups->addItem(0, S_ALL_S); $sql = 'SELECT usrgrpid, name FROM usrgrp WHERE ' . DBin_node('usrgrpid') . ' ORDER BY name'; $result = DBselect($sql); while ($row = DBfetch($result)) { $cmbGroups->addItem($row['usrgrpid'], $row['name']); } // - // create user twinbox + $user_tb = new CTweenBox($frmUserG, 'group_users', $group_users, 10); $sql_from = ''; $sql_where = ''; if ($selusrgrp > 0) { $sql_from = ', users_groups g '; $sql_where = ' AND u.userid=g.userid AND g.usrgrpid=' . $selusrgrp; } $sql = 'SELECT DISTINCT u.userid, u.alias ' . ' FROM users u ' . $sql_from . ' WHERE ' . DBcondition('u.userid', $group_users) . ' OR (' . DBin_node('u.userid') . $sql_where . ' ) ORDER BY u.alias'; $result = DBselect($sql); while ($row = DBfetch($result)) { $user_tb->addItem($row['userid'], $row['alias']); } $frmUserG->addRow(S_USERS, $user_tb->get(S_IN . SPACE . S_GROUP, array(S_OTHER . SPACE . S_GROUPS . SPACE . '|' . SPACE, $cmbGroups))); // - ///////////////// /* $lstUsers = new CListBox('group_users_to_del[]'); $lstUsers->attributes['style'] = 'width: 280px'; foreach($group_users as $userid => $alias){ $lstUsers->addItem($userid, $alias); } $frmUserG->addRow(S_USERS, array( $lstUsers, BR(), new CButton('add_user',S_ADD, "return PopUp('popup_users.php?dstfrm=".$frmUserG->getName(). "&list_name=group_users_to_del[]&var_name=group_users',600,300);"), (count($group_users) > 0) ? new CButton('del_group_user',S_DELETE_SELECTED) : null )); */ ///////////////// $granted = true; if (isset($_REQUEST['usrgrpid'])) { $granted = granted2update_group($_REQUEST['usrgrpid']); } if ($granted) { $cmbGUI = new CComboBox('gui_access', $gui_access); $cmbGUI->addItem(GROUP_GUI_ACCESS_SYSTEM, user_auth_type2str(GROUP_GUI_ACCESS_SYSTEM)); $cmbGUI->addItem(GROUP_GUI_ACCESS_INTERNAL, user_auth_type2str(GROUP_GUI_ACCESS_INTERNAL)); $cmbGUI->addItem(GROUP_GUI_ACCESS_DISABLED, user_auth_type2str(GROUP_GUI_ACCESS_DISABLED)); $frmUserG->addRow(S_GUI_ACCESS, $cmbGUI); $cmbStat = new CComboBox('users_status', $users_status); $cmbStat->addItem(GROUP_STATUS_ENABLED, S_ENABLED); $cmbStat->addItem(GROUP_STATUS_DISABLED, S_DISABLED); $frmUserG->addRow(S_USERS_STATUS, $cmbStat); } else { $frmUserG->addVar('gui_access', $gui_access); $frmUserG->addRow(S_GUI_ACCESS, new CSpan(user_auth_type2str($gui_access), 'green')); $frmUserG->addVar('users_status', GROUP_STATUS_ENABLED); $frmUserG->addRow(S_USERS_STATUS, new CSpan(S_ENABLED, 'green')); } $cmbAPI = new CComboBox('api_access', $api_access); $cmbAPI->addItem(GROUP_API_ACCESS_ENABLED, S_ENABLED); $cmbAPI->addItem(GROUP_API_ACCESS_DISABLED, S_DISABLED); $frmUserG->addRow(S_API_ACCESS, $cmbAPI); $cmbDebug = new CComboBox('debug_mode', $debug_mode); $cmbDebug->addItem(GROUP_DEBUG_MODE_ENABLED, S_ENABLED); $cmbDebug->addItem(GROUP_DEBUG_MODE_DISABLED, S_DISABLED); $frmUserG->addRow(S_DEBUG_MODE, $cmbDebug); $table_Rights = new CTable(S_NO_RIGHTS_DEFINED, 'right_table'); $lstWrite = new CListBox('right_to_del[read_write][]', null, 20); $lstRead = new CListBox('right_to_del[read_only][]', null, 20); $lstDeny = new CListBox('right_to_del[deny][]', null, 20); foreach ($group_rights as $id => $element_data) { if ($element_data['permission'] == PERM_DENY) { $lstDeny->addItem($id, $element_data['name']); } else { if ($element_data['permission'] == PERM_READ_ONLY) { $lstRead->addItem($id, $element_data['name']); } else { if ($element_data['permission'] == PERM_READ_WRITE) { $lstWrite->addItem($id, $element_data['name']); } } } } $table_Rights->setHeader(array(S_READ_WRITE, S_READ_ONLY, S_DENY), 'header'); $table_Rights->addRow(array(new CCol($lstWrite, 'read_write'), new CCol($lstRead, 'read_only'), new CCol($lstDeny, 'deny'))); $table_Rights->addRow(array(array(new CButton('add_read_write', S_ADD, "return PopUp('popup_right.php?dstfrm=" . $frmUserG->getName() . "&permission=" . PERM_READ_WRITE . "',450,450);"), new CButton('del_read_write', S_DELETE_SELECTED)), array(new CButton('add_read_only', S_ADD, "return PopUp('popup_right.php?dstfrm=" . $frmUserG->getName() . "&permission=" . PERM_READ_ONLY . "',450,450);"), new CButton('del_read_only', S_DELETE_SELECTED)), array(new CButton('add_deny', S_ADD, "return PopUp('popup_right.php?dstfrm=" . $frmUserG->getName() . "&permission=" . PERM_DENY . "',450,450);"), new CButton('del_deny', S_DELETE_SELECTED)))); $frmUserG->addRow(S_RIGHTS, $table_Rights); $frmUserG->addVar('perm_details', $perm_details); $link = new CSpan($perm_details ? S_HIDE : S_SHOW, 'link'); $link->onClick("return create_var('" . $frmUserG->getName() . "','perm_details'," . ($perm_details ? 0 : 1) . ", true);"); $resources_list = array(S_RIGHTS_OF_RESOURCES, SPACE . '(', $link, ')'); $frmUserG->addSpanRow($resources_list, 'right_header'); if ($perm_details) { $frmUserG->addSpanRow(get_rights_of_elements_table($group_rights)); } $frmUserG->addItemToBottomRow(new CButton('save', S_SAVE)); if (isset($_REQUEST['usrgrpid'])) { $frmUserG->addItemToBottomRow(SPACE); $frmUserG->addItemToBottomRow(new CButtonDelete('Delete selected group?', url_param('form') . url_param('usrgrpid'))); } $frmUserG->addItemToBottomRow(SPACE); $frmUserG->addItemToBottomRow(new CButtonCancel()); return $frmUserG; }
/** * Get HostGroups * * {@source} * @access public * @static * @since 1.8 * @version 1 * * @static * @param array $params * @return array */ public static function get($params) { global $USER_DETAILS; $result = array(); $user_type = $USER_DETAILS['type']; $userid = $USER_DETAILS['userid']; $sort_columns = array('groupid', 'name'); // allowed columns for sorting $sql_parts = array('select' => array('groups' => 'g.groupid'), 'from' => array('groups g'), 'where' => array(), 'order' => array(), 'limit' => null); $def_options = array('nodeids' => 0, 'groupids' => 0, 'hostids' => 0, 'monitored_hosts' => 0, 'templated_hosts' => 0, 'real_hosts' => 0, 'not_proxy_hosts' => 0, 'with_items' => 0, 'with_monitored_items' => 0, 'with_historical_items' => 0, 'with_triggers' => 0, 'with_monitored_triggers' => 0, 'with_httptests' => 0, 'with_monitored_httptests' => 0, 'with_graphs' => 0, 'only_current_node' => 0, 'editable' => 0, 'nopermissions' => 0, 'select_hosts' => 0, 'extendoutput' => 0, 'count' => 0, 'pattern' => '', 'order' => '', 'limit' => 0); $options = array_merge($def_options, $params); // *** ????? *** // // nodes // disabled by false // TODO('check this ~106'); if (false && ZBX_DISTRIBUTED) { $sql_parts['select'][] = 'n.name as node_name'; $sql_parts['from'][] = 'nodes n'; $sql_parts['where'][] = 'n.nodeid=' . DBid2nodeid('g.groupid'); $sql_parts['order'][] = 'node_name'; } // *** ????? *** // // editable + PERMISSION CHECK if (defined('ZBX_API_REQUEST')) { $options['nopermissions'] = false; } if (USER_TYPE_SUPER_ADMIN == $user_type || $options['nopermissions']) { } else { $permission = $options['editable'] ? PERM_READ_WRITE : PERM_READ_ONLY; $sql_parts['from']['r'] = 'rights r'; $sql_parts['from']['ug'] = 'users_groups ug'; $sql_parts['where'][] = 'r.id=g.groupid'; $sql_parts['where'][] = 'r.groupid=ug.usrgrpid'; $sql_parts['where'][] = 'ug.userid=' . $userid; $sql_parts['where'][] = 'r.permission>=' . $permission; $sql_parts['where'][] = 'NOT EXISTS( ' . ' SELECT gg.groupid ' . ' FROM groups gg, rights rr, users_groups ugg ' . ' WHERE rr.id=g.groupid ' . ' AND rr.groupid=ugg.usrgrpid ' . ' AND ugg.userid=' . $userid . ' AND rr.permission<' . $permission . ')'; } // nodeids $nodeids = $options['nodeids'] ? $options['nodeids'] : get_current_nodeid(false); // groupids if ($options['groupids'] != 0) { zbx_value2array($options['groupids']); $sql_parts['where'][] = DBcondition('g.groupid', $options['groupids']); } // hostids if ($options['hostids'] != 0) { zbx_value2array($options['hostids']); $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where'][] = DBcondition('hg.hostid', $options['hostids']); $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; } // monitored_hosts, real_hosts, templated_hosts, not_proxy_hosts if ($options['monitored_hosts'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['from']['h'] = 'hosts h'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'h.hostid=hg.hostid'; $sql_parts['where'][] = 'h.status=' . HOST_STATUS_MONITORED; } else { if ($options['real_hosts'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['from']['h'] = 'hosts h'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'h.hostid=hg.hostid'; $sql_parts['where'][] = 'h.status IN(' . HOST_STATUS_MONITORED . ',' . HOST_STATUS_NOT_MONITORED . ')'; } else { if ($options['templated_hosts'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['from']['h'] = 'hosts h'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'h.hostid=hg.hostid'; $sql_parts['where'][] = 'h.status=' . HOST_STATUS_TEMPLATE; } else { if ($options['not_proxy_hosts'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['from']['h'] = 'hosts h'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'h.hostid=hg.hostid'; $sql_parts['where'][] = 'h.status<>' . HOST_STATUS_PROXY; } } } } // with_items, with_monitored_items, with_historical_items if ($options['with_items'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE hg.hostid=i.hostid )'; } else { if ($options['with_monitored_items'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE hg.hostid=i.hostid AND i.status=' . ITEM_STATUS_ACTIVE . ')'; } else { if ($options['with_historical_items'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE hg.hostid=i.hostid AND (i.status=' . ITEM_STATUS_ACTIVE . ' OR i.status=' . ITEM_STATUS_NOTSUPPORTED . ') AND i.lastvalue IS NOT NULL)'; } } } // with_triggers, with_monitored_triggers if ($options['with_triggers'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS( SELECT t.triggerid ' . ' FROM items i, functions f, triggers t' . ' WHERE i.hostid=hg.hostid ' . ' AND f.itemid=i.itemid ' . ' AND t.triggerid=f.triggerid)'; } else { if ($options['with_monitored_triggers'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS( SELECT t.triggerid ' . ' FROM items i, functions f, triggers t' . ' WHERE i.hostid=hg.hostid ' . ' AND i.status=' . ITEM_STATUS_ACTIVE . ' AND i.itemid=f.itemid ' . ' AND f.triggerid=t.triggerid ' . ' AND t.status=' . TRIGGER_STATUS_ENABLED . ')'; } } // with_httptests, with_monitored_httptests if ($options['with_httptests'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS( SELECT a.applicationid ' . ' FROM applications a, httptest ht ' . ' WHERE a.hostid=hg.hostid ' . ' AND ht.applicationid=a.applicationid)'; } else { if ($options['with_monitored_httptests'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS( SELECT a.applicationid ' . ' FROM applications a, httptest ht ' . ' WHERE a.hostid=hg.hostid ' . ' AND ht.applicationid=a.applicationid ' . ' AND ht.status=' . HTTPTEST_STATUS_ACTIVE . ')'; } } // with_graphs if ($options['with_graphs'] != 0) { $sql_parts['from']['hg'] = 'hosts_groups hg'; $sql_parts['where']['hgg'] = 'hg.groupid=g.groupid'; $sql_parts['where'][] = 'EXISTS( SELECT DISTINCT i.itemid ' . ' FROM items i, graphs_items gi ' . ' WHERE i.hostid=hg.hostid ' . ' AND i.itemid=gi.itemid)'; } // extendoutput if ($options['extendoutput'] != 0) { $sql_parts['select']['groups'] = 'g.*'; } // count if ($options['count'] != 0) { $sql_parts['select']['groups'] = 'COUNT(g.groupid) as rowscount'; } // pattern if (!zbx_empty($options['pattern'])) { $sql_parts['where'][] = ' UPPER(g.name) LIKE ' . zbx_dbstr('%' . strtoupper($options['pattern']) . '%'); } // order // restrict not allowed columns for sorting $options['order'] = in_array($options['order'], $sort_columns) ? $options['order'] : ''; if (!zbx_empty($options['order'])) { $sql_parts['order'][] = 'g.' . $options['order']; if (!str_in_array('g.' . $options['order'], $sql_parts['select'])) { $sql_parts['select'][] = 'g.' . $options['order']; } } // limit if (zbx_ctype_digit($options['limit']) && $options['limit']) { $sql_parts['limit'] = $options['limit']; } //----------- $groupids = array(); $sql_parts['select'] = array_unique($sql_parts['select']); $sql_parts['from'] = array_unique($sql_parts['from']); $sql_parts['where'] = array_unique($sql_parts['where']); $sql_parts['order'] = array_unique($sql_parts['order']); $sql_select = ''; $sql_from = ''; $sql_where = ''; $sql_order = ''; if (!empty($sql_parts['select'])) { $sql_select .= implode(',', $sql_parts['select']); } if (!empty($sql_parts['from'])) { $sql_from .= implode(',', $sql_parts['from']); } if (!empty($sql_parts['where'])) { $sql_where .= ' AND ' . implode(' AND ', $sql_parts['where']); } if (!empty($sql_parts['order'])) { $sql_order .= ' ORDER BY ' . implode(',', $sql_parts['order']); } $sql_limit = $sql_parts['limit']; $sql = 'SELECT ' . $sql_select . ' FROM ' . $sql_from . ' WHERE ' . DBin_node('g.groupid', $nodeids) . $sql_where . $sql_order; $res = DBselect($sql, $sql_limit); while ($group = DBfetch($res)) { if ($options['count']) { $result = $group; } else { if (!$options['extendoutput']) { $result[$group['groupid']] = $group['groupid']; } else { $groupids[$group['groupid']] = $group['groupid']; if (!isset($result[$group['groupid']])) { $result[$group['groupid']] = array(); } if ($options['select_hosts'] && !isset($result[$group['groupid']]['hostids'])) { $result[$group['groupid']]['hostids'] = array(); $result[$group['groupid']]['hosts'] = array(); } $result[$group['groupid']] += $group; } } } // Adding hosts if ($options['select_hosts']) { $obj_params = array('extendoutput' => 1, 'groupids' => $groupids, 'templated_hosts' => 1); $hosts = CHost::get($obj_params); foreach ($hosts as $hostid => $host) { foreach ($host['groupids'] as $num => $groupid) { $result[$groupid]['hostids'][$hostid] = $hostid; $result[$groupid]['hosts'][$hostid] = $host; } } } return $result; }
function get_accessible_groups_by_rights(&$rights, $user_type, $perm, $perm_res = null, $nodeid = null) { $result = array(); $where = array(); if (!is_null($nodeid)) { $where = sqlPartDbNode($where, 'g.groupid', $nodeid); } if (count($where)) { $where = ' WHERE ' . implode(' AND ', $where); } else { $where = ''; } $group_perm = array(); foreach ($rights as $right) { $group_perm[$right['id']] = $right['permission']; } $dbHostGroups = DBselect('SELECT n.nodeid AS nodeid,n.name AS node_name,g.*,' . PERM_DENY . ' AS permission' . ' FROM groups g' . ' LEFT JOIN nodes n ON ' . DBid2nodeid('g.groupid') . '=n.nodeid' . $where); while ($dbHostGroup = DBfetch($dbHostGroups)) { if (USER_TYPE_SUPER_ADMIN == $user_type) { $dbHostGroup['permission'] = PERM_READ_WRITE; } else { if (isset($group_perm[$dbHostGroup['groupid']])) { $dbHostGroup['permission'] = $group_perm[$dbHostGroup['groupid']]; } else { if (is_null($dbHostGroup['nodeid'])) { $dbHostGroup['nodeid'] = id2nodeid($dbHostGroup['groupid']); } $dbHostGroup['permission'] = PERM_DENY; } } if ($dbHostGroup['permission'] < $perm) { continue; } switch ($perm_res) { case PERM_RES_DATA_ARRAY: $result[$dbHostGroup['groupid']] = $dbHostGroup; break; default: $result[$dbHostGroup['groupid']] = $dbHostGroup['groupid']; } } CArrayHelper::sort($result, array(array('field' => 'node_name', 'order' => ZBX_SORT_UP), array('field' => 'name', 'order' => ZBX_SORT_UP))); return $result; }
function get_screen_item_form() { global $USER_DETAILS; $available_hosts = get_accessible_hosts_by_user($USER_DETAILS, PERM_READ_ONLY, PERM_RES_IDS_ARRAY, get_current_nodeid(true)); $form = new CFormTable(S_SCREEN_CELL_CONFIGURATION, 'screenedit.php#form'); $form->SetHelp('web.screenedit.cell.php'); if (isset($_REQUEST['screenitemid'])) { $iresult = DBSelect('SELECT * FROM screens_items' . ' WHERE screenid=' . $_REQUEST['screenid'] . ' AND screenitemid=' . $_REQUEST['screenitemid']); $form->AddVar('screenitemid', $_REQUEST['screenitemid']); } else { $form->AddVar('x', $_REQUEST['x']); $form->AddVar('y', $_REQUEST['y']); } if (isset($_REQUEST['screenitemid']) && !isset($_REQUEST['form_refresh'])) { $irow = DBfetch($iresult); $resourcetype = $irow['resourcetype']; $resourceid = $irow['resourceid']; $width = $irow['width']; $height = $irow['height']; $colspan = $irow['colspan']; $rowspan = $irow['rowspan']; $elements = $irow['elements']; $valign = $irow['valign']; $halign = $irow['halign']; $style = $irow['style']; $url = $irow['url']; $dynamic = $irow['dynamic']; } else { $resourcetype = get_request('resourcetype', 0); $resourceid = get_request('resourceid', 0); $width = get_request('width', 500); $height = get_request('height', 100); $colspan = get_request('colspan', 0); $rowspan = get_request('rowspan', 0); $elements = get_request('elements', 25); $valign = get_request('valign', VALIGN_DEFAULT); $halign = get_request('halign', HALIGN_DEFAULT); $style = get_request('style', 0); $url = get_request('url', ''); $dynamic = get_request('dynamic', SCREEN_SIMPLE_ITEM); } $form->addVar('screenid', $_REQUEST['screenid']); $cmbRes = new CCombobox('resourcetype', $resourcetype, 'submit()'); $cmbRes->addItem(SCREEN_RESOURCE_GRAPH, S_GRAPH); $cmbRes->addItem(SCREEN_RESOURCE_SIMPLE_GRAPH, S_SIMPLE_GRAPH); $cmbRes->addItem(SCREEN_RESOURCE_PLAIN_TEXT, S_PLAIN_TEXT); $cmbRes->addItem(SCREEN_RESOURCE_MAP, S_MAP); $cmbRes->addItem(SCREEN_RESOURCE_SCREEN, S_SCREEN); $cmbRes->addItem(SCREEN_RESOURCE_SERVER_INFO, S_SERVER_INFO); $cmbRes->addItem(SCREEN_RESOURCE_HOSTS_INFO, S_HOSTS_INFO); $cmbRes->addItem(SCREEN_RESOURCE_TRIGGERS_INFO, S_TRIGGERS_INFO); $cmbRes->addItem(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, S_TRIGGERS_OVERVIEW); $cmbRes->addItem(SCREEN_RESOURCE_STATUS_OF_TRIGGERS, S_STATUS_OF_TRIGGERS); $cmbRes->addItem(SCREEN_RESOURCE_DATA_OVERVIEW, S_DATA_OVERVIEW); $cmbRes->addItem(SCREEN_RESOURCE_CLOCK, S_CLOCK); $cmbRes->addItem(SCREEN_RESOURCE_URL, S_URL); $cmbRes->addItem(SCREEN_RESOURCE_ACTIONS, S_HISTORY_OF_ACTIONS); $cmbRes->addItem(SCREEN_RESOURCE_EVENTS, S_HISTORY_OF_EVENTS); $form->addRow(S_RESOURCE, $cmbRes); if ($resourcetype == SCREEN_RESOURCE_GRAPH) { // User-defined graph $resourceid = graph_accessible($resourceid) ? $resourceid : 0; $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT DISTINCT g.graphid,g.name,n.name as node_name, h.host' . ' FROM graphs g ' . ' LEFT JOIN graphs_items gi ON g.graphid=gi.graphid ' . ' LEFT JOIN items i ON gi.itemid=i.itemid ' . ' LEFT JOIN hosts h ON h.hostid=i.hostid ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.graphid') . ' WHERE g.graphid=' . $resourceid); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['host'] . ':' . $row['name']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 75, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=graphs&srcfld1=graphid&srcfld2=name',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_GRAPH_NAME, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_SIMPLE_GRAPH) { // Simple graph $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT n.name as node_name,h.host,i.description,i.itemid,i.key_ ' . ' FROM hosts h,items i ' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('i.itemid') . ' WHERE h.hostid=i.hostid ' . ' AND h.status=' . HOST_STATUS_MONITORED . ' AND i.status=' . ITEM_STATUS_ACTIVE . ' AND ' . DBcondition('i.hostid', $available_hosts) . ' AND i.itemid=' . $resourceid); while ($row = DBfetch($result)) { $description_ = item_description($row); $row["node_name"] = isset($row["node_name"]) ? "(" . $row["node_name"] . ") " : ''; $caption = $row['node_name'] . $row['host'] . ': ' . $description_; $id = $resourceid; } } $form->AddVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 75, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=simple_graph&srcfld1=itemid&srcfld2=description',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_MAP) { // Map $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT n.name as node_name, s.sysmapid,s.name ' . ' FROM sysmaps s' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('s.sysmapid') . ' WHERE s.sysmapid=' . $resourceid); while ($row = DBfetch($result)) { if (!sysmap_accessible($row['sysmapid'], PERM_READ_ONLY)) { continue; } $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } $form->AddVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=sysmaps&srcfld1=sysmapid&srcfld2=name',400,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_PLAIN_TEXT) { // Plain text $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT n.name as node_name,h.host,i.description,i.itemid,i.key_ ' . ' FROM hosts h,items i ' . ' LEFT JOIN nodes n on n.nodeid=' . DBid2nodeid('i.itemid') . ' WHERE h.hostid=i.hostid ' . ' AND h.status=' . HOST_STATUS_MONITORED . ' AND i.status=' . ITEM_STATUS_ACTIVE . ' AND ' . DBcondition('i.hostid', $available_hosts) . ' AND i.itemid=' . $resourceid); while ($row = DBfetch($result)) { $description_ = item_description($row); $row["node_name"] = isset($row["node_name"]) ? '(' . $row["node_name"] . ') ' : ''; $caption = $row['node_name'] . $row['host'] . ': ' . $description_; $id = $resourceid; } } $form->AddVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 75, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=plain_text&srcfld1=itemid&srcfld2=description',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); $form->addRow(S_SHOW_LINES, new CNumericBox('elements', $elements, 2)); $form->addRow(S_SHOW_TEXT_AS_HTML, new CCheckBox('style', $style, null, 1)); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_EVENTS, SCREEN_RESOURCE_STATUS_OF_TRIGGERS, SCREEN_RESOURCE_ACTIONS))) { // History of actions // History of events // Status of triggers $form->addRow(S_SHOW_LINES, new CNumericBox('elements', $elements, 2)); $form->addVar('resourceid', 0); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW))) { // Overviews $caption = ''; $id = 0; if ($resourceid > 0) { $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY); $result = DBselect('SELECT DISTINCT n.name as node_name,g.groupid,g.name ' . ' FROM hosts_groups hg,hosts h,groups g ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE ' . DBcondition('g.groupid', $available_groups) . ' AND g.groupid=hg.groupid ' . ' AND hg.hostid=h.hostid ' . ' AND h.status=' . HOST_STATUS_MONITORED . ' AND g.groupid=' . $resourceid); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } $form->AddVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 75, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=overview&srcfld1=groupid&srcfld2=name',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_GROUP, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_SCREEN) { // Screens $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT DISTINCT n.name as node_name,s.screenid,s.name ' . ' FROM screens s ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('s.screenid') . ' WHERE s.screenid=' . $resourceid); while ($row = DBfetch($result)) { if (!screen_accessible($row['screenid'], PERM_READ_ONLY)) { continue; } if (check_screen_recursion($_REQUEST['screenid'], $row['screenid'])) { continue; } $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=screens2&srcfld1=screenid&srcfld2=name&screenid=" . $_REQUEST['screenid'] . "',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_HOSTS_INFO || $resourcetype == SCREEN_RESOURCE_TRIGGERS_INFO) { // HOSTS info $caption = ''; $id = 0; $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY); if (remove_nodes_from_id($resourceid) > 0) { $result = DBselect('SELECT DISTINCT n.name as node_name,g.groupid,g.name ' . ' FROM hosts_groups hg, groups g ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE ' . DBcondition('g.groupid', $available_groups) . ' AND g.groupid=' . $resourceid); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } else { if (remove_nodes_from_id($resourceid) == 0) { $result = DBselect('SELECT DISTINCT n.name as node_name ' . ' FROM nodes n ' . ' WHERE n.nodeid=' . id2nodeid($resourceid)); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . S_MINUS_ALL_GROUPS_MINUS; $id = $resourceid; } } } $form->AddVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=host_group_scr&srcfld1=groupid&srcfld2=name',480,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->AddRow(S_GROUP, array($textfield, SPACE, $selectbtn)); } else { // SCREEN_RESOURCE_CLOCK $form->addVar('resourceid', 0); } } } } } } } } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_HOSTS_INFO, SCREEN_RESOURCE_TRIGGERS_INFO))) { $cmbStyle = new CComboBox("style", $style); $cmbStyle->AddItem(STYLE_HORISONTAL, S_HORIZONTAL); $cmbStyle->AddItem(STYLE_VERTICAL, S_VERTICAL); $form->AddRow(S_STYLE, $cmbStyle); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW))) { $cmbStyle = new CComboBox('style', $style); $cmbStyle->AddItem(STYLE_LEFT, S_LEFT); $cmbStyle->AddItem(STYLE_TOP, S_TOP); $form->AddRow(S_HOSTS_LOCATION, $cmbStyle); } else { if ($resourcetype == SCREEN_RESOURCE_CLOCK) { $cmbStyle = new CComboBox('style', $style); $cmbStyle->AddItem(TIME_TYPE_LOCAL, S_LOCAL_TIME); $cmbStyle->AddItem(TIME_TYPE_SERVER, S_SERVER_TIME); $form->AddRow(S_TIME_TYPE, $cmbStyle); } else { $form->AddVar('style', 0); } } } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_URL))) { $form->AddRow(S_URL, new CTextBox('url', $url, 60)); } else { $form->AddVar('url', ''); } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_CLOCK, SCREEN_RESOURCE_URL))) { $form->AddRow(S_WIDTH, new CNumericBox('width', $width, 5)); $form->AddRow(S_HEIGHT, new CNumericBox('height', $height, 5)); } else { $form->AddVar('width', 500); $form->AddVar('height', 100); } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_MAP, SCREEN_RESOURCE_CLOCK, SCREEN_RESOURCE_URL))) { $cmbHalign = new CComboBox('halign', $halign); $cmbHalign->AddItem(HALIGN_CENTER, S_CENTRE); $cmbHalign->AddItem(HALIGN_LEFT, S_LEFT); $cmbHalign->AddItem(HALIGN_RIGHT, S_RIGHT); $form->AddRow(S_HORIZONTAL_ALIGN, $cmbHalign); } else { $form->AddVar('halign', 0); } $cmbValign = new CComboBox('valign', $valign); $cmbValign->AddItem(VALIGN_MIDDLE, S_MIDDLE); $cmbValign->AddItem(VALIGN_TOP, S_TOP); $cmbValign->AddItem(VALIGN_BOTTOM, S_BOTTOM); $form->AddRow(S_VERTICAL_ALIGN, $cmbValign); $form->AddRow(S_COLUMN_SPAN, new CNumericBox('colspan', $colspan, 2)); $form->AddRow(S_ROW_SPAN, new CNumericBox('rowspan', $rowspan, 2)); // dynamic AddOn if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_PLAIN_TEXT))) { $form->AddRow(S_DYNAMIC_ITEM, new CCheckBox('dynamic', $dynamic, null, 1)); } $form->AddItemToBottomRow(new CButton('save', S_SAVE)); if (isset($_REQUEST['screenitemid'])) { $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonDelete(null, url_param('form') . url_param('screenid') . url_param('screenitemid'))); } $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonCancel(url_param('screenid'))); return $form; }
$available_nodes = get_accessible_nodes_by_user($USER_DETAILS, PERM_READ_WRITE, PERM_RES_IDS_ARRAY); $cmbResourceNode = new CComboBox('nodeid', $nodeid, 'submit();'); $cmbResourceNode->AddItem(0, S_ALL_S); $sql = 'SELECT name,nodeid FROM nodes WHERE ' . DBcondition('nodeid', $available_nodes); $db_nodes = DBselect($sql); while ($node = DBfetch($db_nodes)) { $cmbResourceNode->AddItem($node['nodeid'], $node['name']); } $frmTitle->AddItem(array(S_NODE, SPACE, $cmbResourceNode)); } show_table_header(permission2str($permission), $frmTitle); $form = new CForm(); $form->addOption('id', 'groups'); $table = new CTableInfo(S_NO_RESOURCES_DEFINED); $table->SetHeader(new CCol(array(new CCheckBox("all_groups", NULL, 'check_all(this.checked)'), S_NAME))); $result = DBselect('SELECT n.name as node_name, g.name as name, g.groupid as id' . ' FROM groups g ' . ' LEFT JOIN nodes n on ' . DBid2nodeid('g.groupid') . '=n.nodeid ' . ($nodeid ? ' WHERE nodeid=' . $nodeid : '') . ' ORDER BY n.name, g.name'); $grouplist = array(); while ($row = DBfetch($result)) { if (isset($row['node_name'])) { $row['name'] = $row['node_name'] . ':' . $row['name']; } $grouplist[$row['id']] = array('name' => $row['name'], 'permission' => $permission); $table->addRow(new CCol(array(new CCheckBox('groups[' . $row['id'] . ']', NULL, NULL, $row['id']), $row['name']))); } insert_js('var grouplist = ' . zbx_jsvalue($grouplist) . ';'); $button = new CButton('select', S_SELECT, 'add_groups("' . $dstfrm . '")'); $button->setType('button'); $table->setFooter(new CCol($button, 'right')); $form->addItem($table); $form->show(); ?>
} if (isset($_REQUEST['usrgrpid']) && !isset($_REQUEST['form_refresh'])) { $data['name'] = $data['usrgrp']['name']; $data['users_status'] = $data['usrgrp']['users_status']; $data['gui_access'] = $data['usrgrp']['gui_access']; $data['debug_mode'] = $data['usrgrp']['debug_mode']; // group users $data['group_users'] = array(); $sql = 'SELECT DISTINCT u.userid ' . ' FROM users u,users_groups ug ' . ' WHERE u.userid=ug.userid ' . ' AND ug.usrgrpid=' . $data['usrgrpid']; $db_users = DBselect($sql); while ($db_user = DBfetch($db_users)) { $data['group_users'][$db_user['userid']] = $db_user['userid']; } // group rights $data['group_rights'] = array(); $sql = 'SELECT r.*,n.name AS node_name,g.name AS name ' . ' FROM groups g ' . ' LEFT JOIN rights r ON r.id=g.groupid ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE r.groupid=' . $data['usrgrpid']; $db_rights = DBselect($sql); while ($db_right = DBfetch($db_rights)) { if (!empty($db_right['node_name'])) { $db_right['name'] = $db_right['node_name'] . ':' . $db_right['name']; } $data['group_rights'][$db_right['id']] = array('permission' => $db_right['permission'], 'name' => $db_right['name'], 'id' => $db_right['id']); } } else { $data['name'] = get_request('gname', ''); $data['users_status'] = get_request('users_status', GROUP_STATUS_ENABLED); $data['gui_access'] = get_request('gui_access', GROUP_GUI_ACCESS_SYSTEM); $data['debug_mode'] = get_request('debug_mode', GROUP_DEBUG_MODE_DISABLED); $data['group_users'] = get_request('group_users', array()); $data['group_rights'] = get_request('group_rights', array()); }
function DBin_node($id_name, $nodes = null) { if (is_null($nodes)) { $nodes = get_current_nodeid(); } if (empty($nodes)) { $nodes = 0; } if (is_array($nodes)) { $nodes = implode(',', $nodes); } else { if (is_string($nodes)) { if (!eregi('([0-9\\,]+)', $nodes)) { fatal_error('Incorrect "nodes" for "DBin_node". Passed [' . $nodes . ']'); } } else { if (!zbx_numeric($nodes)) { fatal_error('Incorrect type of "nodes" for "DBin_node". Passed [' . gettype($nodes) . ']'); } } } return ' ' . DBid2nodeid($id_name) . ' in (' . $nodes . ') '; }
function get_screen_item_form() { global $USER_DETAILS; $form = new CFormTable(S_SCREEN_CELL_CONFIGURATION, 'screenedit.php?screenid=' . $_REQUEST['screenid']); $form->SetHelp('web.screenedit.cell.php'); if (isset($_REQUEST['screenitemid'])) { $sql = 'SELECT * ' . ' FROM screens_items' . ' WHERE screenid=' . $_REQUEST['screenid'] . ' AND screenitemid=' . $_REQUEST['screenitemid']; $iresult = DBSelect($sql); $form->addVar('screenitemid', $_REQUEST['screenitemid']); } else { $form->addVar('x', $_REQUEST['x']); $form->addVar('y', $_REQUEST['y']); } if (isset($_REQUEST['screenitemid']) && !isset($_REQUEST['form_refresh'])) { $irow = DBfetch($iresult); $resourcetype = $irow['resourcetype']; $resourceid = $irow['resourceid']; $width = $irow['width']; $height = $irow['height']; $colspan = $irow['colspan']; $rowspan = $irow['rowspan']; $elements = $irow['elements']; $valign = $irow['valign']; $halign = $irow['halign']; $style = $irow['style']; $url = $irow['url']; $dynamic = $irow['dynamic']; } else { $resourcetype = get_request('resourcetype', 0); $resourceid = get_request('resourceid', 0); $width = get_request('width', 500); $height = get_request('height', 100); $colspan = get_request('colspan', 0); $rowspan = get_request('rowspan', 0); $elements = get_request('elements', 25); $valign = get_request('valign', VALIGN_DEFAULT); $halign = get_request('halign', HALIGN_DEFAULT); $style = get_request('style', 0); $url = get_request('url', ''); $dynamic = get_request('dynamic', SCREEN_SIMPLE_ITEM); } $form->addVar('screenid', $_REQUEST['screenid']); // a-z order!!! $cmbRes = new CCombobox('resourcetype', $resourcetype, 'submit()'); $cmbRes->addItem(SCREEN_RESOURCE_CLOCK, S_CLOCK); $cmbRes->addItem(SCREEN_RESOURCE_DATA_OVERVIEW, S_DATA_OVERVIEW); $cmbRes->addItem(SCREEN_RESOURCE_GRAPH, S_GRAPH); $cmbRes->addItem(SCREEN_RESOURCE_ACTIONS, S_HISTORY_OF_ACTIONS); $cmbRes->addItem(SCREEN_RESOURCE_EVENTS, S_HISTORY_OF_EVENTS); $cmbRes->addItem(SCREEN_RESOURCE_HOSTS_INFO, S_HOSTS_INFO); $cmbRes->addItem(SCREEN_RESOURCE_MAP, S_MAP); $cmbRes->addItem(SCREEN_RESOURCE_PLAIN_TEXT, S_PLAIN_TEXT); $cmbRes->addItem(SCREEN_RESOURCE_SCREEN, S_SCREEN); $cmbRes->addItem(SCREEN_RESOURCE_SERVER_INFO, S_SERVER_INFO); $cmbRes->addItem(SCREEN_RESOURCE_SIMPLE_GRAPH, S_SIMPLE_GRAPH); $cmbRes->addItem(SCREEN_RESOURCE_HOSTGROUP_TRIGGERS, S_STATUS_OF_HOSTGROUP_TRIGGERS); $cmbRes->addItem(SCREEN_RESOURCE_HOST_TRIGGERS, S_STATUS_OF_HOST_TRIGGERS); $cmbRes->addItem(SCREEN_RESOURCE_SYSTEM_STATUS, S_SYSTEM_STATUS); $cmbRes->addItem(SCREEN_RESOURCE_TRIGGERS_INFO, S_TRIGGERS_INFO); $cmbRes->addItem(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, S_TRIGGERS_OVERVIEW); $cmbRes->addItem(SCREEN_RESOURCE_URL, S_URL); $form->addRow(S_RESOURCE, $cmbRes); if ($resourcetype == SCREEN_RESOURCE_GRAPH) { // User-defined graph $options = array('graphids' => $resourceid, 'select_hosts' => array('hostid', 'host'), 'output' => API_OUTPUT_EXTEND); $graphs = CGraph::get($options); $caption = ''; $id = 0; if (!empty($graphs)) { $id = $resourceid; $graph = reset($graphs); order_result($graph['hosts'], 'host'); $graph['host'] = reset($graph['hosts']); $caption = $graph['host']['host'] . ':' . $graph['name']; $nodeName = get_node_name_by_elid($graph['host']['hostid']); if (!zbx_empty($nodeName)) { $caption = '(' . $nodeName . ') ' . $caption; } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 75, 'yes'); $selectbtn = new CButton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&real_hosts=1&dstfld1=resourceid&dstfld2=caption&srctbl=graphs&srcfld1=graphid&srcfld2=name',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_GRAPH_NAME, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_SIMPLE_GRAPH) { // Simple graph $options = array('itemids' => $resourceid, 'select_hosts' => array('hostid', 'host'), 'output' => API_OUTPUT_EXTEND); $items = CItem::get($options); $caption = ''; $id = 0; if (!empty($items)) { $id = $resourceid; $item = reset($items); $item['host'] = reset($item['hosts']); $caption = item_description($item); $nodeName = get_node_name_by_elid($item['itemid']); if (!zbx_empty($nodeName)) { $caption = '(' . $nodeName . ') ' . $caption; } } $form->addVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 75, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&real_hosts=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=simple_graph&srcfld1=itemid&srcfld2=description',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_MAP) { // Map $options = array('sysmapids' => $resourceid, 'output' => API_OUTPUT_EXTEND); $maps = CMap::get($options); $caption = ''; $id = 0; if (!empty($maps)) { $id = $resourceid; $map = reset($maps); $caption = $map['name']; $nodeName = get_node_name_by_elid($map['sysmapid']); if (!zbx_empty($nodeName)) { $caption = '(' . $nodeName . ') ' . $caption; } } $form->addVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=sysmaps&srcfld1=sysmapid&srcfld2=name',400,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_PLAIN_TEXT) { // Plain text $options = array('itemids' => $resourceid, 'select_hosts' => array('hostid', 'host'), 'output' => API_OUTPUT_EXTEND); $items = CItem::get($options); $caption = ''; $id = 0; if (!empty($items)) { $id = $resourceid; $item = reset($items); $item['host'] = reset($item['hosts']); $caption = item_description($item); $nodeName = get_node_name_by_elid($item['itemid']); if (!zbx_empty($nodeName)) { $caption = '(' . $nodeName . ') ' . $caption; } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 75, 'yes'); $selectbtn = new CButton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=plain_text&srcfld1=itemid&srcfld2=description',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); $form->addRow(S_SHOW_LINES, new CNumericBox('elements', $elements, 2)); $form->addRow(S_SHOW_TEXT_AS_HTML, new CCheckBox('style', $style, null, 1)); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_HOSTGROUP_TRIGGERS, SCREEN_RESOURCE_HOST_TRIGGERS))) { // Status of triggers $caption = ''; $id = 0; if (SCREEN_RESOURCE_HOSTGROUP_TRIGGERS == $resourcetype) { if ($resourceid > 0) { $options = array('groupids' => $resourceid, 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $groups = CHostgroup::get($options); foreach ($groups as $gnum => $group) { $caption = get_node_name_by_elid($group['groupid'], true, ':') . $group['name']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 60, 'yes'); $selectbtn = new CButton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=host_group&srcfld1=groupid&srcfld2=name',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_GROUP, array($textfield, SPACE, $selectbtn)); } else { if ($resourceid > 0) { $options = array('hostids' => $resourceid, 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $hosts = CHost::get($options); foreach ($hosts as $hnum => $host) { $caption = get_node_name_by_elid($host['hostid'], true, ':') . $host['host']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 60, 'yes'); $selectbtn = new CButton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=hosts&srcfld1=hostid&srcfld2=host',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_HOST, array($textfield, SPACE, $selectbtn)); } $form->addRow(S_SHOW_LINES, new CNumericBox('elements', $elements, 2)); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_EVENTS, SCREEN_RESOURCE_ACTIONS))) { // History of actions // History of events $form->addRow(S_SHOW_LINES, new CNumericBox('elements', $elements, 2)); $form->addVar('resourceid', 0); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW))) { // Overviews $caption = ''; $id = 0; if ($resourceid > 0) { $options = array('groupids' => $resourceid, 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $groups = CHostgroup::get($options); foreach ($groups as $gnum => $group) { $caption = get_node_name_by_elid($group['groupid'], true, ':') . $group['name']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 75, 'yes'); $selectbtn = new CButton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=overview&srcfld1=groupid&srcfld2=name',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_GROUP, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_SCREEN) { // Screens $caption = ''; $id = 0; if ($resourceid > 0) { $result = DBselect('SELECT DISTINCT n.name as node_name,s.screenid,s.name ' . ' FROM screens s ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('s.screenid') . ' WHERE s.screenid=' . $resourceid); while ($row = DBfetch($result)) { $r = CScreen::get(array('screenids' => $row['screenid'], 'output' => API_OUTPUT_SHORTEN)); if (empty($r)) { continue; } if (check_screen_recursion($_REQUEST['screenid'], $row['screenid'])) { continue; } $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } $form->addVar('resourceid', $id); $textfield = new Ctextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=screens2&srcfld1=screenid&srcfld2=name&screenid=" . $_REQUEST['screenid'] . "',800,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_PARAMETER, array($textfield, SPACE, $selectbtn)); } else { if ($resourcetype == SCREEN_RESOURCE_HOSTS_INFO || $resourcetype == SCREEN_RESOURCE_TRIGGERS_INFO) { // HOSTS info $caption = ''; $id = 0; $available_groups = get_accessible_groups_by_user($USER_DETAILS, PERM_READ_ONLY); if (remove_nodes_from_id($resourceid) > 0) { $result = DBselect('SELECT DISTINCT n.name as node_name,g.groupid,g.name ' . ' FROM hosts_groups hg, groups g ' . ' LEFT JOIN nodes n ON n.nodeid=' . DBid2nodeid('g.groupid') . ' WHERE ' . DBcondition('g.groupid', $available_groups) . ' AND g.groupid=' . $resourceid); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . $row['name']; $id = $resourceid; } } else { if (remove_nodes_from_id($resourceid) == 0) { $result = DBselect('SELECT DISTINCT n.name as node_name ' . ' FROM nodes n ' . ' WHERE n.nodeid=' . id2nodeid($resourceid)); while ($row = DBfetch($result)) { $row['node_name'] = isset($row['node_name']) ? '(' . $row['node_name'] . ') ' : ''; $caption = $row['node_name'] . S_MINUS_ALL_GROUPS_MINUS; $id = $resourceid; } } } $form->addVar('resourceid', $id); $textfield = new CTextbox('caption', $caption, 60, 'yes'); $selectbtn = new Cbutton('select', S_SELECT, "javascript: return PopUp('popup.php?writeonly=1&dstfrm=" . $form->getName() . "&dstfld1=resourceid&dstfld2=caption&srctbl=host_group_scr&srcfld1=groupid&srcfld2=name',480,450);"); $selectbtn->setAttribute('onmouseover', "javascript: this.style.cursor = 'pointer';"); $form->addRow(S_GROUP, array($textfield, SPACE, $selectbtn)); } else { // SCREEN_RESOURCE_CLOCK $form->addVar('resourceid', 0); } } } } } } } } } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_HOSTS_INFO, SCREEN_RESOURCE_TRIGGERS_INFO))) { $cmbStyle = new CComboBox("style", $style); $cmbStyle->addItem(STYLE_HORISONTAL, S_HORIZONTAL); $cmbStyle->addItem(STYLE_VERTICAL, S_VERTICAL); $form->addRow(S_STYLE, $cmbStyle); } else { if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW))) { $cmbStyle = new CComboBox('style', $style); $cmbStyle->addItem(STYLE_LEFT, S_LEFT); $cmbStyle->addItem(STYLE_TOP, S_TOP); $form->addRow(S_HOSTS_LOCATION, $cmbStyle); } else { if ($resourcetype == SCREEN_RESOURCE_CLOCK) { $cmbStyle = new CComboBox('style', $style); $cmbStyle->addItem(TIME_TYPE_LOCAL, S_LOCAL_TIME); $cmbStyle->addItem(TIME_TYPE_SERVER, S_SERVER_TIME); $form->addRow(S_TIME_TYPE, $cmbStyle); } else { $form->addVar('style', 0); } } } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_URL))) { $form->addRow(S_URL, new CTextBox('url', $url, 60)); } else { $form->addVar('url', ''); } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_CLOCK, SCREEN_RESOURCE_URL))) { $form->addRow(S_WIDTH, new CNumericBox('width', $width, 5)); $form->addRow(S_HEIGHT, new CNumericBox('height', $height, 5)); } else { $form->addVar('width', 500); $form->addVar('height', 100); } if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_MAP, SCREEN_RESOURCE_CLOCK, SCREEN_RESOURCE_URL))) { $cmbHalign = new CComboBox('halign', $halign); $cmbHalign->addItem(HALIGN_CENTER, S_CENTRE); $cmbHalign->addItem(HALIGN_LEFT, S_LEFT); $cmbHalign->addItem(HALIGN_RIGHT, S_RIGHT); $form->addRow(S_HORIZONTAL_ALIGN, $cmbHalign); } else { $form->addVar('halign', 0); } $cmbValign = new CComboBox('valign', $valign); $cmbValign->addItem(VALIGN_MIDDLE, S_MIDDLE); $cmbValign->addItem(VALIGN_TOP, S_TOP); $cmbValign->addItem(VALIGN_BOTTOM, S_BOTTOM); $form->addRow(S_VERTICAL_ALIGN, $cmbValign); $form->addRow(S_COLUMN_SPAN, new CNumericBox('colspan', $colspan, 2)); $form->addRow(S_ROW_SPAN, new CNumericBox('rowspan', $rowspan, 2)); // dynamic AddOn if (uint_in_array($resourcetype, array(SCREEN_RESOURCE_GRAPH, SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_PLAIN_TEXT))) { $form->addRow(S_DYNAMIC_ITEM, new CCheckBox('dynamic', $dynamic, null, 1)); } $form->addItemToBottomRow(new CButton('save', S_SAVE)); if (isset($_REQUEST['screenitemid'])) { $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonDelete(null, url_param('form') . url_param('screenid') . url_param('screenitemid'))); } $form->addItemToBottomRow(SPACE); $form->addItemToBottomRow(new CButtonCancel(url_param('screenid'))); return $form; }
function get_viewed_hosts($perm, $groupid = 0, $options = array(), $nodeid = null, $sql = array()) { global $USER_DETAILS; global $page; $userid = $USER_DETAILS['userid']; $def_sql = array('select' => array('h.hostid', 'h.host'), 'from' => array('hosts h'), 'where' => array(), 'order' => array()); $def_options = array('deny_all' => 0, 'allow_all' => 0, 'select_first_host' => 0, 'select_first_host_if_empty' => 0, 'select_host_on_group_switch' => 0, 'do_not_select' => 0, 'do_not_select_if_empty' => 0, 'monitored_hosts' => 0, 'templated_hosts' => 0, 'real_hosts' => 0, 'not_proxy_hosts' => 0, 'with_items' => 0, 'with_monitored_items' => 0, 'with_historical_items' => 0, 'with_triggers' => 0, 'with_monitored_triggers' => 0, 'with_httptests' => 0, 'with_monitored_httptests' => 0, 'with_graphs' => 0, 'only_current_node' => 0); $def_options = zbx_array_merge($def_options, $options); $config = select_config(); $dd_first_entry = $config['dropdown_first_entry']; if ($def_options['allow_all']) { $dd_first_entry = ZBX_DROPDOWN_FIRST_ALL; } if ($def_options['deny_all']) { $dd_first_entry = ZBX_DROPDOWN_FIRST_NONE; } if ($dd_first_entry == ZBX_DROPDOWN_FIRST_ALL) { $def_options['select_host_on_group_switch'] = 1; } $result = array('original' => -1, 'selected' => 0, 'hosts' => array(), 'hostids' => array()); $hosts =& $result['hosts']; $hostids =& $result['hostids']; $first_entry = $dd_first_entry == ZBX_DROPDOWN_FIRST_NONE ? S_NOT_SELECTED_SMALL : S_ALL_SMALL; $hosts['0'] = $first_entry; if (!is_array($groupid) && $groupid == 0) { if ($dd_first_entry == ZBX_DROPDOWN_FIRST_NONE) { return $result; } } else { zbx_value2array($groupid); $def_sql['from'][] = 'hosts_groups hg'; $def_sql['where'][] = DBcondition('hg.groupid', $groupid); $def_sql['where'][] = 'hg.hostid=h.hostid'; } $_REQUEST['hostid'] = $result['original'] = get_request('hostid', -1); //----- if (is_null($nodeid)) { if (!$def_options['only_current_node']) { $nodeid = get_current_nodeid(); } else { $nodeid = get_current_nodeid(false); } } //$nodeid = is_null($nodeid)?get_current_nodeid($opt):$nodeid; //$available_hosts = get_accessible_hosts_by_user($USER_DETAILS,$perm,PERM_RES_IDS_ARRAY,$nodeid,AVAILABLE_NOCACHE); if (USER_TYPE_SUPER_ADMIN != $USER_DETAILS['type']) { $def_sql['from']['hg'] = 'hosts_groups hg'; $def_sql['from']['r'] = 'rights r'; $def_sql['from']['ug'] = 'users_groups ug'; $def_sql['where']['hgh'] = 'hg.hostid=h.hostid'; $def_sql['where'][] = 'r.id=hg.groupid '; $def_sql['where'][] = 'r.groupid=ug.usrgrpid'; $def_sql['where'][] = 'ug.userid=' . $userid; $def_sql['where'][] = 'r.permission>=' . $perm; $def_sql['where'][] = 'NOT EXISTS( ' . ' SELECT hgg.groupid ' . ' FROM hosts_groups hgg, rights rr, users_groups gg ' . ' WHERE hgg.hostid=hg.hostid ' . ' AND rr.id=hgg.groupid ' . ' AND rr.groupid=gg.usrgrpid ' . ' AND gg.userid=' . $userid . ' AND rr.permission<' . $perm . ')'; } // nodes if (ZBX_DISTRIBUTED) { $def_sql['select'][] = 'n.name'; $def_sql['from'][] = 'nodes n'; $def_sql['where'][] = 'n.nodeid=' . DBid2nodeid('h.hostid'); $def_sql['order'][] = 'n.name'; } // hosts if ($def_options['monitored_hosts']) { $def_sql['where'][] = 'h.status=' . HOST_STATUS_MONITORED; } else { if ($def_options['real_hosts']) { $def_sql['where'][] = 'h.status IN(' . HOST_STATUS_MONITORED . ',' . HOST_STATUS_NOT_MONITORED . ')'; } else { if ($def_options['templated_hosts']) { $def_sql['where'][] = 'h.status=' . HOST_STATUS_TEMPLATE; } else { if ($def_options['not_proxy_hosts']) { $def_sql['where'][] = 'h.status<>' . HOST_STATUS_PROXY; } } } } // items if ($def_options['with_items']) { $def_sql['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE h.hostid=i.hostid )'; } else { if ($def_options['with_monitored_items']) { $def_sql['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE h.hostid=i.hostid AND i.status=' . ITEM_STATUS_ACTIVE . ')'; } else { if ($def_options['with_historical_items']) { $def_sql['where'][] = 'EXISTS (SELECT i.hostid FROM items i WHERE h.hostid=i.hostid AND (i.status=' . ITEM_STATUS_ACTIVE . ' OR i.status=' . ITEM_STATUS_NOTSUPPORTED . ') AND i.lastvalue IS NOT NULL)'; } } } // triggers if ($def_options['with_triggers']) { $def_sql['where'][] = 'EXISTS( SELECT i.itemid ' . ' FROM items i, functions f, triggers t' . ' WHERE i.hostid=h.hostid ' . ' AND i.itemid=f.itemid ' . ' AND f.triggerid=t.triggerid)'; } else { if ($def_options['with_monitored_triggers']) { $def_sql['where'][] = 'EXISTS( SELECT i.itemid ' . ' FROM items i, functions f, triggers t' . ' WHERE i.hostid=h.hostid ' . ' AND i.status=' . ITEM_STATUS_ACTIVE . ' AND i.itemid=f.itemid ' . ' AND f.triggerid=t.triggerid ' . ' AND t.status=' . TRIGGER_STATUS_ENABLED . ')'; } } // httptests if ($def_options['with_httptests']) { $def_sql['where'][] = 'EXISTS( SELECT a.applicationid ' . ' FROM applications a, httptest ht ' . ' WHERE a.hostid=h.hostid ' . ' AND ht.applicationid=a.applicationid)'; } else { if ($def_options['with_monitored_httptests']) { $def_sql['where'][] = 'EXISTS( SELECT a.applicationid ' . ' FROM applications a, httptest ht ' . ' WHERE a.hostid=h.hostid ' . ' AND ht.applicationid=a.applicationid ' . ' AND ht.status=' . HTTPTEST_STATUS_ACTIVE . ')'; } } // graphs if ($def_options['with_graphs']) { $def_sql['where'][] = 'EXISTS( SELECT DISTINCT i.itemid ' . ' FROM items i, graphs_items gi ' . ' WHERE i.hostid=h.hostid ' . ' AND i.itemid=gi.itemid)'; } //------ $def_sql['order'][] = 'h.host'; foreach ($sql as $key => $value) { zbx_value2array($value); if (isset($def_sql[$key])) { $def_sql[$key] = zbx_array_merge($def_sql[$key], $value); } else { $def_sql[$key] = $value; } } $def_sql['select'] = array_unique($def_sql['select']); $def_sql['from'] = array_unique($def_sql['from']); $def_sql['where'] = array_unique($def_sql['where']); $def_sql['order'] = array_unique($def_sql['order']); $sql_select = ''; $sql_from = ''; $sql_where = ''; $sql_order = ''; if (!empty($def_sql['select'])) { $sql_select .= implode(',', $def_sql['select']); } if (!empty($def_sql['from'])) { $sql_from .= implode(',', $def_sql['from']); } if (!empty($def_sql['where'])) { $sql_where .= ' AND ' . implode(' AND ', $def_sql['where']); } if (!empty($def_sql['order'])) { $sql_order .= implode(',', $def_sql['order']); } $sql = 'SELECT DISTINCT ' . $sql_select . ' FROM ' . $sql_from . ' WHERE ' . DBin_node('h.hostid', $nodeid) . $sql_where . ' ORDER BY ' . $sql_order; $res = DBselect($sql); while ($host = DBfetch($res)) { $hosts[$host['hostid']] = $host['host']; $hostids[$host['hostid']] = $host['hostid']; if (bccomp($_REQUEST['hostid'], $host['hostid']) == 0) { $result['selected'] = $host['hostid']; } } $profile_hostid = CProfile::get('web.' . $page['menu'] . '.hostid'); //----- if ($def_options['do_not_select']) { $_REQUEST['hostid'] = $result['selected'] = 0; } else { if ($def_options['do_not_select_if_empty'] && $_REQUEST['hostid'] == -1) { $_REQUEST['hostid'] = $result['selected'] = 0; } else { if ($def_options['select_first_host'] || $def_options['select_first_host_if_empty'] && $_REQUEST['hostid'] == -1 && is_null($profile_hostid) || $def_options['select_host_on_group_switch'] && $_REQUEST['hostid'] != -1 && bccomp($_REQUEST['hostid'], $result['selected']) != 0) { $first_hostid = next($hostids); reset($hostids); if ($first_hostid !== FALSE) { $_REQUEST['hostid'] = $result['selected'] = $first_hostid; } else { $_REQUEST['hostid'] = $result['selected'] = 0; } } else { if ($config['dropdown_first_remember']) { if ($_REQUEST['hostid'] == -1) { $_REQUEST['hostid'] = is_null($profile_hostid) ? '0' : $profile_hostid; } if (isset($hostids[$_REQUEST['hostid']])) { $result['selected'] = $_REQUEST['hostid']; } else { $_REQUEST['hostid'] = $result['selected']; } } else { $_REQUEST['hostid'] = $result['selected']; } } } } return $result; }
} else { if ($header_host['available'] == HOST_AVAILABLE_UNKNOWN) { $available = new CSpan(S_UNKNOWN, 'unknown'); } } } $tbl_header_host = new CTable(); $tbl_header_host->addRow(array(new CLink(bold(S_HOST_LIST), 'hosts.php?hostid=' . $header_host['hostid'] . url_param('groupid')), $triggers, $graphs, array(bold(S_HOST . ': '), $description), array(bold(S_DNS . ': '), $dns), array(bold(S_IP . ': '), $ip), array(bold(S_PORT . ': '), $port), array(bold(S_STATUS . ': '), $status), array(bold(S_AVAILABILITY . ': '), $available))); $tbl_header_host->setClass('infobox'); $items_wdgt->addItem($tbl_header_host); } // --->>> SELECTED HOST HEADER INFORMATION <<<--- if ($filter_enabled) { if (ZBX_DISTRIBUTED && isset($_REQUEST['filter_node'])) { $from_tables['n'] = 'nodes n'; $where_case[] = 'n.nodeid=' . DBid2nodeid('i.itemid'); $where_case[] = 'n.name like ' . zbx_dbstr('%' . $_REQUEST['filter_node'] . '%'); } if (isset($_REQUEST['filter_group'])) { $from_tables['hg'] = 'hosts_groups hg'; $from_tables['g'] = 'groups g'; $where_case[] = 'i.hostid=hg.hostid'; $where_case[] = 'g.groupid=hg.groupid'; $where_case[] = 'g.name like ' . zbx_dbstr('%' . $_REQUEST['filter_group'] . '%'); } if (isset($_REQUEST['filter_host'])) { $where_case[] = 'h.host like ' . zbx_dbstr('%' . $_REQUEST['filter_host'] . '%'); } if (isset($_REQUEST['filter_application'])) { $from_tables['a'] = 'applications a'; $from_tables['ia'] = 'items_applications ia';