Exemplo n.º 1
0
    order_result($data['db_groups'], 'name');
    if ($data['twb_groupid'] == -1) {
        $dbGroup = reset($data['db_groups']);
        $data['twb_groupid'] = $dbGroup['groupid'];
    }
    // get all possible hosts
    $data['db_hosts'] = API::Host()->get(array('output' => array('hostid', 'name'), 'groupids' => $data['twb_groupid'] ? $data['twb_groupid'] : null, 'templated_hosts' => true, 'editable' => true, 'filter' => array('flags' => ZBX_FLAG_DISCOVERY_NORMAL)));
    order_result($data['db_hosts'], 'name');
    // get selected hosts
    if ($data['hosts']) {
        $data['r_hosts'] = API::Host()->get(array('output' => array('hostid', 'name', 'flags'), 'hostids' => $data['hosts'], 'templated_hosts' => true, 'preservekeys' => true));
        order_result($data['r_hosts'], 'name');
    }
    // deletable groups
    if ($data['groupid'] != 0) {
        $data['deletableHostGroups'] = getDeletableHostGroupIds(array($data['groupid']));
    }
    // render view
    $hostgroupView = new CView('configuration.hostgroups.edit', $data);
    $hostgroupView->render();
    $hostgroupView->show();
} else {
    $sortField = getRequest('sort', CProfile::get('web.' . $page['file'] . '.sort', 'name'));
    $sortOrder = getRequest('sortorder', CProfile::get('web.' . $page['file'] . '.sortorder', ZBX_SORT_UP));
    CProfile::update('web.' . $page['file'] . '.sort', $sortField, PROFILE_TYPE_STR);
    CProfile::update('web.' . $page['file'] . '.sortorder', $sortOrder, PROFILE_TYPE_STR);
    $data = array('config' => $config, 'sort' => $sortField, 'sortorder' => $sortOrder);
    $groups = API::HostGroup()->get(array('output' => array('groupid', $sortField), 'editable' => true, 'sortfield' => $sortField, 'limit' => $config['search_limit'] + 1));
    order_result($groups, $sortField, $sortOrder);
    $data['paging'] = getPagingLine($groups, $sortOrder);
    $groupIds = zbx_objectValues($groups, 'groupid');
Exemplo n.º 2
0
 /**
  * Delete host groups.
  *
  * @param array $groupids
  * @param bool 	$nopermissions
  *
  * @return array
  */
 public function delete(array $groupids, $nopermissions = false)
 {
     if (empty($groupids)) {
         self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty input parameter.'));
     }
     sort($groupids);
     $delGroups = $this->get(array('groupids' => $groupids, 'editable' => true, 'output' => array('groupid', 'name', 'internal'), 'preservekeys' => true, 'nopermissions' => $nopermissions));
     foreach ($groupids as $groupid) {
         if (!isset($delGroups[$groupid])) {
             self::exception(ZBX_API_ERROR_PERMISSIONS, _('No permissions to referred object or it does not exist!'));
         }
         if ($delGroups[$groupid]['internal'] == ZBX_INTERNAL_GROUP) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _s('Host group "%1$s" is internal and can not be deleted.', $delGroups[$groupid]['name']));
         }
     }
     // check if a group is used in a group prototype
     $groupPrototype = DBFetch(DBselect('SELECT groupid' . ' FROM group_prototype gp' . ' WHERE ' . dbConditionInt('groupid', $groupids), 1));
     if ($groupPrototype) {
         self::exception(ZBX_API_ERROR_PARAMETERS, _s('Group "%1$s" cannot be deleted, because it is used by a host prototype.', $delGroups[$groupPrototype['groupid']]['name']));
     }
     $dltGroupids = getDeletableHostGroupIds($groupids);
     if (count($groupids) != count($dltGroupids)) {
         foreach ($groupids as $groupid) {
             if (isset($dltGroupids[$groupid])) {
                 continue;
             }
             self::exception(ZBX_API_ERROR_PARAMETERS, _s('Host group "%1$s" cannot be deleted, because some hosts depend on it.', $delGroups[$groupid]['name']));
         }
     }
     $dbScripts = API::Script()->get(array('groupids' => $groupids, 'output' => array('scriptid', 'groupid'), 'nopermissions' => true));
     if (!empty($dbScripts)) {
         foreach ($dbScripts as $script) {
             if ($script['groupid'] == 0) {
                 continue;
             }
             self::exception(ZBX_API_ERROR_PARAMETERS, _s('Host group "%1$s" cannot be deleted, because it is used in a global script.', $delGroups[$script['groupid']]['name']));
         }
     }
     // delete screens items
     $resources = array(SCREEN_RESOURCE_HOSTGROUP_TRIGGERS, SCREEN_RESOURCE_HOSTS_INFO, SCREEN_RESOURCE_TRIGGERS_INFO, SCREEN_RESOURCE_TRIGGERS_OVERVIEW, SCREEN_RESOURCE_DATA_OVERVIEW);
     DB::delete('screens_items', array('resourceid' => $groupids, 'resourcetype' => $resources));
     // delete sysmap element
     if (!empty($groupids)) {
         DB::delete('sysmaps_elements', array('elementtype' => SYSMAP_ELEMENT_TYPE_HOST_GROUP, 'elementid' => $groupids));
     }
     // disable actions
     // actions from conditions
     $actionids = array();
     $dbActions = DBselect('SELECT DISTINCT c.actionid' . ' FROM conditions c' . ' WHERE c.conditiontype=' . CONDITION_TYPE_HOST_GROUP . ' AND ' . dbConditionString('c.value', $groupids));
     while ($dbAction = DBfetch($dbActions)) {
         $actionids[$dbAction['actionid']] = $dbAction['actionid'];
     }
     // actions from operations
     $dbActions = DBselect('SELECT DISTINCT o.actionid' . ' FROM operations o,opgroup og' . ' WHERE o.operationid=og.operationid' . ' AND ' . dbConditionInt('og.groupid', $groupids));
     while ($dbAction = DBfetch($dbActions)) {
         $actionids[$dbAction['actionid']] = $dbAction['actionid'];
     }
     if (!empty($actionids)) {
         $update = array();
         $update[] = array('values' => array('status' => ACTION_STATUS_DISABLED), 'where' => array('actionid' => $actionids));
         DB::update('actions', $update);
     }
     // delete action conditions
     DB::delete('conditions', array('conditiontype' => CONDITION_TYPE_HOST_GROUP, 'value' => $groupids));
     // delete action operation commands
     $operationids = array();
     $dbOperations = DBselect('SELECT DISTINCT og.operationid' . ' FROM opgroup og' . ' WHERE ' . dbConditionInt('og.groupid', $groupids));
     while ($dbOperation = DBfetch($dbOperations)) {
         $operationids[$dbOperation['operationid']] = $dbOperation['operationid'];
     }
     DB::delete('opgroup', array('groupid' => $groupids));
     // delete empty operations
     $delOperationids = array();
     $dbOperations = DBselect('SELECT DISTINCT o.operationid' . ' FROM operations o' . ' WHERE ' . dbConditionInt('o.operationid', $operationids) . ' AND NOT EXISTS (SELECT NULL FROM opgroup og WHERE o.operationid=og.operationid)');
     while ($dbOperation = DBfetch($dbOperations)) {
         $delOperationids[$dbOperation['operationid']] = $dbOperation['operationid'];
     }
     DB::delete('operations', array('operationid' => $delOperationids));
     DB::delete('groups', array('groupid' => $groupids));
     DB::delete('profiles', array('idx' => 'web.dashconf.groups.groupids', 'value_id' => $groupids));
     DB::delete('profiles', array('idx' => 'web.dashconf.groups.hide.groupids', 'value_id' => $groupids));
     // TODO: remove audit
     foreach ($groupids as $groupid) {
         add_audit_ext(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_HOST_GROUP, $groupid, $delGroups[$groupid]['name'], 'groups', null, null);
     }
     return array('groupids' => $groupids);
 }
