import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.sal.api.ApplicationProperties
import com.atlassian.sal.api.UrlMode
import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import com.onresolve.scriptrunner.runner.util.UserMessageUtil
import groovy.transform.BaseScript
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLink
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.event.type.EventDispatchOption
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
cabMemberApprove(httpMethod: "GET") { MultivaluedMap queryParams ->
def response = ""
synchronized(this){
Long issueId = queryParams.getFirst("issueId") as Long
def customFieldManager = ComponentAccessor.customFieldManager
StringBuilder bodyB = new StringBuilder()
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() as ApplicationUser
def issueManager = ComponentAccessor.getIssueManager()
Issue issue = issueManager.getIssueObject(issueId)
CustomField pendingWithCf = customFieldManager.getCustomFieldObjectsByName("Change Pending With")[0]
Collection<ApplicationUser> pendingWith = issue.getCustomFieldValue(pendingWithCf) as Collection<ApplicationUser>
if(!pendingWith) {
pendingWith = new ArrayList<ApplicationUser>()
}
CustomField changeApprovedByCF = customFieldManager.getCustomFieldObjectsByName("Change Approved By")[0]
Collection<ApplicationUser> changeApprovedBy = issue.getCustomFieldValue(changeApprovedByCF) as Collection<ApplicationUser>
if(!changeApprovedBy) {
changeApprovedBy = new ArrayList<ApplicationUser>()
}
if(pendingWith.contains(user) && !changeApprovedBy.contains(user)) {
changeApprovedBy.add(user)
pendingWith.remove(user)
issue.setCustomFieldValue(pendingWithCf, pendingWith)
issue.setCustomFieldValue(changeApprovedByCF, changeApprovedBy)
bodyB.append("${issue.key} : Approved")
issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)
} else {
bodyB.append("${issue.key} : Already Approved")
}
def flag = [
type : 'info',
title: 'CAB',
close: 'auto',
body : bodyB.toString()
]
UserMessageUtil.flag(flag)
def applicationProperties = ScriptRunnerImpl.getOsgiService(ApplicationProperties)
def baseUrl = applicationProperties.getBaseUrl(UrlMode.ABSOLUTE)
response = Response.temporaryRedirect(URI.create("${baseUrl}/browse/${issue.key}")).build()
}
return response
}
//////////////////////////////////////////////////////
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.security.groups.GroupManager
import com.atlassian.crowd.embedded.api.Group
GroupManager grpManager = ComponentAccessor.groupManager
def users = grpManager.getUsersInGroup("CAB")
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def usersCf = customFieldManager.getCustomFieldObjectsByName("CAB")[0]
issue.setCustomFieldValue(usersCf, users)
//def pendingWithCf = customFieldManager.getCustomFieldObjectsByName("Change Pending With")[0]
//issue.setCustomFieldValue(pendingWithCf, users)