Browse Source

issue_mail: send notifications to participants in comments (#2929)

pull/4280/head
Unknwon 8 years ago
parent
commit
23da90e25d
No known key found for this signature in database
GPG Key ID: 25B575AE3213B2B3
  1. 2
      gogs.go
  2. 17
      models/issue.go
  3. 20
      models/issue_mail.go
  4. 2
      templates/.VERSION

2
gogs.go

@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.10.12.0310" const APP_VER = "0.10.13.0310"
func init() { func init() {
setting.AppVer = APP_VER setting.AppVer = APP_VER

17
models/issue.go

@ -980,6 +980,23 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
return issues, nil return issues, nil
} }
// GetParticipantsByIssueID returns all users who are participated in comments of an issue.
func GetParticipantsByIssueID(issueID int64) ([]*User, error) {
userIDs := make([]int64, 0, 5)
if err := x.Table("comment").Cols("poster_id").
Where("issue_id = ?", issueID).
Distinct("poster_id").
Find(&userIDs); err != nil {
return nil, fmt.Errorf("get poster IDs: %v", err)
}
if len(userIDs) == 0 {
return nil, nil
}
users := make([]*User, 0, len(userIDs))
return users, x.In("id", userIDs).Find(&users)
}
// .___ ____ ___ // .___ ____ ___
// | | ______ ________ __ ____ | | \______ ___________ // | | ______ ________ __ ____ | | \______ ___________
// | |/ ___// ___/ | \_/ __ \| | / ___// __ \_ __ \ // | |/ ___// ___/ | \_/ __ \| | / ___// __ \_ __ \

20
models/issue_mail.go

@ -91,15 +91,21 @@ func NewMailerIssue(issue *Issue) mailer.Issue {
} }
// mailIssueCommentToParticipants can be used for both new issue creation and comment. // mailIssueCommentToParticipants can be used for both new issue creation and comment.
// This functions 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, mentions []string) error { func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string) error {
if !setting.Service.EnableNotifyMail { if !setting.Service.EnableNotifyMail {
return nil return nil
} }
// Mail wahtcers.
watchers, err := GetWatchers(issue.RepoID) watchers, err := GetWatchers(issue.RepoID)
if err != nil { if err != nil {
return fmt.Errorf("GetWatchers [%d]: %v", issue.RepoID, err) return fmt.Errorf("GetWatchers [repo_id: %d]: %v", issue.RepoID, err)
}
participants, err := GetParticipantsByIssueID(issue.ID)
if err != nil {
return fmt.Errorf("GetParticipantsByIssueID [issue_id: %d]: %v", issue.ID, err)
} }
tos := make([]string, 0, len(watchers)) // List of email addresses. tos := make([]string, 0, len(watchers)) // List of email addresses.
@ -120,6 +126,16 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string)
tos = append(tos, to.Email) tos = append(tos, to.Email)
names = append(names, to.Name) names = append(names, to.Name)
} }
for i := range participants {
if participants[i].ID == doer.ID {
continue
} else if com.IsSliceContainsStr(names, participants[i].Name) {
continue
}
tos = append(tos, participants[i].Email)
names = append(names, participants[i].Name)
}
mailer.SendIssueCommentMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), tos) mailer.SendIssueCommentMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), tos)
// Mail mentioned people and exclude watchers. // Mail mentioned people and exclude watchers.

2
templates/.VERSION

@ -1 +1 @@
0.10.12.0310 0.10.13.0310
Loading…
Cancel
Save