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; }
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; }