Send announcement notifications to anonymous participants
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -51,6 +51,18 @@ defmodule Mobilizon.Service.Notifier.Email do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Send an anonymous activity directly to an email, for anonymous participants for instance
|
||||
"""
|
||||
@spec send_anonymous_activity(String.t(), Activity.t(), Keyword.t()) :: {:ok, :sent}
|
||||
def send_anonymous_activity(email, %Activity{} = activity, options) do
|
||||
email
|
||||
|> EmailActivity.anonymous_activity(activity, options)
|
||||
|> Mailer.send_email()
|
||||
|
||||
{:ok, :sent}
|
||||
end
|
||||
|
||||
# These notifications are using LegacyNotifierBuilder and don't have any history,
|
||||
# so we always send them directly, as long as the setting isn't none
|
||||
@always_direct_subjects [
|
||||
|
||||
@@ -6,7 +6,7 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do
|
||||
alias Mobilizon.Activities.Activity
|
||||
alias Mobilizon.{Actors, Events, Users}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Events.Event
|
||||
alias Mobilizon.Events.{Event, Participant}
|
||||
alias Mobilizon.Service.Notifier
|
||||
|
||||
use Mobilizon.Service.Workers.Helper, queue: "activity"
|
||||
@@ -16,6 +16,10 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do
|
||||
with {"legacy_notify", args} <- Map.pop(args, "op") do
|
||||
activity = build_activity(args)
|
||||
|
||||
if args["subject"] == "participation_event_comment" do
|
||||
notify_anonymous_participants(get_in(args, ["subject_params", "event_id"]), activity)
|
||||
end
|
||||
|
||||
args
|
||||
|> users_to_notify(author_id: args["author_id"], group_id: Map.get(args, "group_id"))
|
||||
|> Enum.each(&Notifier.notify(&1, activity, single_activity: true))
|
||||
@@ -91,4 +95,20 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do
|
||||
|> Enum.uniq()
|
||||
|> Enum.map(&Users.get_user_with_settings!/1)
|
||||
end
|
||||
|
||||
defp notify_anonymous_participants(nil, _activity), do: :ok
|
||||
|
||||
defp notify_anonymous_participants(event_id, activity) do
|
||||
event_id
|
||||
|> Events.list_anonymous_participants_for_event()
|
||||
|> Enum.filter(fn %Participant{metadata: metadata} ->
|
||||
is_map(metadata) && is_binary(metadata.email)
|
||||
end)
|
||||
|> Enum.map(fn %Participant{metadata: metadata} -> metadata end)
|
||||
|> Enum.map(fn metadata ->
|
||||
Notifier.Email.send_anonymous_activity(metadata.email, activity,
|
||||
locale: Map.get(metadata, :locale, "en")
|
||||
)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user