Skip to content

Commit a8aae71

Browse files
carlinmackslint
authored andcommitted
notifications: add comment notification for subcoms
fix new subcommunity title
1 parent dcc8682 commit a8aae71

File tree

5 files changed

+177
-6
lines changed

5 files changed

+177
-6
lines changed

invenio_communities/notifications/builders.py

+44-5
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,6 @@ class SubComInvitationBuilderBase(SubCommunityBuilderBase):
231231
EntityResolve("executing_user"),
232232
]
233233

234-
recipients = [
235-
CommunityMembersRecipient("request.created_by", roles=["owner", "manager"]),
236-
CommunityMembersRecipient("request.receiver", roles=["owner", "manager"]),
237-
]
238-
239234

240235
class SubComInvitationCreate(SubComInvitationBuilderBase):
241236
"""Notification builder for subcommunity request creation."""
@@ -292,3 +287,47 @@ class SubComInvitationExpire(SubComInvitationBuilderBase):
292287
recipients = [
293288
CommunityMembersRecipient("request.receiver", roles=["owner", "manager"]),
294289
]
290+
291+
292+
#
293+
# Comments
294+
#
295+
class SubComCommentNotificationBuilderBase(SubCommunityBuilderBase):
296+
"""Notification builder for comment request event creation."""
297+
298+
context = [
299+
EntityResolve(key="request"),
300+
EntityResolve(key="request.created_by"),
301+
EntityResolve(key="request.receiver"),
302+
EntityResolve(key="request_event"),
303+
EntityResolve(key="request_event.created_by"),
304+
]
305+
306+
@classmethod
307+
def build(cls, request, request_event):
308+
"""Build notification with request context."""
309+
return Notification(
310+
type=cls.type,
311+
context={
312+
"request": EntityResolverRegistry.reference_entity(request),
313+
"request_event": EntityResolverRegistry.reference_entity(request_event),
314+
},
315+
)
316+
317+
recipient_filters = [
318+
# do not send notification to user creating the comment
319+
UserRecipientFilter(key="request_event.created_by"),
320+
UserPreferencesRecipientFilter(),
321+
]
322+
323+
324+
class SubComReqCommentNotificationBuilder(SubComCommentNotificationBuilderBase):
325+
"""Notification builder for comment request event creation."""
326+
327+
type = f"comment-{SubCommunityBuilderBase.type}.create"
328+
329+
330+
class SubComInvCommentNotificationBuilder(SubComCommentNotificationBuilderBase):
331+
"""Notification builder for comment request event creation."""
332+
333+
type = f"comment-{SubComInvitationBuilderBase.type}.create"

invenio_communities/subcommunities/services/request.py

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
import invenio_communities.notifications.builders as notifications
1616
from invenio_communities.proxies import current_communities
1717

18+
from ...notifications.builders import (
19+
SubComInvCommentNotificationBuilder,
20+
SubComReqCommentNotificationBuilder,
21+
)
22+
1823

1924
class AcceptSubcommunity(actions.AcceptAction):
2025
"""Represents an accept action used to accept a subcommunity."""
@@ -64,6 +69,8 @@ class SubCommunityRequest(RequestType):
6469
allowed_receiver_ref_types = ["community"]
6570
allowed_topic_ref_types = ["community"]
6671

