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;
}
Exemple #2
0
function delete_host_group($groupids)
{
    zbx_value2array($groupids);
    if (empty($groupids)) {
        return true;
    }
    // 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;
}