Example #1
0
function delete_host_group($groupids)
{
    zbx_value2array($groupids);
    if (empty($groupids)) {
        return true;
    }
    $dlt_groupids = getDeletableHostGroups($groupids);
    if (count($groupids) != count($dlt_groupids)) {
        foreach ($groupids as $num => $groupid) {
            if (!isset($dlt_groupids[$groupid])) {
                $group = get_hostgroup_by_groupid($groupid);
                if ($group['internal'] == ZBX_INTERNAL_GROUP) {
                    error(S_GROUP . SPACE . '"' . $group['name'] . '"' . SPACE . S_INTERNAL_AND_CANNOT_DELETED_SMALL);
                } else {
                    error(S_GROUP . SPACE . '"' . $group['name'] . '"' . SPACE . S_CANNOT_DELETED_INNER_HOSTS_CANNOT_UNLINKED_SMALL);
                }
            }
        }
        return false;
    }
    // check if hostgroup used in scripts
    $error = false;
    $sql = 'SELECT s.name AS script_name, g.name AS group_name ' . ' FROM scripts s, groups g' . ' WHERE ' . ' g.groupid = s.groupid ' . ' AND ' . DBcondition('s.groupid', $groupids);
    $res = DBselect($sql);
    while ($group = DBfetch($res)) {
        $error = true;
        error(sprintf(S_HOSTGROUP_CANNOT_BE_DELETED_USED_IN_SCRIPT, $group['group_name'], $group['script_name']));
    }
    if ($error) {
        return false;
    }
    // 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);
    $sql = 'DELETE FROM screens_items ' . ' WHERE ' . DBcondition('resourceid', $groupids) . ' AND ' . DBcondition('resourcetype', $resources);
    DBexecute($sql);
    // delete sysmap element
    if (!delete_sysmaps_elements_with_groupid($groupids)) {
        return false;
    }
    // delete host from maintenances
    DBexecute('DELETE FROM maintenances_groups WHERE ' . DBcondition('groupid', $groupids));
    // disable actions
    $actionids = array();
    // conditions
    $sql = 'SELECT DISTINCT c.actionid ' . ' FROM conditions c ' . ' WHERE c.conditiontype=' . CONDITION_TYPE_HOST_GROUP . ' AND ' . DBcondition('c.value', $groupids, false, true);
    $db_actions = DBselect($sql);
    while ($db_action = DBfetch($db_actions)) {
        $actionids[$db_action['actionid']] = $db_action['actionid'];
    }
    // operations
    $sql = 'SELECT DISTINCT o.actionid ' . ' FROM operations o ' . ' WHERE o.operationtype IN (' . OPERATION_TYPE_GROUP_ADD . ',' . OPERATION_TYPE_GROUP_REMOVE . ') ' . ' AND ' . DBcondition('o.objectid', $groupids);
    $db_actions = DBselect($sql);
    while ($db_action = DBfetch($db_actions)) {
        $actionids[$db_action['actionid']] = $db_action['actionid'];
    }
    if (!empty($actionids)) {
        DBexecute('UPDATE actions ' . ' SET status=' . ACTION_STATUS_DISABLED . ' WHERE ' . DBcondition('actionid', $actionids));
    }
    // delete action conditions
    DBexecute('DELETE FROM conditions' . ' WHERE conditiontype=' . CONDITION_TYPE_HOST_GROUP . ' AND ' . DBcondition('value', $groupids, false, true));
    // delete action operations
    DBexecute('DELETE FROM operations ' . ' WHERE operationtype IN (' . OPERATION_TYPE_GROUP_ADD . ',' . OPERATION_TYPE_GROUP_REMOVE . ') ' . ' AND ' . DBcondition('objectid', $groupids));
    DBexecute('DELETE FROM hosts_groups WHERE ' . DBcondition('groupid', $groupids));
    foreach ($groupids as $id) {
        /* The section should be improved */
        $hostgroup_old = get_hostgroup_by_groupid($id);
        $result = DBexecute('DELETE FROM groups WHERE groupid=' . $id);
        if ($result) {
            add_audit_ext(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_HOST_GROUP, $id, $hostgroup_old['name'], 'groups', NULL, NULL);
        } else {
            break;
        }
    }
    return $result;
}
Example #2
0
        }
    }
    // select selected hosts and add them
    $params = array('hostids' => $hosts, 'templated_hosts' => 1, 'order' => 'host', 'editable' => 1, 'extendoutput' => 1);
    $db_hosts = CHost::get($params);
    foreach ($db_hosts as $hostid => $db_host) {
        $cmbHosts->addItem($hostid, get_node_name_by_elid($hostid) . $db_host['host']);
    }
    $frmHostG->addRow(S_HOSTS, $cmbHosts->Get(S_HOSTS . SPACE . S_IN, array(S_OTHER . SPACE . S_HOSTS . SPACE . '|' . SPACE . S_GROUP . SPACE, $cmbGroups)));
    $frmHostG->addItemToBottomRow(new CButton('save', S_SAVE));
    if ($groupid > 0) {
        $frmHostG->addItemToBottomRow(SPACE);
        $frmHostG->addItemToBottomRow(new CButton('clone', S_CLONE));
        $frmHostG->addItemToBottomRow(SPACE);
        $dltButton = new CButtonDelete('Delete selected group?', url_param('form') . url_param('config') . url_param('groupid'));
        $dlt_groups = getDeletableHostGroups($_REQUEST['groupid']);
        if (empty($dlt_groups)) {
            $dltButton->setAttribute('disabled', 'disabled');
        }
        $frmHostG->addItemToBottomRow($dltButton);
    }
    $frmHostG->addItemToBottomRow(SPACE);
    $frmHostG->addItemToBottomRow(new CButtonCancel(url_param('config')));
    $frmHostG->show();
} else {
    $config = select_config();
    $numrows = new CSpan(null, 'info');
    $numrows->setAttribute('name', 'numrows');
    $header = get_table_header(array(S_HOST_GROUPS_BIG, new CSpan(SPACE . SPACE . '|' . SPACE . SPACE, 'divider'), S_FOUND . ': ', $numrows));
    show_table_header($header);
    $form = new CForm('hostgroups.php');
 /**
  * Delete host groups.
  *
  * @param array $groupids
  *
  * @return boolean
  */
 public function delete($groupids)
 {
     if (empty($groupids)) {
         self::exception(ZBX_API_ERROR_PARAMETERS, _('Empty input parameter.'));
     }
     $groupids = zbx_toArray($groupids);
     $options = array('groupids' => $groupids, 'editable' => true, 'output' => API_OUTPUT_EXTEND, 'preservekeys' => true);
     $delGroups = $this->get($options);
     foreach ($groupids as $groupid) {
         if (!isset($delGroups[$groupid])) {
             self::exception(ZBX_API_ERROR_PERMISSIONS, _('You do not have permission to perform this operation.'));
         }
         if ($delGroups[$groupid]['internal'] == ZBX_INTERNAL_GROUP) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _s('Group "%1$s" is internal and can not be deleted.', $delGroups[$groupid]['name']));
         }
     }
     $dltGroupids = getDeletableHostGroups($groupids);
     if (count($groupids) != count($dltGroupids)) {
         foreach ($groupids as $groupid) {
             self::exception(ZBX_API_ERROR_PARAMETERS, _s('Group "%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('Group "%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));
     // host groups
     DB::delete('groups', array('groupid' => $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);
 }
        // get all hosts from all groups
        $options = array('templated_hosts' => 1, 'sortfield' => 'name', 'editable' => 1, 'output' => API_OUTPUT_EXTEND);
    } else {
        // get hosts from selected twb_groupid combo
        $options = array('groupids' => $data['twb_groupid'], 'templated_hosts' => 1, 'sortfield' => 'name', 'editable' => 1, 'output' => API_OUTPUT_EXTEND);
    }
    $data['db_hosts'] = API::Host()->get($options);
    // get selected hosts
    $options = array('hostids' => $data['hosts'], 'templated_hosts' => 1, 'sortfield' => 'name', 'output' => API_OUTPUT_EXTEND);
    $data['r_hosts'] = API::Host()->get($options);
    // get hosts ids
    $options = array('hostids' => $data['hosts'], 'templated_hosts' => 1, 'editable' => 1, 'output' => API_OUTPUT_SHORTEN);
    $data['rw_hosts'] = API::Host()->get($options);
    $data['rw_hosts'] = zbx_toHash($data['rw_hosts'], 'hostid');
    if (!empty($data['groupid'])) {
        $data['deletableHostGroups'] = getDeletableHostGroups($data['groupid']);
    }
    // render view
    $hostgroupView = new CView('configuration.hostgroups.edit', $data);
    $hostgroupView->render();
    $hostgroupView->show();
} else {
    $data['config'] = $config;
    $sortfield = getPageSortField('name');
    $sortorder = getPageSortOrder();
    $options = array('editable' => 1, 'output' => API_OUTPUT_SHORTEN, 'sortfield' => $sortfield, 'limit' => $config['search_limit'] + 1);
    $groups = API::HostGroup()->get($options);
    $data['paging'] = getPagingLine($groups);
    // get hosts and templates count
    $options = array('groupids' => zbx_objectValues($groups, 'groupid'), 'selectHosts' => API_OUTPUT_COUNT, 'selectTemplates' => API_OUTPUT_COUNT, 'nopermissions' => 1);
    $data['groupCounts'] = API::HostGroup()->get($options);
Example #5
0
function delete_host_group($groupids)
{
    zbx_value2array($groupids);
    if (empty($groupids)) {
        return true;
    }
    $dlt_groupids = getDeletableHostGroups($groupids);
    if (count($groupids) != count($dlt_groupids)) {
        foreach ($groupids as $num => $groupid) {
            if (!isset($dlt_groupids[$groupid])) {
                $group = get_hostgroup_by_groupid($groupid);
                if ($group['internal'] == ZBX_INTERNAL_GROUP) {
                    error('Group "' . $group['name'] . '" is internal and can not be deleted');
                } else {
                    error('Group "' . $group['name'] . '" can not be deleted, due to inner hosts can not be unlinked');
                }
            }
        }
        return false;
    }
    // delete sysmap element
    if (!delete_sysmaps_elements_with_groupid($groupids)) {
        return false;
    }
    // delete host from maintenances
    DBexecute('DELETE FROM maintenances_groups WHERE ' . DBcondition('groupid', $groupids));
    // disable actions
    $actionids = array();
    // conditions
    $sql = 'SELECT DISTINCT c.actionid ' . ' FROM conditions c ' . ' WHERE c.conditiontype=' . CONDITION_TYPE_HOST_GROUP . ' AND ' . DBcondition('c.value', $groupids, false, true);
    $db_actions = DBselect($sql);
    while ($db_action = DBfetch($db_actions)) {
        $actionids[$db_action['actionid']] = $db_action['actionid'];
    }
    // operations
    $sql = 'SELECT DISTINCT o.actionid ' . ' FROM operations o ' . ' WHERE o.operationtype IN (' . OPERATION_TYPE_GROUP_ADD . ',' . OPERATION_TYPE_GROUP_REMOVE . ') ' . ' AND ' . DBcondition('o.objectid', $groupids);
    $db_actions = DBselect($sql);
    while ($db_action = DBfetch($db_actions)) {
        $actionids[$db_action['actionid']] = $db_action['actionid'];
    }
    if (!empty($actionids)) {
        DBexecute('UPDATE actions ' . ' SET status=' . ACTION_STATUS_DISABLED . ' WHERE ' . DBcondition('actionid', $actionids));
    }
    // delete action conditions
    DBexecute('DELETE FROM conditions' . ' WHERE conditiontype=' . CONDITION_TYPE_HOST_GROUP . ' AND ' . DBcondition('value', $groupids, false, true));
    // delete action operations
    DBexecute('DELETE FROM operations ' . ' WHERE operationtype IN (' . OPERATION_TYPE_GROUP_ADD . ',' . OPERATION_TYPE_GROUP_REMOVE . ') ' . ' AND ' . DBcondition('objectid', $groupids));
    DBexecute('DELETE FROM hosts_groups WHERE ' . DBcondition('groupid', $groupids));
    foreach ($groupids as $id) {
        /* The section should be improved */
        $hostgroup_old = get_hostgroup_by_groupid($id);
        $result = DBexecute('DELETE FROM groups WHERE groupid=' . $id);
        if ($result) {
            add_audit_ext(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_HOST_GROUP, $id, $hostgroup_old['name'], 'groups', NULL, NULL);
        } else {
            break;
        }
    }
    return $result;
}