summaryrefslogtreecommitdiffstats
path: root/services/issue/assignee.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/issue/assignee.go')
-rw-r--r--services/issue/assignee.go53
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
+}