From 73692f010e1a0bf62f0a502797aca94f99012385 Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Tue, 6 Sep 2016 17:51:42 -0400 Subject: [PATCH] PLT-3775/PLT-4067 Fixes for email notifications for 3.4 --- api/post.go | 39 ++++++++++++++++++- i18n/en.json | 4 ++ .../email_notification_setting.jsx | 6 +++ webapp/i18n/en.json | 1 + 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/api/post.go b/api/post.go index d62b850597..f581b1bf48 100644 --- a/api/post.go +++ b/api/post.go @@ -794,9 +794,44 @@ func sendNotificationEmail(c *Context, post *model.Post, user *model.User, chann return } - if *utils.Cfg.EmailSettings.EnableEmailBatching { - if err := AddNotificationEmailToBatch(user, post, team); err == nil { + if channel.Type == model.CHANNEL_DIRECT && channel.TeamId != team.Id { + // this message is a cross-team DM so it we need to find a team that the recipient is on to use in the link + if result := <-Srv.Store.Team().GetTeamsByUserId(user.Id); result.Err != nil { + l4g.Error(utils.T("api.post.send_notifications_and_forget.get_teams.error"), user.Id, result.Err) return + } else { + // if the recipient isn't in the current user's team, just pick one + teams := result.Data.([]*model.Team) + found := false + + for i := range teams { + if teams[i].Id == team.Id { + found = true + break + } + } + + if !found { + team = teams[0] + } + } + } + + if *utils.Cfg.EmailSettings.EnableEmailBatching { + var sendBatched bool + + if result := <-Srv.Store.Preference().Get(user.Id, model.PREFERENCE_CATEGORY_NOTIFICATIONS, model.PREFERENCE_NAME_EMAIL_INTERVAL); result.Err != nil { + // if the call fails, assume it hasn't been set and use the default + sendBatched = false + } else { + // default to not using batching if the setting is set to immediate + sendBatched = result.Data.(model.Preference).Value != model.PREFERENCE_DEFAULT_EMAIL_INTERVAL + } + + if sendBatched { + if err := AddNotificationEmailToBatch(user, post, team); err == nil { + return + } } // fall back to sending a single email if we can't batch it for some reason diff --git a/i18n/en.json b/i18n/en.json index ad29929029..af0500f3e0 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1271,6 +1271,10 @@ "id": "api.post.send_notifications_and_forget.comment_thread.error", "translation": "Failed to retrieve comment thread posts in notifications root_post_id=%v, err=%v" }, + { + "id": "api.post.send_notifications_and_forget.get_teams.error", + "translation": "Failed to get teams when sending cross-team DM user_id=%v, err=%v" + }, { "id": "api.post.send_notifications_and_forget.mention_body", "translation": "You have one new mention." diff --git a/webapp/components/user_settings/email_notification_setting.jsx b/webapp/components/user_settings/email_notification_setting.jsx index c45872a82e..e10fd5154b 100644 --- a/webapp/components/user_settings/email_notification_setting.jsx +++ b/webapp/components/user_settings/email_notification_setting.jsx @@ -159,6 +159,12 @@ export default class EmailNotificationSetting extends React.Component { title={localizeMessage('user.settings.notifications.emailNotifications', 'Email notifications')} inputs={[
+