* fix mail mention bug
fix #12774
Signed-off-by: a101211279
<1012112796@qq.com>
* fix test
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
tags/v1.12.5
@@ -1418,11 +1418,21 @@ func getUserEmailsByNames(e Engine, names []string) []string { | |||
} | |||
// GetMaileableUsersByIDs gets users from ids, but only if they can receive mails | |||
func GetMaileableUsersByIDs(ids []int64) ([]*User, error) { | |||
func GetMaileableUsersByIDs(ids []int64, isMention bool) ([]*User, error) { | |||
if len(ids) == 0 { | |||
return nil, nil | |||
} | |||
ous := make([]*User, 0, len(ids)) | |||
if isMention { | |||
return ous, x.In("id", ids). | |||
Where("`type` = ?", UserTypeIndividual). | |||
And("`prohibit_login` = ?", false). | |||
And("`is_active` = ?", true). | |||
And("`email_notifications_preference` IN ( ?, ?)", EmailNotificationsEnabled, EmailNotificationsOnMention). | |||
Find(&ous) | |||
} | |||
return ous, x.In("id", ids). | |||
Where("`type` = ?", UserTypeIndividual). | |||
And("`prohibit_login` = ?", false). |
@@ -389,3 +389,20 @@ func TestGetUserIDsByNames(t *testing.T) { | |||
assert.Error(t, err) | |||
assert.Equal(t, []int64(nil), IDs) | |||
} | |||
func TestGetMaileableUsersByIDs(t *testing.T) { | |||
results, err := GetMaileableUsersByIDs([]int64{1, 4}, false) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 1, len(results)) | |||
if len(results) > 1 { | |||
assert.Equal(t, results[0].ID, 1) | |||
} | |||
results, err = GetMaileableUsersByIDs([]int64{1, 4}, true) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 2, len(results)) | |||
if len(results) > 2 { | |||
assert.Equal(t, results[0].ID, 1) | |||
assert.Equal(t, results[1].ID, 4) | |||
} | |||
} |
@@ -118,7 +118,7 @@ func mailIssueCommentBatch(ctx *mailCommentContext, ids []int64, visited map[int | |||
visited[id] = true | |||
} | |||
} | |||
recipients, err := models.GetMaileableUsersByIDs(unique) | |||
recipients, err := models.GetMaileableUsersByIDs(unique, fromMention) | |||
if err != nil { | |||
return err | |||
} |