Send activity digests

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-06-26 15:23:22 +02:00
parent a542f94379
commit 784c607c65
95 changed files with 3259 additions and 2382 deletions

View File

@@ -21,13 +21,10 @@ defmodule Mobilizon.Web.Email.Activity do
) do
locale = Keyword.get(options, :locale, "en")
single_activity = Keyword.get(options, :single_activity, false)
recap = Keyword.get(options, :recap, false)
Gettext.put_locale(locale)
subject =
gettext(
"Activity notification for %{instance}",
instance: Config.instance_name()
)
subject = get_subject(recap)
chunked_activities = chunk_activities(activities)
@@ -37,6 +34,7 @@ defmodule Mobilizon.Web.Email.Activity do
|> assign(:activities, chunked_activities)
|> assign(:total_number_activities, length(activities))
|> assign(:single_activity, single_activity)
|> assign(:recap, recap)
|> render(:email_direct_activity)
end
@@ -94,4 +92,38 @@ defmodule Mobilizon.Web.Email.Activity do
end
end)
end
@spec get_subject(atom() | false) :: String.t()
defp get_subject(recap) do
if recap do
case recap do
:one_hour ->
dgettext(
"activity",
"Activity notification for %{instance}",
instance: Config.instance_name()
)
:one_day ->
dgettext(
"activity",
"Daily activity recap for %{instance}",
instance: Config.instance_name()
)
:one_week ->
dgettext(
"activity",
"Weekly activity recap for %{instance}",
instance: Config.instance_name()
)
end
else
dgettext(
"activity",
"Activity notification for %{instance}",
instance: Config.instance_name()
)
end
end
end

View File

