diff --git a/models/issue.go b/models/issue.go index 0989e3e19..e2e53b06f 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 615aa82f0..b9e1a69fc 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.Assignee != nil && issue.AssigneeID > 0 && 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 {