MM-14882 Filter out inactive users from out of channel/group mentions (#10685)
* Add FilterByActive to UserSlice type * Filter out inactive users from out of channel/group mentions
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
9c9c00b020
Коммит
b24013d54c
@@ -126,7 +126,7 @@ func (a *App) SendNotifications(post *model.Post, team *model.Team, channel *mod
|
|||||||
|
|
||||||
if len(m.OtherPotentialMentions) > 0 && !post.IsSystemMessage() {
|
if len(m.OtherPotentialMentions) > 0 && !post.IsSystemMessage() {
|
||||||
if result := <-a.Srv.Store.User().GetProfilesByUsernames(m.OtherPotentialMentions, team.Id); result.Err == nil {
|
if result := <-a.Srv.Store.User().GetProfilesByUsernames(m.OtherPotentialMentions, team.Id); result.Err == nil {
|
||||||
channelMentions := model.UserSlice(result.Data.([]*model.User))
|
channelMentions := model.UserSlice(result.Data.([]*model.User)).FilterByActive(true)
|
||||||
|
|
||||||
var outOfChannelMentions model.UserSlice
|
var outOfChannelMentions model.UserSlice
|
||||||
var outOfGroupsMentions model.UserSlice
|
var outOfGroupsMentions model.UserSlice
|
||||||
|
|||||||
@@ -137,6 +137,19 @@ func (u UserSlice) IDs() []string {
|
|||||||
return ids
|
return ids
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u UserSlice) FilterByActive(active bool) UserSlice {
|
||||||
|
var matches []*User
|
||||||
|
|
||||||
|
for _, user := range u {
|
||||||
|
if user.DeleteAt == 0 && active {
|
||||||
|
matches = append(matches, user)
|
||||||
|
} else if user.DeleteAt != 0 && !active {
|
||||||
|
matches = append(matches, user)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return UserSlice(matches)
|
||||||
|
}
|
||||||
|
|
||||||
func (u UserSlice) FilterByID(ids []string) UserSlice {
|
func (u UserSlice) FilterByID(ids []string) UserSlice {
|
||||||
var matches []*User
|
var matches []*User
|
||||||
for _, user := range u {
|
for _, user := range u {
|
||||||
|
|||||||
@@ -388,3 +388,25 @@ func TestIsValidLocale(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserSlice(t *testing.T) {
|
||||||
|
t.Run("FilterByActive", func(t *testing.T) {
|
||||||
|
user0 := &User{Id: "user0", DeleteAt: 0}
|
||||||
|
user1 := &User{Id: "user1", DeleteAt: 0}
|
||||||
|
user2 := &User{Id: "user2", DeleteAt: 1}
|
||||||
|
|
||||||
|
slice := UserSlice([]*User{user0, user1, user2})
|
||||||
|
|
||||||
|
activeUsers := slice.FilterByActive(true)
|
||||||
|
assert.Equal(t, 2, len(activeUsers))
|
||||||
|
for _, user := range activeUsers {
|
||||||
|
assert.True(t, user.DeleteAt == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
inactiveUsers := slice.FilterByActive(false)
|
||||||
|
assert.Equal(t, 1, len(inactiveUsers))
|
||||||
|
for _, user := range inactiveUsers {
|
||||||
|
assert.True(t, user.DeleteAt != 0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user