diff options
Diffstat (limited to 'services/issue/assignee.go')
-rw-r--r-- | services/issue/assignee.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/services/issue/assignee.go b/services/issue/assignee.go new file mode 100644 index 0000000000..281f824da7 --- /dev/null +++ b/services/issue/assignee.go @@ -0,0 +1,53 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package issue + +import ( + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/notification" +) + +// DeleteNotPassedAssignee deletes all assignees who aren't passed via the "assignees" array +func DeleteNotPassedAssignee(issue *models.Issue, doer *models.User, assignees []*models.User) (err error) { + var found bool + + for _, assignee := range issue.Assignees { + + found = false + for _, alreadyAssignee := range assignees { + if assignee.ID == alreadyAssignee.ID { + found = true + break + } + } + + if !found { + // This function also does comments and hooks, which is why we call it seperatly instead of directly removing the assignees here + if _, _, err := ToggleAssignee(issue, doer, assignee.ID); err != nil { + return err + } + } + } + + return nil +} + +// ToggleAssignee changes a user between assigned and not assigned for this issue, and make issue comment for it. +func ToggleAssignee(issue *models.Issue, doer *models.User, assigneeID int64) (removed bool, comment *models.Comment, err error) { + removed, comment, err = issue.ToggleAssignee(doer, assigneeID) + if err != nil { + return + } + + assignee, err1 := models.GetUserByID(assigneeID) + if err1 != nil { + err = err1 + return + } + + notification.NotifyIssueChangeAssignee(doer, issue, assignee, removed, comment) + + return +} |