summaryrefslogtreecommitdiffstats
path: root/app/notification.go
diff options
context:
space:
mode:
authorDebanshu Kundu <debanshu.kundu@joshtechnologygroup.com>2017-07-31 23:47:21 +0530
committerSaturnino Abril <saturnino.abril@gmail.com>2017-08-01 02:17:21 +0800
commit8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c (patch)
tree28496b27f4da93baa8707bf0690ef88f8cdcc178 /app/notification.go
parent59992ae4a4638006ec1489dd834151b258c1728c (diff)
downloadchat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.tar.gz
chat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.tar.bz2
chat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.zip
#4755 Combining consecutive user join/leave system messages to single message and few other changes. (#5945)
fix 7 and 8 remove @ at "{username} joined the channel" refactor and update test
Diffstat (limited to 'app/notification.go')
-rw-r--r--app/notification.go85
1 files changed, 85 insertions, 0 deletions
diff --git a/app/notification.go b/app/notification.go
index d145b21b3..e5a43b4e8 100644
--- a/app/notification.go
+++ b/app/notification.go
@@ -306,6 +306,91 @@ func SendNotifications(post *model.Post, team *model.Team, channel *model.Channe
return mentionedUsersList, nil
}
+func SendNotificationsForSystemMessageAddRemove(user *model.User, otherUser *model.User, channel *model.Channel, post *model.Post) *model.AppError {
+ otherUserChannelMember, _ := GetChannelMember(channel.Id, otherUser.Id)
+ team, err := GetTeam(channel.TeamId)
+ if err != nil {
+ return err
+ }
+
+ err = (<-Srv.Store.Channel().IncrementMentionCount(channel.Id, otherUser.Id)).Err
+ if err != nil {
+ return err
+ }
+
+ if utils.Cfg.EmailSettings.SendEmailNotifications {
+ userAllowsEmails := otherUser.NotifyProps[model.EMAIL_NOTIFY_PROP] != "false"
+ if otherUserChannelMember != nil {
+ channelEmail, ok := otherUserChannelMember.NotifyProps[model.EMAIL_NOTIFY_PROP]
+ if ok && channelEmail != model.CHANNEL_NOTIFY_DEFAULT {
+ userAllowsEmails = channelEmail != "false"
+ }
+ }
+
+ var status *model.Status
+ var err *model.AppError
+ if status, err = GetStatus(otherUser.Id); err != nil {
+ status = &model.Status{
+ UserId: otherUser.Id,
+ Status: model.STATUS_OFFLINE,
+ Manual: false,
+ LastActivityAt: 0,
+ ActiveChannel: "",
+ }
+ }
+
+ senderName := utils.T("system.message.name")
+ if userAllowsEmails && status.Status != model.STATUS_ONLINE && otherUser.DeleteAt == 0 {
+ if err = sendNotificationEmail(post, otherUser, channel, team, senderName, user); err != nil {
+ return err
+ }
+ }
+ }
+
+ if otherUserChannelMember != nil {
+ sendPushNotifications := false
+ if *utils.Cfg.EmailSettings.SendPushNotifications {
+ pushServer := *utils.Cfg.EmailSettings.PushNotificationServer
+ if pushServer == model.MHPNS && (!utils.IsLicensed || !*utils.License.Features.MHPNS) {
+ l4g.Warn(utils.T("api.post.send_notifications_and_forget.push_notification.mhpnsWarn"))
+ sendPushNotifications = false
+ } else {
+ sendPushNotifications = true
+ }
+ }
+
+ channelName := channel.DisplayName
+ senderUsername := user.Username
+
+ if sendPushNotifications {
+ var status *model.Status
+ var err *model.AppError
+ if status, err = GetStatus(otherUser.Id); err != nil {
+ status = &model.Status{UserId: otherUser.Id, Status: model.STATUS_OFFLINE, Manual: false, LastActivityAt: 0, ActiveChannel: ""}
+ }
+
+ if ShouldSendPushNotification(otherUser, otherUserChannelMember.NotifyProps, true, status, post) {
+ if err = sendPushNotification(post, otherUser, channel, senderUsername, channelName, true); err != nil {
+ return err
+ }
+ }
+ }
+
+ message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POSTED, "", post.ChannelId, "", nil)
+ message.Add("post", post.ToJson())
+ message.Add("channel_type", channel.Type)
+ message.Add("channel_display_name", channelName)
+ message.Add("channel_name", channel.Name)
+ message.Add("sender_name", senderUsername)
+ message.Add("team_id", channel.TeamId)
+ message.Add("mentions", otherUser.Username)
+
+ Publish(message)
+ }
+
+ return nil
+}
+
func sendNotificationEmail(post *model.Post, user *model.User, channel *model.Channel, team *model.Team, senderName string, sender *model.User) *model.AppError {
if channel.IsGroupOrDirect() {
if result := <-Srv.Store.Team().GetTeamsByUserId(user.Id); result.Err != nil {