function update_user_group($usrgrpid, $name, $users_status, $gui_access, $api_access, $debug_mode, $users = array(), $rights = array()) { global $USER_DETAILS; $sql = 'SELECT * ' . ' FROM usrgrp ' . ' WHERE name=' . zbx_dbstr($name) . ' AND usrgrpid<>' . $usrgrpid . ' AND ' . DBin_node('usrgrpid', get_current_nodeid(false)); if (DBfetch(DBselect($sql))) { error("Group '{$name}' already exists"); return 0; } $result = DBexecute('UPDATE usrgrp SET name=' . zbx_dbstr($name) . ' WHERE usrgrpid=' . $usrgrpid); if (!$result) { return $result; } // must come before adding user to group $result &= change_group_status($usrgrpid, $users_status); $result &= change_group_gui_access($usrgrpid, $gui_access); $result &= change_group_api_access($usrgrpid, $api_access); $result &= change_group_debug_mode($usrgrpid, $debug_mode); if (!$result) { return $result; } //------- $grant = true; if ($gui_access == GROUP_GUI_ACCESS_DISABLED || $users_status == GROUP_STATUS_DISABLED) { $grant = !uint_in_array($USER_DETAILS['userid'], $users); } if ($grant) { $result = DBexecute('DELETE FROM users_groups WHERE usrgrpid=' . $usrgrpid); foreach ($users as $userid => $name) { $result = add_user_to_group($userid, $usrgrpid); if (!$result) { return $result; } } } else { error(S_USER_CANNOT_DISABLE_ITSELF); return false; } $result = DBexecute('DELETE FROM rights WHERE groupid=' . $usrgrpid); foreach ($rights as $right) { $id = get_dbid('rights', 'rightid'); $result = DBexecute('INSERT INTO rights (rightid,groupid,permission,id)' . ' VALUES (' . $id . ',' . $usrgrpid . ',' . $right['permission'] . ',' . $right['id'] . ')'); if (!$result) { return $result; } } return $result; }
} } else { if (isset($_REQUEST['set_gui_access']) && isset($_REQUEST['usrgrpid'])) { $group = get_group_by_usrgrpid($_REQUEST['usrgrpid']); $result = change_group_gui_access($_REQUEST['usrgrpid'], $_REQUEST['set_gui_access']); show_messages($result, S_GROUP . ' "' . $group['name'] . '" ' . S_GUI_ACCESS_UPDATED, S_CANNOT_UPDATE_GUI_ACCESS); if ($result) { $audit_action = $_REQUEST['set_gui_access'] == GROUP_GUI_ACCESS_DISABLED ? AUDIT_ACTION_DISABLE : AUDIT_ACTION_UPDATE; add_audit($audit_action, AUDIT_RESOURCE_USER_GROUP, 'GUI access for group name [' . $group['name'] . ']'); unset($_REQUEST['usrgrpid']); } unset($_REQUEST['form']); } else { if (isset($_REQUEST['set_users_status']) && isset($_REQUEST['usrgrpid'])) { $group = get_group_by_usrgrpid($_REQUEST['usrgrpid']); $result = change_group_status($_REQUEST['usrgrpid'], $_REQUEST['set_users_status']); $status_msg1 = $_REQUEST['set_users_status'] == GROUP_STATUS_ENABLED ? S_ENABLED : S_DISABLED; $status_msg2 = $_REQUEST['set_users_status'] == GROUP_STATUS_ENABLED ? S_ENABLE : S_DISABLE; show_messages($result, S_GROUP . SPACE . '"' . $group['name'] . '"' . SPACE . $status_msg1, S_CANNOT . SPACE . $status_msg2 . SPACE . S_GROUP); if ($result) { $audit_action = $_REQUEST['set_users_status'] == GROUP_STATUS_ENABLED ? AUDIT_ACTION_ENABLE : AUDIT_ACTION_DISABLE; add_audit($audit_action, AUDIT_RESOURCE_USER_GROUP, 'Group name [' . $group['name'] . ']'); unset($_REQUEST['usrgrpid']); } unset($_REQUEST['form']); } } } } } }
} show_messages($go_result, _('Debug mode updated'), _('Cannot update debug mode')); } } elseif (str_in_array($_REQUEST['go'], array('enable_status', 'disable_status'))) { $groupids = get_request('group_groupid', get_request('usrgrpid')); zbx_value2array($groupids); $set_users_status = $_REQUEST['go'] == 'enable_status' ? GROUP_STATUS_ENABLED : GROUP_STATUS_DISABLED; $groups = array(); $sql = 'SELECT ug.usrgrpid, ug.name ' . ' FROM usrgrp ug ' . ' WHERE ' . DBin_node('ug.usrgrpid') . ' AND ' . dbConditionInt('ug.usrgrpid', $groupids); $db_groups = DBselect($sql); while ($group = DBfetch($db_groups)) { $groups[$group['usrgrpid']] = $group; } if (!empty($groups)) { DBstart(); $go_result = change_group_status($groupids, $set_users_status); $go_result = DBend($go_result); if ($go_result) { $audit_action = $set_users_status == GROUP_STATUS_ENABLED ? AUDIT_ACTION_ENABLE : AUDIT_ACTION_DISABLE; foreach ($groups as $groupid => $group) { add_audit($audit_action, AUDIT_RESOURCE_USER_GROUP, 'User status for group name [' . $group['name'] . ']'); } } show_messages($go_result, _('Users status updated'), _('Cannot update users status')); } } if ($_REQUEST['go'] != 'none' && isset($go_result) && $go_result) { $url = new CUrl(); $path = $url->getPath(); insert_js('cookie.eraseArray("' . $path . '")'); }
} } elseif (str_in_array(getRequest('go'), array('enable_status', 'disable_status'))) { $groupIds = getRequest('group_groupid', getRequest('usrgrpid')); zbx_value2array($groupIds); $enable = getRequest('go') == 'enable_status'; $status = $enable ? GROUP_STATUS_ENABLED : GROUP_STATUS_DISABLED; $auditAction = $enable ? AUDIT_ACTION_ENABLE : AUDIT_ACTION_DISABLE; $groups = array(); $dbGroups = DBselect('SELECT ug.usrgrpid,ug.name' . ' FROM usrgrp ug' . ' WHERE ' . dbConditionInt('ug.usrgrpid', $groupIds) . andDbNode('ug.usrgrpid')); while ($group = DBfetch($dbGroups)) { $groups[$group['usrgrpid']] = $group; } $updated = count($groups); if ($groups) { DBstart(); $result = change_group_status($groupIds, $status); if ($result) { foreach ($groups as $group) { add_audit($auditAction, AUDIT_RESOURCE_USER_GROUP, 'User status for group name [' . $group['name'] . ']'); } } $messageSuccess = $enable ? _n('User group enabled', 'User groups enabled', $updated) : _n('User group disabled', 'User groups disabled', $updated); $messageFailed = $enable ? _n('Cannot enable user group', 'Cannot enable user groups', $updated) : _n('Cannot disable user group', 'Cannot disable user groups', $updated); $result = DBend($result); show_messages($result, $messageSuccess, $messageFailed); clearCookies($result); } } /* * Display */
} show_messages($goResult, _('Debug mode updated'), _('Cannot update debug mode')); clearCookies($goResult); } } elseif (str_in_array($_REQUEST['go'], array('enable_status', 'disable_status'))) { $groupIds = get_request('group_groupid', get_request('usrgrpid')); zbx_value2array($groupIds); $setUsersStatus = $_REQUEST['go'] == 'enable_status' ? GROUP_STATUS_ENABLED : GROUP_STATUS_DISABLED; $groups = array(); $dbGroups = DBselect('SELECT ug.usrgrpid,ug.name' . ' FROM usrgrp ug' . ' WHERE ' . dbConditionInt('ug.usrgrpid', $groupIds) . andDbNode('ug.usrgrpid')); while ($group = DBfetch($dbGroups)) { $groups[$group['usrgrpid']] = $group; } if ($groups) { DBstart(); $goResult = change_group_status($groupIds, $setUsersStatus); $goResult = DBend($goResult); if ($goResult) { $auditAction = $setUsersStatus == GROUP_STATUS_ENABLED ? AUDIT_ACTION_ENABLE : AUDIT_ACTION_DISABLE; foreach ($groups as $groupId => $group) { add_audit($auditAction, AUDIT_RESOURCE_USER_GROUP, 'User status for group name [' . $group['name'] . ']'); } } show_messages($goResult, _('Users status updated'), _('Cannot update users status')); clearCookies($goResult); } } /* * Display */ if (isset($_REQUEST['form'])) {