From cbcd08aa17e95a72dcb294da836aa7f2b966d5c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Justin=20Nu=C3=9F?= <nuss.justin@gmail.com>
Date: Thu, 24 Jul 2014 19:15:31 +0200
Subject: [PATCH] Mention organisation users when organisation gets mentioned

---
 models/user.go        | 42 ++++++++++++++++++++++++++++++++++++++++++
 routers/repo/issue.go | 10 ++++------
 2 files changed, 46 insertions(+), 6 deletions(-)

diff --git a/models/user.go b/models/user.go
index a46232427e..581fce23a4 100644
--- a/models/user.go
+++ b/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
+}
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 2d1c23d4b9..402660ecd2 100644
--- a/routers/repo/issue.go
+++ b/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
 				}
 			}