Exemplo n.º 3
0
    order_result($data['db_groups'], 'name');
    if ($data['twb_groupid'] == -1) {
        $dbGroup = reset($data['db_groups']);
        $data['twb_groupid'] = $dbGroup['groupid'];
    }
    // get all possible hosts
    $data['db_hosts'] = API::Host()->get(['output' => ['hostid', 'name'], 'groupids' => $data['twb_groupid'] ? $data['twb_groupid'] : null, 'templated_hosts' => true, 'editable' => true, 'filter' => ['flags' => ZBX_FLAG_DISCOVERY_NORMAL]]);
    order_result($data['db_hosts'], 'name');
    // get selected hosts
    if ($data['hosts']) {
        $data['r_hosts'] = API::Host()->get(['output' => ['hostid', 'name', 'flags'], 'hostids' => $data['hosts'], 'templated_hosts' => true, 'preservekeys' => true]);
        order_result($data['r_hosts'], 'name');
    }
    // deletable groups
    if ($data['groupid'] != 0) {
        $data['deletableHostGroups'] = getDeletableHostGroupIds([$data['groupid']]);
    }
    // render view
    $hostgroupView = new CView('configuration.hostgroups.edit', $data);
    $hostgroupView->render();
    $hostgroupView->show();
} else {
    $sortField = getRequest('sort', CProfile::get('web.' . $page['file'] . '.sort', 'name'));
    $sortOrder = getRequest('sortorder', CProfile::get('web.' . $page['file'] . '.sortorder', ZBX_SORT_UP));
    CProfile::update('web.' . $page['file'] . '.sort', $sortField, PROFILE_TYPE_STR);
    CProfile::update('web.' . $page['file'] . '.sortorder', $sortOrder, PROFILE_TYPE_STR);
    $config = select_config();
    $data = ['sort' => $sortField, 'sortorder' => $sortOrder, 'config' => $config];
    $groups = API::HostGroup()->get(['output' => ['groupid', $sortField], 'editable' => true, 'sortfield' => $sortField, 'limit' => $config['search_limit'] + 1]);
    order_result($groups, $sortField, $sortOrder);
    $data['paging'] = getPagingLine($groups, $sortOrder, new CUrl('hostgroups.php'));