Skip to content

Commit 0ee823b

Browse files
Fix "only mail on mention" bug (#12775) (#12789)
* fix mail mention bug fix #12774 Signed-off-by: a1012112796 <[email protected]> * fix test Co-authored-by: techknowlogick <[email protected]> Co-authored-by: techknowlogick <[email protected]>
1 parent 062ea40 commit 0ee823b

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

models/user.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1418,11 +1418,21 @@ func getUserEmailsByNames(e Engine, names []string) []string {
14181418
}
14191419

14201420
// GetMaileableUsersByIDs gets users from ids, but only if they can receive mails
1421-
func GetMaileableUsersByIDs(ids []int64) ([]*User, error) {
1421+
func GetMaileableUsersByIDs(ids []int64, isMention bool) ([]*User, error) {
14221422
if len(ids) == 0 {
14231423
return nil, nil
14241424
}
14251425
ous := make([]*User, 0, len(ids))
1426+
1427+
if isMention {
1428+
return ous, x.In("id", ids).
1429+
Where("`type` = ?", UserTypeIndividual).
1430+
And("`prohibit_login` = ?", false).
1431+
And("`is_active` = ?", true).
1432+
And("`email_notifications_preference` IN ( ?, ?)", EmailNotificationsEnabled, EmailNotificationsOnMention).
1433+
Find(&ous)
1434+
}
1435+
14261436
return ous, x.In("id", ids).
14271437
Where("`type` = ?", UserTypeIndividual).
14281438
And("`prohibit_login` = ?", false).

models/user_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,3 +389,20 @@ func TestGetUserIDsByNames(t *testing.T) {
389389
assert.Error(t, err)
390390
assert.Equal(t, []int64(nil), IDs)
391391
}
392+
393+
func TestGetMaileableUsersByIDs(t *testing.T) {
394+
results, err := GetMaileableUsersByIDs([]int64{1, 4}, false)
395+
assert.NoError(t, err)
396+
assert.Equal(t, 1, len(results))
397+
if len(results) > 1 {
398+
assert.Equal(t, results[0].ID, 1)
399+
}
400+
401+
results, err = GetMaileableUsersByIDs([]int64{1, 4}, true)
402+
assert.NoError(t, err)
403+
assert.Equal(t, 2, len(results))
404+
if len(results) > 2 {
405+
assert.Equal(t, results[0].ID, 1)
406+
assert.Equal(t, results[1].ID, 4)
407+
}
408+
}

services/mailer/mail_issue.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func mailIssueCommentBatch(ctx *mailCommentContext, ids []int64, visited map[int
118118
visited[id] = true
119119
}
120120
}
121-
recipients, err := models.GetMaileableUsersByIDs(unique)
121+
recipients, err := models.GetMaileableUsersByIDs(unique, fromMention)
122122
if err != nil {
123123
return err
124124
}

0 commit comments

Comments
 (0)