Use user timezone in emails

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-11-16 18:28:52 +01:00
parent 06a1233fc2
commit fdc8536c6f
7 changed files with 80 additions and 20 deletions

View File

@@ -13,7 +13,7 @@ defmodule Mobilizon.Web.Email.Event do
alias Mobilizon.Events
alias Mobilizon.Events.{Event, Participant}
alias Mobilizon.Storage.Repo
alias Mobilizon.Users.User
alias Mobilizon.Users.{Setting, User}
alias Mobilizon.Web.Email
alias Mobilizon.Web.Gettext, as: GettextBackend
@@ -28,6 +28,7 @@ defmodule Mobilizon.Web.Email.Event do
%Event{} = old_event,
%Event{} = event,
changes,
timezone \\ "Etc/UTC",
locale \\ "en"
) do
GettextBackend.put_locale(locale)
@@ -44,6 +45,7 @@ defmodule Mobilizon.Web.Email.Event do
|> assign(:old_event, old_event)
|> assign(:changes, changes)
|> assign(:subject, subject)
|> assign(:timezone, timezone)
|> render(:event_updated)
end
@@ -75,18 +77,42 @@ defmodule Mobilizon.Web.Email.Event do
defp send_notification_for_event_update_to_participant(
{%Participant{} = _participant, %Actor{} = actor,
%User{locale: locale, email: email} = _user},
%User{locale: locale, email: email} = _user, %Setting{timezone: timezone}},
%Event{} = old_event,
%Event{} = event,
diff
) do
email
|> Email.Event.event_updated(actor, old_event, event, diff, locale)
|> Email.Mailer.deliver_later()
do_send_notification_for_event_update_to_participant(
email,
actor,
old_event,
event,
diff,
timezone,
locale
)
end
defp send_notification_for_event_update_to_participant(
{%Participant{metadata: %{email: email}} = _participant, %Actor{} = actor, nil},
{%Participant{} = _participant, %Actor{} = actor,
%User{locale: locale, email: email} = _user, nil},
%Event{} = old_event,
%Event{} = event,
diff
) do
do_send_notification_for_event_update_to_participant(
email,
actor,
old_event,
event,
diff,
"Etc/UTC",
locale
)
end
defp send_notification_for_event_update_to_participant(
{%Participant{metadata: %{email: email}} = _participant, %Actor{} = actor, nil, nil},
%Event{} = old_event,
%Event{} = event,
diff
@@ -94,8 +120,28 @@ defmodule Mobilizon.Web.Email.Event do
when not is_nil(email) do
locale = Gettext.get_locale()
do_send_notification_for_event_update_to_participant(
email,
actor,
old_event,
event,
diff,
"Etc/UTC",
locale
)
end
defp do_send_notification_for_event_update_to_participant(
email,
actor,
old_event,
event,
diff,
timezone,
locale
) do
email
|> Email.Event.event_updated(actor, old_event, event, diff, locale)
|> Email.Event.event_updated(actor, old_event, event, diff, timezone, locale)
|> Email.Mailer.deliver_later()
end
end