e841fb6fbb
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
60 lines
1.7 KiB
Elixir
60 lines
1.7 KiB
Elixir
defmodule Mobilizon.Web.Email.Actor do
|
|
@moduledoc """
|
|
Handles emails sent about actors status.
|
|
"""
|
|
use Phoenix.Swoosh, view: Mobilizon.Web.EmailView
|
|
|
|
import Mobilizon.Web.Gettext
|
|
|
|
alias Mobilizon.Actors.Actor
|
|
alias Mobilizon.Events.{Event, Participant}
|
|
alias Mobilizon.Users
|
|
alias Mobilizon.Users.User
|
|
alias Mobilizon.Web.Email
|
|
|
|
@doc """
|
|
Send a notification to participants from events organized by an actor that is going to be suspended
|
|
"""
|
|
@spec send_notification_event_participants_from_suspension(Participant.t(), Actor.t()) ::
|
|
:ok
|
|
def send_notification_event_participants_from_suspension(
|
|
%Participant{
|
|
actor: %Actor{user_id: nil}
|
|
},
|
|
_suspended
|
|
),
|
|
do: :ok
|
|
|
|
def send_notification_event_participants_from_suspension(%Participant{role: role}, _suspended)
|
|
when role not in [:participant, :moderator, :administrator],
|
|
do: :ok
|
|
|
|
def send_notification_event_participants_from_suspension(
|
|
%Participant{
|
|
actor: %Actor{user_id: user_id},
|
|
event: %Event{} = event,
|
|
role: member_role
|
|
},
|
|
%Actor{} = suspended
|
|
) do
|
|
with %User{email: email, locale: locale} <- Users.get_user!(user_id) do
|
|
Gettext.put_locale(locale)
|
|
|
|
subject = gettext("Your participation to %{event} has been cancelled!", event: event.title)
|
|
|
|
[to: email, subject: subject]
|
|
|> Email.base_email()
|
|
|> render_body(:actor_suspension_participants, %{
|
|
locale: locale,
|
|
actor: suspended,
|
|
event: event,
|
|
role: member_role,
|
|
subject: subject
|
|
})
|
|
|> Email.Mailer.send_email()
|
|
|
|
:ok
|
|
end
|
|
end
|
|
end
|