diff --git a/lib/mobilizon/events/events.ex b/lib/mobilizon/events/events.ex index 83001cb10..6960acc98 100644 --- a/lib/mobilizon/events/events.ex +++ b/lib/mobilizon/events/events.ex @@ -738,6 +738,11 @@ defmodule Mobilizon.Events do |> Repo.one() end + @spec get_participant!(integer | String.t()) :: Participant.t() + def get_participant!(participant_id) do + Repo.get_by!(Participant, id: participant_id) + end + @doc """ Gets a single participation for an event and actor. diff --git a/lib/mobilizon/events/participant.ex b/lib/mobilizon/events/participant.ex index 550b04609..0c4f836fa 100644 --- a/lib/mobilizon/events/participant.ex +++ b/lib/mobilizon/events/participant.ex @@ -109,7 +109,7 @@ defmodule Mobilizon.Events.Participant do # No lookalike symbols @symbols '6789BCDFGHJKLMNPQRTW' - @symbol_count Enum.count(@symbols) + @symbol_count Enum.count(@symbols) - 1 @code_length 6 @spec generate_code :: String.t() diff --git a/lib/service/workers/notification.ex b/lib/service/workers/notification.ex index 004ef8e05..10d13c09b 100644 --- a/lib/service/workers/notification.ex +++ b/lib/service/workers/notification.ex @@ -3,11 +3,10 @@ defmodule Mobilizon.Service.Workers.Notification do Worker to send notifications """ + alias Mobilizon.{Actors, Events, Users} alias Mobilizon.Actors.Actor - alias Mobilizon.Events alias Mobilizon.Events.{Event, Participant} alias Mobilizon.Storage.Page - alias Mobilizon.Users alias Mobilizon.Users.{Setting, User} alias Mobilizon.Web.Email.{Mailer, Notification} @@ -22,12 +21,19 @@ defmodule Mobilizon.Service.Workers.Notification do def perform(%Job{ args: %{"op" => "before_event_notification", "participant_id" => participant_id} }) do - with %Participant{actor: %Actor{user_id: user_id}, event: %Event{status: :confirmed}} = - participant <- Events.get_participant(participant_id), - %User{email: email, locale: locale, settings: %Setting{notification_before_event: true}} <- - Users.get_user_with_settings!(user_id) do + with %Participant{} = participant <- Events.get_participant(participant_id), + %Event{status: :confirmed} = event <- + Events.get_event_with_preload!(participant.event_id), + %Actor{user_id: user_id} = actor when not is_nil(user_id) <- + Actors.get_actor_with_preload!(participant.actor_id) do + %User{email: email, locale: locale, settings: %Setting{notification_before_event: true}} = + Users.get_user_with_settings!(user_id) + email - |> Notification.before_event_notification(participant, locale) + |> Notification.before_event_notification( + %Participant{participant | event: event, actor: actor}, + locale + ) |> Mailer.send_email_later() :ok @@ -50,7 +56,12 @@ defmodule Mobilizon.Service.Workers.Notification do Enum.filter(participations, fn participation -> participation.event.status == :confirmed end), - true <- length(participations) > 0 do + true <- length(participations) > 0, + participations <- + Enum.map(participations, fn participation -> + %Event{} = event = Events.get_event_with_preload!(participation.event_id) + %Participant{participation | event: event} + end) do user |> Notification.on_day_notification(participations, total, locale) |> Mailer.send_email_later() @@ -79,7 +90,12 @@ defmodule Mobilizon.Service.Workers.Notification do Enum.filter(participations, fn participation -> participation.event.status == :confirmed end), - true <- length(participations) > 0 do + true <- length(participations) > 0, + participations <- + Enum.map(participations, fn participation -> + %Event{} = event = Events.get_event_with_preload!(participation.event_id) + %Participant{participation | event: event} + end) do user |> Notification.weekly_notification(participations, total, locale) |> Mailer.send_email_later() @@ -99,7 +115,7 @@ defmodule Mobilizon.Service.Workers.Notification do } }) do with %User{} = user <- Users.get_user(user_id), - {:ok, %Event{} = event} <- Events.get_event(event_id), + {:ok, %Event{} = event} <- Events.get_event_with_preload(event_id), %Page{total: total} when total > 0 <- Events.list_participants_for_event(event_id, [:not_approved]) do user diff --git a/lib/web/templates/email/email.html.heex b/lib/web/templates/email/email.html.heex index 61af9051f..6f4802614 100644 --- a/lib/web/templates/email/email.html.heex +++ b/lib/web/templates/email/email.html.heex @@ -1,6 +1,3 @@ - - -
diff --git a/lib/web/templates/email/password_reset.html.heex b/lib/web/templates/email/password_reset.html.heex index 72e00784a..a9973b02b 100644 --- a/lib/web/templates/email/password_reset.html.heex +++ b/lib/web/templates/email/password_reset.html.heex @@ -57,7 +57,7 @@+ | <%= gettext "Reset Password" %> |