summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/notification.go5
-rw-r--r--app/notification_test.go44
-rw-r--r--store/sql_user_store.go2
-rw-r--r--webapp/components/channel_header.jsx4
-rw-r--r--webapp/components/member_list_channel/member_list_channel.jsx4
-rw-r--r--webapp/stores/user_store.jsx4
6 files changed, 52 insertions, 11 deletions
diff --git a/app/notification.go b/app/notification.go
index 7ddba0bdb..2b9c9bcff 100644
--- a/app/notification.go
+++ b/app/notification.go
@@ -63,7 +63,10 @@ func SendNotifications(post *model.Post, team *model.Team, channel *model.Channe
otherUserId = userIds[0]
}
- mentionedUserIds[otherUserId] = true
+ if _, ok := profileMap[otherUserId]; ok {
+ mentionedUserIds[otherUserId] = true
+ }
+
if post.Props["from_webhook"] == "true" {
mentionedUserIds[post.UserId] = true
}
diff --git a/app/notification_test.go b/app/notification_test.go
index e59ba35d8..022f671ae 100644
--- a/app/notification_test.go
+++ b/app/notification_test.go
@@ -14,14 +14,14 @@ func TestSendNotifications(t *testing.T) {
AddUserToChannel(th.BasicUser2, th.BasicChannel)
- post1, postErr := CreatePost(&model.Post{
+ post1, err := CreatePost(&model.Post{
UserId: th.BasicUser.Id,
ChannelId: th.BasicChannel.Id,
Message: "@" + th.BasicUser2.Username,
}, th.BasicTeam.Id, true)
- if postErr != nil {
- t.Fatal(postErr)
+ if err != nil {
+ t.Fatal(err)
}
mentions, err := SendNotifications(post1, th.BasicTeam, th.BasicChannel, th.BasicUser)
@@ -34,6 +34,44 @@ func TestSendNotifications(t *testing.T) {
t.Log(mentions)
t.Fatal("user should have been mentioned")
}
+
+ dm, err := CreateDirectChannel(th.BasicUser.Id, th.BasicUser2.Id)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ post2, err := CreatePost(&model.Post{
+ UserId: th.BasicUser.Id,
+ ChannelId: dm.Id,
+ Message: "dm message",
+ }, th.BasicTeam.Id, true)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ _, err = SendNotifications(post2, th.BasicTeam, dm, th.BasicUser)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ UpdateActive(th.BasicUser2, false)
+ InvalidateAllCaches()
+
+ post3, err := CreatePost(&model.Post{
+ UserId: th.BasicUser.Id,
+ ChannelId: dm.Id,
+ Message: "dm message",
+ }, th.BasicTeam.Id, true)
+
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ _, err = SendNotifications(post3, th.BasicTeam, dm, th.BasicUser)
+ if err != nil {
+ t.Fatal(err)
+ }
}
func TestGetExplicitMentions(t *testing.T) {
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index d18da8df8..e6054365c 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -546,7 +546,7 @@ func (us SqlUserStore) GetProfilesInChannel(channelId string, offset int, limit
var users []*model.User
- query := "SELECT Users.* FROM Users, ChannelMembers WHERE ChannelMembers.ChannelId = :ChannelId AND Users.Id = ChannelMembers.UserId AND Users.DeleteAt = 0 ORDER BY Users.Username ASC LIMIT :Limit OFFSET :Offset"
+ query := "SELECT Users.* FROM Users, ChannelMembers WHERE ChannelMembers.ChannelId = :ChannelId AND Users.Id = ChannelMembers.UserId ORDER BY Users.Username ASC LIMIT :Limit OFFSET :Offset"
if _, err := us.GetReplica().Select(&users, query, map[string]interface{}{"ChannelId": channelId, "Offset": offset, "Limit": limit}); err != nil {
result.Err = model.NewLocAppError("SqlUserStore.GetProfilesInChannel", "store.sql_user.get_profiles.app_error", nil, err.Error())
diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx
index 7116b435c..a409baec6 100644
--- a/webapp/components/channel_header.jsx
+++ b/webapp/components/channel_header.jsx
@@ -73,7 +73,7 @@ export default class ChannelHeader extends React.Component {
getStateFromStores() {
const channel = ChannelStore.get(this.props.channelId);
const stats = ChannelStore.getStats(this.props.channelId);
- const users = UserStore.getProfileListInChannel(this.props.channelId);
+ const users = UserStore.getProfileListInChannel(this.props.channelId, false, true);
let otherUserId = null;
if (channel && channel.type === 'D') {
@@ -227,7 +227,7 @@ export default class ChannelHeader extends React.Component {
AppDispatcher.handleViewAction({
type: ActionTypes.TOGGLE_DM_MODAL,
value: true,
- startingUsers: UserStore.getProfileListInChannel(this.props.channelId, true)
+ startingUsers: UserStore.getProfileListInChannel(this.props.channelId, true, false)
});
}
diff --git a/webapp/components/member_list_channel/member_list_channel.jsx b/webapp/components/member_list_channel/member_list_channel.jsx
index 8dbdd37f2..f33d14a27 100644
--- a/webapp/components/member_list_channel/member_list_channel.jsx
+++ b/webapp/components/member_list_channel/member_list_channel.jsx
@@ -45,7 +45,7 @@ export default class MemberListChannel extends React.Component {
const stats = ChannelStore.getCurrentStats();
this.state = {
- users: UserStore.getProfileListInChannel(),
+ users: UserStore.getProfileListInChannel(ChannelStore.getCurrentId(), false, true),
teamMembers: Object.assign({}, TeamStore.getMembersInTeam()),
channelMembers: Object.assign({}, ChannelStore.getMembersInChannel()),
total: stats.member_count,
@@ -81,7 +81,7 @@ export default class MemberListChannel extends React.Component {
if (this.term) {
users = searchProfilesInCurrentChannel(store.getState(), this.term);
} else {
- users = UserStore.getProfileListInChannel();
+ users = UserStore.getProfileListInChannel(ChannelStore.getCurrentId(), false, true);
}
this.setState({
diff --git a/webapp/stores/user_store.jsx b/webapp/stores/user_store.jsx
index b6e867443..79052d77e 100644
--- a/webapp/stores/user_store.jsx
+++ b/webapp/stores/user_store.jsx
@@ -390,10 +390,10 @@ class UserStoreClass extends EventEmitter {
});
}
- getProfileListInChannel(channelId = ChannelStore.getCurrentId(), skipCurrent = false) {
+ getProfileListInChannel(channelId = ChannelStore.getCurrentId(), skipCurrent = false, skipInactive = false) {
const userIds = Array.from(Selectors.getUserIdsInChannels(store.getState())[channelId] || []);
- return this.getProfileListForIds(userIds, skipCurrent, false);
+ return this.getProfileListForIds(userIds, skipCurrent, skipInactive);
}
saveProfileNotInChannel(channelId = ChannelStore.getCurrentId(), profile) {