Browse Source

Mention organisation users when organisation gets mentioned

Justin Nuß 10 years ago
parent
commit
cbcd08aa17
2 changed files with 46 additions and 6 deletions
  1. 42 0
      models/user.go
  2. 4 6
      routers/repo/issue.go

+ 42 - 0
models/user.go

@@ -562,3 +562,45 @@ func UnFollowUser(userId int64, unFollowId int64) (err error) {
 	}
 	return session.Commit()
 }
+
+func UpdateMentions(userNames []string, issueId int64) error {
+	users := make([]*User, 0, len(userNames))
+
+	if err := x.Where("name IN (?)", strings.Join(userNames, "\",\"")).OrderBy("name ASC").Find(&users); err != nil {
+		return err
+	}
+
+	ids := make([]int64, 0, len(userNames))
+
+	for _, user := range users {
+		ids = append(ids, user.Id)
+
+		if user.Type == INDIVIDUAL {
+			continue
+		}
+
+		if user.NumMembers == 0 {
+			continue
+		}
+
+		tempIds := make([]int64, 0, user.NumMembers)
+
+		orgUsers, err := GetOrgUsersByOrgId(user.Id)
+
+		if err != nil {
+			return err
+		}
+
+		for _, orgUser := range orgUsers {
+			tempIds = append(tempIds, orgUser.Id)
+		}
+
+		ids = append(ids, tempIds...)
+	}
+
+	if err := UpdateIssueUserPairsByMentions(ids, issueId); err != nil {
+		return err
+	}
+
+	return nil
+}

+ 4 - 6
routers/repo/issue.go

@@ -234,9 +234,8 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C
 			ms[i] = ms[i][1:]
 		}
 
-		ids := models.GetUserIdsByNames(ms)
-		if err := models.UpdateIssueUserPairsByMentions(ids, issue.Id); err != nil {
-			ctx.Handle(500, "issue.CreateIssue(UpdateIssueUserPairsByMentions)", err)
+		if err := models.UpdateMentions(ms, issue.Id); err != nil {
+			ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err)
 			return
 		}
 	}
@@ -682,9 +681,8 @@ func Comment(ctx *middleware.Context, params martini.Params) {
 					ms[i] = ms[i][1:]
 				}
 
-				ids := models.GetUserIdsByNames(ms)
-				if err := models.UpdateIssueUserPairsByMentions(ids, issue.Id); err != nil {
-					ctx.Handle(500, "issue.CreateIssue(UpdateIssueUserPairsByMentions)", err)
+				if err := models.UpdateMentions(ms, issue.Id); err != nil {
+					ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err)
 					return
 				}
 			}