Scripted Conditions
The following script displays conditions 'translated' into groovy script:
Further details on the following API can be found on the Behaviours API Quick Reference page.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.security.roles.ProjectRoleManager
// Get the current user
def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
// Get the changed field
def exampleField = getFieldById(getFieldChanged())
if (currentUser == underlyingIssue.reporterUser && currentUser == underlyingIssue.assignee) { // <1>
exampleField.setHidden(true)
} else {
exampleField.setHidden(false)
}
if (ComponentAccessor.getGroupManager().getGroupsForUser(currentUser)?.find { it.name == "jira-administrators" }) { // <2>
exampleField.setAllowInlineEdit(true) // only available in Initialiser
} else {
exampleField.setAllowInlineEdit(false) // only available in Initialiser
}
def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)
def devProjectRole = projectRoleManager.getProjectRole("Developers")
if (currentUser.key == "luke" || projectRoleManager.isUserInProjectRole(currentUser, devProjectRole, underlyingIssue.getProjectObject())) { // <3>
exampleField.setError("You are either Luke or you belong to Developers project role and you cannot edit the field")
exampleField.setReadOnly(true)
} else {
exampleField.clearError()
exampleField.setReadOnly(false)
}
if (currentUser == underlyingIssue.projectObject.getProjectLead()) { // <4>
exampleField.setDescription("Current User is project lead")
} else {
exampleField.clearHelpText()
}
def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Multi User Picker CF")
if (currentUser == underlyingIssue.getCustomFieldValue(cf) || currentUser in underlyingIssue.getCustomFieldValue(cf)) { // <5>
getFieldById("description").setFormValue("Current user is member of the Multi User Picker custom field")
} else {
getFieldById("description").setFormValue("Current user is not member of the Multi User Picker custom field")
}
def cf2 = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Single Group Picker CF")
def groupsToCompare = underlyingIssue.getCustomFieldValue(cf2) as ArrayList
if (ComponentAccessor.getGroupManager().getGroupsForUser(currentUser.key)?.disjoint(groupsToCompare)) { // <6>
exampleField.setRequired(true)
} else {
exampleField.setRequired(false)
}
if (getActionName() == "Start Progress" || getDestinationStepName() == "Done") { // <7>
exampleField.setRequired(true)
} else {
exampleField.setRequired(false)
}
Line 9: If current user is reporter AND current user is current assignee make the changed field hidden, else shown
Line 15: If current user in group 'jira-administrators' allow the inline edit of the changed field
Line 23: If current user is 'luke' or current user in project role 'Developers' make the changed field read-only and show an error message, else clear the error and make the field editable again
Line 31: If current user is Project Lead add a description at the changed field, else clear the description
Line 38: If current user in user custom field value add a default value in the description
Line 46: If current user in group custom field value then make the changed field required, else optional.
Line 52: If workflow Action is 'Start Progress' or workflow Step is 'In Progress' then make the changed field required, else optional.