72+
comment_notification_builder = SubComReqCommentNotificationBuilder
73+
6774
available_actions = {
6875
"delete": actions.DeleteAction,
6976
"create": actions.CreateAndSubmitAction,
@@ -149,6 +156,8 @@ class SubCommunityInvitationRequest(RequestType):
149156
allowed_receiver_ref_types = ["community"]
150157
allowed_topic_ref_types = ["community"]
151158

159+
comment_notification_builder = SubComInvCommentNotificationBuilder
160+
152161
available_actions = {
153162
"delete": actions.DeleteAction,
154163
"cancel": actions.CancelAction,

invenio_communities/templates/semantic-ui/invenio_communities/details/new_subcommunity.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
{% extends "invenio_communities/details/base.html" %}
1111

12-
{%- set title = _("New community") -%}
12+
{%- set title = _("New subcommunity") -%}
1313

1414
{%- block javascript %}
1515
{{ super() }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{% set invenio_request = notification.context.request %}
2+
{% set invenio_request_event = notification.context.request_event %}
3+
4+
{# created_by is either a resolved user or an email (for guests) #}
5+
{% set event_creator_name = invenio_request_event.created_by.username or invenio_request_event.created_by %}
6+
{% set request_id = invenio_request.id %}
7+
{% set request_event_content = invenio_request_event.payload.content | safe %}
8+
{% set request_title = invenio_request.title | safe %}
9+
{# It would be more natural to send to receiver, but for now we send to parent #}
10+
{% set parent_community = invenio_request.created_by.slug %}
11+
12+
{# TODO: use request.links.self_html when issue issue is resolved: https://github.com/inveniosoftware/invenio-rdm-records/issues/1327 #}
13+
{% set request_link = "{ui}/communities/{parent_community}/requests/{request_id}".format(
14+
ui=config.SITE_UI_URL, parent_community=parent_community, request_id=request_id
15+
)
16+
%}
17+
{% set account_settings_link = "{ui}/account/settings/notifications".format(
18+
ui=config.SITE_UI_URL
19+
)
20+
%}
21+
22+
{%- block subject -%}
23+
{{ _("💬 New comment on '{request_title}'").format(request_title=request_title) }}
24+
{%- endblock subject -%}
25+
26+
{%- block html_body -%}
27+
<table style="font-family:'Lato',Helvetica,Arial,sans-serif;border-spacing:15px">
28+
<tr>
29+
<td>{{ _("'@{user_name}' commented on '{request_title}':").format(user_name=event_creator_name, request_title=request_title) }}</td>
30+
</tr>
31+
<tr>
32+
<td><em>{{ request_event_content }}</em></td>
33+
</tr>
34+
<tr>
35+
<td><a href="{{ request_link }}" class="button">{{ _("Check out the request")}}</a></td>
36+
</tr>
37+
<tr>
38+
<td><strong>_</strong></td>
39+
</tr>
40+
<tr>
41+
<td style="font-size:smaller">{{ _("This is an auto-generated message. To manage notifications, visit your")}} <a href="{{account_settings_link}}">{{ _("account settings")}}</a>.</td>
42+
</tr>
43+
</table>
44+
{%- endblock html_body %}
45+
46+
{%- block plain_body -%}
47+
{{ _("@{user_name} commented on '{request_title}'").format(user_name=event_creator_name, request_title=request_title) }}.
48+
49+
{{ request_event_content }}
50+
51+
{{ _("Check out the request: {request_link}").format(request_link=request_link) }}
52+
53+
{%- endblock plain_body %}
54+
55+
{# Markdown for Slack/Mattermost/chat #}
56+
{%- block md_body -%}
57+
{{ _("*@{user_name}* commented on *{request_title}*").format(user_name=event_creator_name, request_title=request_title) }}.
58+
59+
{{ request_event_content }}
60+
61+
[{{_("Check out the request")}}]({{request_link}})
62+
{%- endblock md_body %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{% set invenio_request = notification.context.request %}
2+
{% set invenio_request_event = notification.context.request_event %}
3+
4+
{# created_by is either a resolved user or an email (for guests) #}
5+
{% set event_creator_name = invenio_request_event.created_by.username or invenio_request_event.created_by %}
6+
{% set request_id = invenio_request.id %}
7+
{% set request_event_content = invenio_request_event.payload.content | safe %}
8+
{% set request_title = invenio_request.title | safe %}
9+
{% set parent_community = invenio_request.receiver.slug %}
10+
11+
{# TODO: use request.links.self_html when issue issue is resolved: https://github.com/inveniosoftware/invenio-rdm-records/issues/1327 #}
12+
{% set request_link = "{ui}/communities/{parent_community}/requests/{request_id}".format(
13+
ui=config.SITE_UI_URL, parent_community=parent_community, request_id=request_id
14+
)
15+
%}
16+
{% set account_settings_link = "{ui}/account/settings/notifications".format(
17+
ui=config.SITE_UI_URL
18+
)
19+
%}
20+
21+
{%- block subject -%}
22+
{{ _("💬 New comment on '{request_title}'").format(request_title=request_title) }}
23+
{%- endblock subject -%}
24+
25+
{%- block html_body -%}
26+
<table style="font-family:'Lato',Helvetica,Arial,sans-serif;border-spacing:15px">
27+
<tr>
28+
<td>{{ _("'@{user_name}' commented on '{request_title}':").format(user_name=event_creator_name, request_title=request_title) }}</td>
29+
</tr>
30+
<tr>
31+
<td><em>{{ request_event_content }}</em></td>
32+
</tr>
33+
<tr>
34+
<td><a href="{{ request_link }}" class="button">{{ _("Check out the request")}}</a></td>
35+
</tr>
36+
<tr>
37+
<td><strong>_</strong></td>
38+
</tr>
39+
<tr>
40+
<td style="font-size:smaller">{{ _("This is an auto-generated message. To manage notifications, visit your")}} <a href="{{account_settings_link}}">{{ _("account settings")}}</a>.</td>
41+
</tr>
42+
</table>
43+
{%- endblock html_body %}
44+
45+
{%- block plain_body -%}
46+
{{ _("@{user_name} commented on '{request_title}'").format(user_name=event_creator_name, request_title=request_title) }}.
47+
48+
{{ request_event_content }}
49+
50+
{{ _("Check out the request: {request_link}").format(request_link=request_link) }}
51+
52+
{%- endblock plain_body %}
53+
54+
{# Markdown for Slack/Mattermost/chat #}
55+
{%- block md_body -%}
56+
{{ _("*@{user_name}* commented on *{request_title}*").format(user_name=event_creator_name, request_title=request_title) }}.
57+
58+
{{ request_event_content }}
59+
60+
[{{_("Check out the request")}}]({{request_link}})
61+
{%- endblock md_body %}

0 commit comments

Comments
 (0)