WIP notification settings
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -43,8 +43,15 @@ defmodule Mobilizon.Web.Email.Activity do
|
||||
@spec chunk_activities(list()) :: map()
|
||||
defp chunk_activities(activities) do
|
||||
activities
|
||||
|> Enum.reduce(%{}, fn %Activity{group: %Actor{id: group_id}} = activity, acc ->
|
||||
Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end)
|
||||
|> Enum.reduce(%{}, fn activity, acc ->
|
||||
case activity do
|
||||
%Activity{group: %Actor{id: group_id}} ->
|
||||
Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end)
|
||||
|
||||
# Not a group activity
|
||||
%Activity{} ->
|
||||
Map.update(acc, nil, [activity], fn activities -> activities ++ [activity] end)
|
||||
end
|
||||
end)
|
||||
|> Enum.map(fn {key, value} ->
|
||||
{key, Enum.sort(value, &(&1.inserted_at <= &2.inserted_at))}
|
||||
@@ -57,20 +64,34 @@ defmodule Mobilizon.Web.Email.Activity do
|
||||
# so it will probably not catch much things
|
||||
@spec filter_duplicates(list()) :: list()
|
||||
defp filter_duplicates(activities) do
|
||||
Enum.uniq_by(activities, fn %Activity{
|
||||
author: %Actor{id: author_id},
|
||||
group: %Actor{id: group_id},
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
} ->
|
||||
%{
|
||||
author_id: author_id,
|
||||
group_id: group_id,
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
}
|
||||
Enum.uniq_by(activities, fn activity ->
|
||||
case activity do
|
||||
%Activity{
|
||||
author: %Actor{id: author_id},
|
||||
group: %Actor{id: group_id},
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
} ->
|
||||
%{
|
||||
author_id: author_id,
|
||||
group_id: group_id,
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
}
|
||||
|
||||
%Activity{
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
} ->
|
||||
%{
|
||||
type: type,
|
||||
subject: subject,
|
||||
subject_params: subject_params
|
||||
}
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,4 +67,35 @@
|
||||
discussion: "<b>#{@activity.subject_params["discussion_title"]}</b>"
|
||||
}
|
||||
) |> raw %>
|
||||
|
||||
<% :event_comment_mention -> %>
|
||||
<%=
|
||||
dgettext("activity", "%{profile} mentionned you in a comment under event %{event}.",
|
||||
%{
|
||||
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
|
||||
event: "<a href=\"#{
|
||||
page_url(
|
||||
Mobilizon.Web.Endpoint,
|
||||
:event,
|
||||
@activity.subject_params["event_uuid"]
|
||||
) |> URI.decode()}\">
|
||||
#{@activity.subject_params["event_title"]}
|
||||
</a>"
|
||||
}
|
||||
) |> raw %>
|
||||
<% :participation_event_comment -> %>
|
||||
<%=
|
||||
dgettext("activity", "%{profile} has posted an announcement under event %{event}.",
|
||||
%{
|
||||
profile: "<b>#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}</b>",
|
||||
event: "<a href=\"#{
|
||||
page_url(
|
||||
Mobilizon.Web.Endpoint,
|
||||
:event,
|
||||
@activity.subject_params["event_uuid"]
|
||||
) |> URI.decode()}\">
|
||||
#{@activity.subject_params["event_title"]}
|
||||
</a>"
|
||||
}
|
||||
) |> raw %>
|
||||
<% end %>
|
||||
@@ -27,4 +27,17 @@
|
||||
profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author),
|
||||
discussion: @activity.subject_params["discussion_title"]
|
||||
}
|
||||
) %><% end %>
|
||||
) %>
|
||||
<%= 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}.",
|
||||
%{
|
||||
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}.",
|
||||
%{
|
||||
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() %><% end %>
|
||||
@@ -47,43 +47,45 @@
|
||||
<ul style="margin: 0 auto; padding-left: 15px;">
|
||||
<%= for {_, group_activities} <- @activities do %>
|
||||
<li style="list-style: none;border-bottom: solid 2px #d7d6de;padding: 10px 0;">
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<table align="left">
|
||||
<tr>
|
||||
<%= if hd(group_activities).group.avatar do %>
|
||||
<td width="85">
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;">
|
||||
<img width="80" src="<%= hd(group_activities).group.avatar.url %>" style="width: 80px;max-height: 100px;" style="margin:0; padding:0; border:none; display:block;" border="0" alt="" />
|
||||
</a>
|
||||
</td>
|
||||
<% end %>
|
||||
<td width="400">
|
||||
<table width="" cellpadding="0" cellspacing="0" border="0" style="max-width: 400px;width: 100%;" align="left">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;color: #474467;font-family: 'Roboto', Helvetica, Arial, sans-serif;font-size: 18px;font-weight: bold;line-height: 25px;">
|
||||
<%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<%= if hd(group_activities).group.name do %>
|
||||
<%= if hd(group_activities).group do %>
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<table align="left">
|
||||
<tr>
|
||||
<%= if hd(group_activities).group.avatar do %>
|
||||
<td width="85">
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;">
|
||||
<img width="80" src="<%= hd(group_activities).group.avatar.url %>" style="width: 80px;max-height: 100px;" style="margin:0; padding:0; border:none; display:block;" border="0" alt="" />
|
||||
</a>
|
||||
</td>
|
||||
<% end %>
|
||||
<td width="400">
|
||||
<table width="" cellpadding="0" cellspacing="0" border="0" style="max-width: 400px;width: 100%;" align="left">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;display: block;color: #7a7a7a;font-family: 'Roboto', Helvetica, Arial, sans-serif;font-size: 16px;font-weight: 400;line-height: 25px;">
|
||||
@<%= Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group) %>
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;color: #474467;font-family: 'Roboto', Helvetica, Arial, sans-serif;font-size: 18px;font-weight: bold;line-height: 25px;">
|
||||
<%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<%= if hd(group_activities).group.name do %>
|
||||
<tr>
|
||||
<td align="left">
|
||||
<a href="<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>" target="_blank" style="text-decoration: none;display: block;color: #7a7a7a;font-family: 'Roboto', Helvetica, Arial, sans-serif;font-size: 16px;font-weight: 400;line-height: 25px;">
|
||||
@<%= Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group) %>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% end %>
|
||||
<ul style="padding-left: 25px;margin-top: 10px;">
|
||||
<%= for activity <- Enum.take(group_activities, 5) do %>
|
||||
<li style="margin-bottom: 7px;">
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
<%= for {_, group_activities} <- @activities do %>
|
||||
|
||||
==
|
||||
<%= if hd(group_activities).group do %>
|
||||
<%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %>
|
||||
<% end %>
|
||||
|
||||
<%= 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) %>
|
||||
|
||||
Reference in New Issue
Block a user