mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 07:23:22 +00:00
Batch messages into logical groups in emails, like the web interface
(imported from commit 5c771f7aafc3972c8f0dd1dc329535233f01ee7a)
This commit is contained in:
@@ -6,12 +6,17 @@ Hello {{ name }},
|
|||||||
|
|
||||||
While you were away you received {{ messages|length }} new message{{ messages|pluralize }}{% if mention %} in which you were mentioned{% endif %}!
|
While you were away you received {{ messages|length }} new message{{ messages|pluralize }}{% if mention %} in which you were mentioned{% endif %}!
|
||||||
|
|
||||||
{% for message in messages %}
|
|
||||||
{{ message.sender }}
|
{% for recipient_block in messages %}
|
||||||
---
|
{{ recipient_block.header|safe }}
|
||||||
{{ message.content }}
|
{% for sender_block in recipient_block.senders %}
|
||||||
|
{% if sender_block.sender %}{{ sender_block.sender }}{% endif %}{% for message_block in sender_block.content %}
|
||||||
|
{{ message_block.plain }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
Click here to log in to Humbug and view your new messages:
|
Click here to log in to Humbug and view your new messages:
|
||||||
|
|
||||||
{{ url }}
|
{{ url }}
|
||||||
|
|||||||
@@ -5,16 +5,28 @@ Mail sent to user when she was not logged in and received a PM or @-mention
|
|||||||
Hello {{ name }},
|
Hello {{ name }},
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
While you were away you received {{ messages|length }} new message{{ messages|pluralize }}{% if mention %} in which you were mentioned{%endif %}!
|
While you were away you received {{ message_count }} new message{{ message_count|pluralize }}{% if mention %} in which you were mentioned{%endif %}!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id='messages'>
|
<div id='messages'>
|
||||||
{% for message in messages %}
|
{% for recipient_block in messages %}
|
||||||
<div id='message_subject'>{{ message.sender }}:</div>
|
<div class='recipient_block'>
|
||||||
<div id='message_content'>{{ message.rendered_content|safe }}</div>
|
<div class='recipient_header'>{{ recipient_block.header }}</div>
|
||||||
|
<div class='message_content'>
|
||||||
|
{% for sender_block in recipient_block.senders %}
|
||||||
|
{% if sender_block.sender %} <div class="message_sender">{{ sender_block.sender }}</div>{% endif %}
|
||||||
|
{% for message_block in sender_block.content %}
|
||||||
|
<div class='message_content_block'>
|
||||||
|
{{ message_block.html|safe }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<p><a href="{{ url }}">Click here to log in to Humbug and view your new messages.</a></p>
|
<p><a href="{{ url }}">Click here to log in to Humbug and view your new messages.</a></p>
|
||||||
|
|
||||||
{% if reply_warning %}
|
{% if reply_warning %}
|
||||||
|
|||||||
@@ -1148,6 +1148,86 @@ def do_send_confirmation_email(invitee, referrer):
|
|||||||
subject_template_path='confirmation/invite_email_subject.txt',
|
subject_template_path='confirmation/invite_email_subject.txt',
|
||||||
body_template_path='confirmation/invite_email_body.txt')
|
body_template_path='confirmation/invite_email_body.txt')
|
||||||
|
|
||||||
|
def build_message_list(user_profile, messages):
|
||||||
|
"""
|
||||||
|
Builds the message list object for the missed message email template.
|
||||||
|
The messages are collapsed into per-recipient and per-sender blocks, like
|
||||||
|
our web interface
|
||||||
|
"""
|
||||||
|
messages_to_render = []
|
||||||
|
|
||||||
|
def sender_string(message):
|
||||||
|
sender = ''
|
||||||
|
if message.recipient.type in (Recipient.STREAM, Recipient.HUDDLE):
|
||||||
|
sender = message.sender.full_name
|
||||||
|
return sender
|
||||||
|
|
||||||
|
def build_message_payload(message):
|
||||||
|
return {'plain': message.content,
|
||||||
|
'html': message.rendered_content}
|
||||||
|
|
||||||
|
def build_sender_payload(message):
|
||||||
|
sender = sender_string(message)
|
||||||
|
return {'sender': sender,
|
||||||
|
'content': [build_message_payload(message)]}
|
||||||
|
|
||||||
|
def message_header(user_profile, message):
|
||||||
|
disp_recipient = get_display_recipient(message.recipient)
|
||||||
|
if message.recipient.type == Recipient.PERSONAL:
|
||||||
|
header = "You and %s" % (message.sender.full_name)
|
||||||
|
elif message.recipient.type == Recipient.HUDDLE:
|
||||||
|
other_recipients = [r['full_name'] for r in disp_recipient
|
||||||
|
if r['email'] != user_profile.email]
|
||||||
|
header = "You and %s" % (", ".join(other_recipients),)
|
||||||
|
else:
|
||||||
|
header = "%s > %s" % (disp_recipient, message.subject)
|
||||||
|
return header
|
||||||
|
|
||||||
|
# # Collapse message list to
|
||||||
|
# [
|
||||||
|
# {
|
||||||
|
# "header":"xxx",
|
||||||
|
# "senders":[
|
||||||
|
# {
|
||||||
|
# "sender":"sender_name",
|
||||||
|
# "content":[
|
||||||
|
# {
|
||||||
|
# "plain":"content",
|
||||||
|
# "html":"htmlcontent"
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# "plain":"content",
|
||||||
|
# "html":"htmlcontent"
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# },
|
||||||
|
# ]
|
||||||
|
|
||||||
|
for message in messages:
|
||||||
|
header = message_header(user_profile, message)
|
||||||
|
|
||||||
|
# If we want to collapse into the previous recipient block
|
||||||
|
if len(messages_to_render) > 0 and messages_to_render[-1]['header'] == header:
|
||||||
|
sender = sender_string(message)
|
||||||
|
sender_block = messages_to_render[-1]['senders']
|
||||||
|
|
||||||
|
# Same message sender, collapse again
|
||||||
|
if sender_block[-1]['sender'] == sender:
|
||||||
|
sender_block[-1]['content'].append(build_message_payload(message))
|
||||||
|
else:
|
||||||
|
# Start a new sender block
|
||||||
|
sender_block.append(build_sender_payload(message))
|
||||||
|
else:
|
||||||
|
# New recipient and sender block
|
||||||
|
recipient_block = {'header': header,
|
||||||
|
'senders': [build_sender_payload(message)]}
|
||||||
|
|
||||||
|
messages_to_render.append(recipient_block)
|
||||||
|
|
||||||
|
return messages_to_render
|
||||||
|
|
||||||
@statsd_increment("missed_message_reminders")
|
@statsd_increment("missed_message_reminders")
|
||||||
def do_send_missedmessage_email(user_profile, missed_messages):
|
def do_send_missedmessage_email(user_profile, missed_messages):
|
||||||
"""
|
"""
|
||||||
@@ -1156,15 +1236,9 @@ def do_send_missedmessage_email(user_profile, missed_messages):
|
|||||||
`user_profile` is the user to send the reminder to
|
`user_profile` is the user to send the reminder to
|
||||||
`missed_messages` is a list of Message objects to remind about
|
`missed_messages` is a list of Message objects to remind about
|
||||||
"""
|
"""
|
||||||
|
|
||||||
messages_to_render = [{'sender': message.sender.full_name,
|
|
||||||
'subject': message.subject,
|
|
||||||
'content': message.content,
|
|
||||||
'rendered_content': message.rendered_content}
|
|
||||||
for message in missed_messages]
|
|
||||||
|
|
||||||
template_payload = {'name': user_profile.full_name,
|
template_payload = {'name': user_profile.full_name,
|
||||||
'messages': messages_to_render,
|
'messages': build_message_list(user_profile, missed_messages),
|
||||||
|
'message_count': len(missed_messages),
|
||||||
'url': 'https://humbughq.com',
|
'url': 'https://humbughq.com',
|
||||||
'reply_warning': False}
|
'reply_warning': False}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user