From e01810eef323ae9eb7ce1fd53ca6ba89ca6cb8b0 Mon Sep 17 00:00:00 2001 From: Gabor Gyorvari Date: Sun, 18 Jun 2017 09:44:35 +0200 Subject: [PATCH 1/5] Enable assignee e-mail notification --- models/issue_mail.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/models/issue_mail.go b/models/issue_mail.go index 615aa82f0609..bd1045a9897f 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -71,6 +71,15 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, names = append(names, participants[i].Name) } + // Assignee must receive any communications + to, err := GetUserByID(issue.AssigneeID) + if err != nil { + return fmt.Errorf("GetUserByID [%d]: %v", issue.AssigneeID, err) + } + + tos = append(tos, to.Email) + names = append(names, to.Name) + SendIssueCommentMail(issue, doer, comment, tos) // Mail mentioned people and exclude watchers. From b6a92d026fb218f5ede62fef4b57daf0cecb23be Mon Sep 17 00:00:00 2001 From: Gabor Gyorvari Date: Mon, 19 Jun 2017 07:24:45 +0200 Subject: [PATCH 2/5] Check assignee and doer to avoid self made comment notifications. --- models/issue_mail.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/models/issue_mail.go b/models/issue_mail.go index bd1045a9897f..1378af2323d4 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -42,6 +42,11 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, participants = append(participants, issue.Poster) } + // Assignee must receive any communications + if issue.AssigneeID != doer.ID { + participants = append(participants, issue.Assignee) + } + tos := make([]string, 0, len(watchers)) // List of email addresses. names := make([]string, 0, len(watchers)) for i := range watchers { @@ -71,15 +76,6 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, names = append(names, participants[i].Name) } - // Assignee must receive any communications - to, err := GetUserByID(issue.AssigneeID) - if err != nil { - return fmt.Errorf("GetUserByID [%d]: %v", issue.AssigneeID, err) - } - - tos = append(tos, to.Email) - names = append(names, to.Name) - SendIssueCommentMail(issue, doer, comment, tos) // Mail mentioned people and exclude watchers. From ff55ff0597f85ae67e6a8cac6f35b02c33556949 Mon Sep 17 00:00:00 2001 From: Gabor Gyorvari Date: Mon, 19 Jun 2017 08:12:54 +0200 Subject: [PATCH 3/5] Assignee not always defined --- models/issue_mail.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/models/issue_mail.go b/models/issue_mail.go index 1378af2323d4..abad74ce793d 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -44,7 +44,11 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, // Assignee must receive any communications if issue.AssigneeID != doer.ID { - participants = append(participants, issue.Assignee) + to, err := GetUserByID(issue.AssigneeID) + if err != nil { + return fmt.Errorf("GetUserByID [%d]: %v", issue.AssigneeID, err) + } + participants = append(participants, to) } tos := make([]string, 0, len(watchers)) // List of email addresses. From b1d7f40c28ceab1c58e7bacfedccc44ff5df0ffe Mon Sep 17 00:00:00 2001 From: Gabor Gyorvari Date: Tue, 20 Jun 2017 06:58:21 +0200 Subject: [PATCH 4/5] New method to avoid error when assignee deleted --- models/issue.go | 23 ++++++++++++++++++----- models/issue_mail.go | 8 ++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/models/issue.go b/models/issue.go index d4d0a5a2ffef..40a56b357d5b 100644 --- a/models/issue.go +++ b/models/issue.go @@ -131,6 +131,22 @@ func (issue *Issue) loadPoster(e Engine) (err error) { return } +func (issue *Issue) loadAssignee(e Engine) (err error) { + if issue.Assignee == nil { + issue.Assignee, err = getUserByID(e, issue.AssigneeID) + if err != nil { + issue.AssigneeID = -1 + issue.Assignee = NewGhostUser() + if !IsErrUserNotExist(err) { + return fmt.Errorf("getUserByID.(assignee) [%d]: %v", issue.AssigneeID, err) + } + err = nil + return + } + } + return +} + func (issue *Issue) loadAttributes(e Engine) (err error) { if err = issue.loadRepo(e); err != nil { return @@ -151,11 +167,8 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { } } - if issue.Assignee == nil && issue.AssigneeID > 0 { - issue.Assignee, err = getUserByID(e, issue.AssigneeID) - if err != nil { - return fmt.Errorf("getUserByID.(assignee) [%d]: %v", issue.AssigneeID, err) - } + if err = issue.loadAssignee(e); err != nil { + return } if issue.IsPull && issue.PullRequest == nil { diff --git a/models/issue_mail.go b/models/issue_mail.go index abad74ce793d..f6a390d60f4c 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -43,12 +43,8 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, } // Assignee must receive any communications - if issue.AssigneeID != doer.ID { - to, err := GetUserByID(issue.AssigneeID) - if err != nil { - return fmt.Errorf("GetUserByID [%d]: %v", issue.AssigneeID, err) - } - participants = append(participants, to) + if issue.AssigneeID > 0 && issue.AssigneeID != doer.ID { + participants = append(participants, issue.Assignee) } tos := make([]string, 0, len(watchers)) // List of email addresses. From 82875a50b74b7cbfa3b1c65ef0e5320be47e3ccf Mon Sep 17 00:00:00 2001 From: Gabor Gyorvari Date: Thu, 22 Jun 2017 08:30:53 +0200 Subject: [PATCH 5/5] Assignee empty check --- models/issue_mail.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/issue_mail.go b/models/issue_mail.go index f6a390d60f4c..b9e1a69fc240 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -43,7 +43,7 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, comment *Comment, } // Assignee must receive any communications - if issue.AssigneeID > 0 && issue.AssigneeID != doer.ID { + if issue.Assignee != nil && issue.AssigneeID > 0 && issue.AssigneeID != doer.ID { participants = append(participants, issue.Assignee) }