@@ -1,73 +1,4 @@
<%= case @activity.subject do %>
<% :discussion_created -> %>
<%=
dgettext("activity", "%{profile} created the discussion %{discussion}.",
%{
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
discussion: "<a href=\"#{
page_url(
Mobilizon.Web.Endpoint,
:discussion,
Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]
) |> URI.decode()}\">
#{@activity.subject_params["discussion_title"]}
</a>"
}
) |> raw %>
<% :discussion_replied -> %>
<%=
dgettext("activity", "%{profile} replied to the discussion %{discussion}.",
%{
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
discussion: "<a href=\"#{
page_url(
Mobilizon.Web.Endpoint,
:discussion,
Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]
) |> URI.decode()}\">
#{@activity.subject_params["discussion_title"]}
</a>"
}
) |> raw %>
<% :discussion_renamed -> %>
<%=
dgettext("activity", "%{profile} renamed the discussion %{discussion}.",
%{
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
discussion: "<a href=\"#{
page_url(
Mobilizon.Web.Endpoint,
:discussion,
Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]
) |> URI.decode()}\">
#{@activity.subject_params["discussion_title"]}
</a>"
}
) |> raw %>
<% :discussion_archived -> %>
<%=
dgettext("activity", "%{profile} archived the discussion %{discussion}.",
%{
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
discussion: "<a href=\"#{
page_url(
Mobilizon.Web.Endpoint,
:discussion,
Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]
) |> URI.decode()}\">
#{@activity.subject_params["discussion_title"]}
</a>"
}
) |> raw %>
<% :discussion_deleted -> %>
<%=
dgettext("activity", "%{profile} deleted the discussion %{discussion}.",
%{
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
discussion: "<b>#{@activity.subject_params["discussion_title"]}</b>"
}
) |> raw %>
<% :event_comment_mention -> %>
<%=
dgettext("activity", "%{profile} mentionned you in a comment under event %{event}.",

View File

@@ -22,19 +22,19 @@
discussion: @activity.subject_params["discussion_title"]
}
) %>
<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_deleted -> %><%= dgettext("activity", "%{profile} deleted the discussion %{discussion}.",
<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_deleted -> %><%= dgettext("activity", "%{profile} deleted the discussion %{discussion}.",
%{
profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author),
discussion: @activity.subject_params["discussion_title"]
}
) %>
<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :event_comment_mention -> %><%= dgettext("activity", "%{profile} mentionned you in a comment under %{event}.",
<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :event_comment_mention -> %><%= dgettext("activity", "%{profile} mentionned you in a comment under event %{event}.",
%{
profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author),
event: @activity.subject_params["event_title"]
}
) %>
<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% :participation_event_comment -> %><%= dgettext("activity", "%{profile} has posted an announcement under event %{event}.",
<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% :participation_event_comment -> %><%= dgettext("activity", "%{profile} has posted an announcement under event %{event}.",
%{
profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author),
event: @activity.subject_params["event_title"]

View File

@@ -110,11 +110,11 @@
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" >
<!-- HEADLINE -->
<tr>
<td bgcolor="#757199" align="center" style="padding: 30px 30px 30px 30px; border-radius: 4px 4px 4px 4px; color: #3A384C; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<h2 style="font-size: 20px; font-weight: 400; color: #3A384C; margin: 0;">
<td bgcolor="#474467" align="center" style="padding: 30px 30px 30px 30px; border-radius: 4px 4px 4px 4px; color: #3A384C; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<h2 style="font-size: 20px; font-weight: 400; color: #FFFFFF; margin: 0;">
<%= gettext "Need help? Is something not working as expected?" %>
</h2>
<p style="margin: 0;"><a href="https://framacolibri.org/c/mobilizon/test-mobilizon" target="_blank" style="color: #474467;">
<p style="margin: 0;"><a href="https://framacolibri.org/c/mobilizon/test-mobilizon" target="_blank" style="color: #FFFFFF;">
<%= gettext "Ask the community on Framacolibri" %>
</a></p>
</td>
@@ -140,7 +140,7 @@
<tr>
<td bgcolor="#ECEBF2" align="center" style="padding: 30px 30px 30px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; line-height: 18px;" >
<p style="margin: 0;">
<%= gettext("<b>%{instance}</b> is powered by Mobilizon.", instance: @instance[:name]) |> raw %>
<%= gettext("<b>%{instance}</b> is powered by Mobilizon.", instance: @instance[:name]) |> raw %><br />
<a href="https://joinmobilizon.org"><%= gettext "Learn more about Mobilizon here!" %></a>
</p>
</td>

View File

@@ -35,7 +35,16 @@
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 5% 0px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0;">
<%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<%= case @recap do %>
<% :one_day -> %>
<% dgettext("activity", "Here's your daily activity recap") %>
<% :one_week -> %>
<% dgettext("activity", "Here's your weekly activity recap") %>
<% :one_hour -> %>
<%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<% false -> %>
<%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<% end %>
</p>
</td>
</tr>
@@ -108,7 +117,9 @@
<% end %>
</p>
<%= unless @single_activity do %>
<em><%= datetime_relative(activity.inserted_at, @locale) %></em>
<em>
<%= datetime_to_string(activity.inserted_at, @locale, :short) %>
</em>
<% end %>
</li>
<% end %>
@@ -141,7 +152,7 @@
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 40px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; line-height: 20px;" >
<p style="margin: 0">
<%= dgettext "activity", "Don't want to receive activity notifications? You may change frequency or disable them in your settings." %>
<%= dgettext("activity", "Don't want to receive activity notifications? You may change frequency or disable them in %{tag_start}your settings%{tag_end}.", %{tag_start: "<a href=\"#{Mobilizon.Web.Endpoint.url()}/settings/notifications\">", tag_end: "</a>"}) |> raw %>
</p>
</td>
</tr>

View File

@@ -1,7 +1,11 @@
<%= @subject %>
==
<%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<%= case @recap do %><% :one_day -> %><% dgettext("activity", "Here's your daily activity recap") %>
<% :one_week -> %><% dgettext("activity", "Here's your weekly activity recap") %>
<% :one_hour -> %><%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<% false -> %><%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %>
<% end %>
<%= for {_, group_activities} <- @activities do %>
@@ -13,11 +17,12 @@
<%= for activity <- Enum.take(group_activities, 5) do %>
* <%= case activity.type do %><% :discussion -> %><%= render("activity/_discussion_activity_item.text", activity: activity) %><% :event -> %><%= render("activity/_event_activity_item.text", activity: activity) %><% :group -> %><%= render("activity/_group_activity_item.text", activity: activity) %>
<% :member -> %><%= render("activity/_member_activity_item.text", activity: activity) %><% :post -> %><%= render("activity/_post_activity_item.text", activity: activity) %><% :resource -> %><%= render("activity/_resource_activity_item.text", activity: activity) %><% :comment -> %><%= render("activity/_comment_activity_item.text", activity: activity) %><% end %>
<%= unless @single_activity do %><%= datetime_relative(activity.inserted_at, @locale) %><% end %>
<%= unless @single_activity do %><%= datetime_to_string(activity.inserted_at, @locale, :short) %><% end %>
<% end %>
<%= if length(group_activities) > 5 do %>
<%= dngettext "activity", "View one more activity", "View %{count} more activities", length(group_activities) - 5, %{count: length(group_activities) - 5} %>
<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>/timeline
<% end %>
<% end %>
<%= dgettext("activity", "Don't want to receive activity notifications? You may change frequency or disable them in your settings.") %>
<%= dgettext("activity", "Don't want to receive activity notifications? You may change frequency or disable them in your settings.") %>
<% "#{Mobilizon.Web.Endpoint.url()}/settings/notifications" %>