コード例 #1
0
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();
    }
}
コード例 #2
0
} 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')));
コード例 #3
0
ファイル: usergrps.php プロジェクト: itnihao/zatree-2.2
     $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);
コード例 #4
0
ファイル: forms.inc.php プロジェクト: rennhak/zabbix
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();
}
コード例 #5
0
ファイル: perm.inc.php プロジェクト: rennhak/zabbix
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;
}
コード例 #6
0
ファイル: config.inc.php プロジェクト: rennhak/zabbix
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);
    }
}
コード例 #7
0
ファイル: popup.php プロジェクト: phedders/zabbix
         $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');
コード例 #8
0
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;
}
コード例 #9
0
ファイル: class.chostgroup.php プロジェクト: phedders/zabbix
    /**
     * 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;
    }
コード例 #10
0
ファイル: perm.inc.php プロジェクト: SandipSingh14/Zabbix_
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;
}
コード例 #11
0
ファイル: screens.inc.php プロジェクト: phedders/zabbix
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;
}
コード例 #12
0
ファイル: popup_right.php プロジェクト: rennhak/zabbix
    $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();
?>
コード例 #13
0
 }
 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());
 }
コード例 #14
0
ファイル: db.inc.php プロジェクト: rennhak/zabbix
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 . ') ';
}
コード例 #15
0
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;
}
コード例 #16
0
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;
}
コード例 #17
0
ファイル: items.php プロジェクト: phedders/zabbix
         } 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';