diff --git a/models/issue.go b/models/issue.go index 32e6a5b66..8723dda91 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1206,8 +1206,12 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) { // GetParticipantsByIssueID returns all users who are participated in comments of an issue. func GetParticipantsByIssueID(issueID int64) ([]*User, error) { + return getParticipantsByIssueID(x, issueID) +} + +func getParticipantsByIssueID(e Engine, issueID int64) ([]*User, error) { userIDs := make([]int64, 0, 5) - if err := x.Table("comment").Cols("poster_id"). + if err := e.Table("comment").Cols("poster_id"). Where("issue_id = ?", issueID). And("type = ?", CommentTypeComment). Distinct("poster_id"). @@ -1219,7 +1223,7 @@ func GetParticipantsByIssueID(issueID int64) ([]*User, error) { } users := make([]*User, 0, len(userIDs)) - return users, x.In("id", userIDs).Find(&users) + return users, e.In("id", userIDs).Find(&users) } // UpdateIssueMentions extracts mentioned people from content and diff --git a/models/issue_comment.go b/models/issue_comment.go index 753e79b3d..79fa23960 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -289,7 +289,7 @@ func (c *Comment) MailParticipants(e Engine, opType ActionType, issue *Issue) (e case ActionReopenIssue: issue.Content = fmt.Sprintf("Reopened #%d", issue.Index) } - if err = mailIssueCommentToParticipants(issue, c.Poster, c, mentions); err != nil { + if err = mailIssueCommentToParticipants(e, issue, c.Poster, c, mentions); err != nil { log.Error(4, "mailIssueCommentToParticipants: %v", err) } diff --git a/models/issue_mail.go b/models/issue_mail.go index b9e1a69fc..9e604a50f 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -22,18 +22,18 @@ func (issue *Issue) mailSubject() string { // This function sends two list of emails: // 1. Repository watchers and users who are participated in comments. // 2. Users who are not in 1. but get mentioned in current issue/comment. -func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, mentions []string) error { +func mailIssueCommentToParticipants(e Engine, issue *Issue, doer *User, comment *Comment, mentions []string) error { if !setting.Service.EnableNotifyMail { return nil } - watchers, err := GetWatchers(issue.RepoID) + watchers, err := getWatchers(e, issue.RepoID) if err != nil { - return fmt.Errorf("GetWatchers [repo_id: %d]: %v", issue.RepoID, err) + return fmt.Errorf("getWatchers [repo_id: %d]: %v", issue.RepoID, err) } - participants, err := GetParticipantsByIssueID(issue.ID) + participants, err := getParticipantsByIssueID(e, issue.ID) if err != nil { - return fmt.Errorf("GetParticipantsByIssueID [issue_id: %d]: %v", issue.ID, err) + return fmt.Errorf("getParticipantsByIssueID [issue_id: %d]: %v", issue.ID, err) } // In case the issue poster is not watching the repository, @@ -54,7 +54,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, continue } - to, err := GetUserByID(watchers[i].UserID) + to, err := getUserByID(e, watchers[i].UserID) if err != nil { return fmt.Errorf("GetUserByID [%d]: %v", watchers[i].UserID, err) } @@ -88,7 +88,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, tos = append(tos, mentions[i]) } - SendIssueMentionMail(issue, doer, comment, GetUserEmailsByNames(tos)) + SendIssueMentionMail(issue, doer, comment, getUserEmailsByNames(e, tos)) return nil } @@ -96,12 +96,16 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, // MailParticipants sends new issue thread created emails to repository watchers // and mentioned people. func (issue *Issue) MailParticipants() (err error) { + return issue.mailParticipants(x) +} + +func (issue *Issue) mailParticipants(e Engine) (err error) { mentions := markdown.FindAllMentions(issue.Content) - if err = UpdateIssueMentions(x, issue.ID, mentions); err != nil { + if err = UpdateIssueMentions(e, issue.ID, mentions); err != nil { return fmt.Errorf("UpdateIssueMentions [%d]: %v", issue.ID, err) } - if err = mailIssueCommentToParticipants(issue, issue.Poster, nil, mentions); err != nil { + if err = mailIssueCommentToParticipants(e, issue, issue.Poster, nil, mentions); err != nil { log.Error(4, "mailIssueCommentToParticipants: %v", err) } diff --git a/models/user.go b/models/user.go index bbdec7452..01f14edb7 100644 --- a/models/user.go +++ b/models/user.go @@ -1144,11 +1144,15 @@ func GetAssigneeByID(repo *Repository, userID int64) (*User, error) { // GetUserByName returns user by given name. func GetUserByName(name string) (*User, error) { + return getUserByName(x, name) +} + +func getUserByName(e Engine, name string) (*User, error) { if len(name) == 0 { return nil, ErrUserNotExist{0, name, 0} } u := &User{LowerName: strings.ToLower(name)} - has, err := x.Get(u) + has, err := e.Get(u) if err != nil { return nil, err } else if !has { @@ -1159,9 +1163,13 @@ func GetUserByName(name string) (*User, error) { // GetUserEmailsByNames returns a list of e-mails corresponds to names. func GetUserEmailsByNames(names []string) []string { + return getUserEmailsByNames(x, names) +} + +func getUserEmailsByNames(e Engine, names []string) []string { mails := make([]string, 0, len(names)) for _, name := range names { - u, err := GetUserByName(name) + u, err := getUserByName(e, name) if err != nil { continue }