* New message email * Mentioned in a comment * File backup email * Feedback email * Administrator logged in email * Upcoming events email * minor * Add header title and indicator colorversion-14
@@ -82,12 +82,7 @@ def notify_mentions(doc): | |||||
sender_fullname = get_fullname(frappe.session.user) | sender_fullname = get_fullname(frappe.session.user) | ||||
parent_doc_label = "{0} {1}".format(_(doc.reference_doctype), doc.reference_name) | parent_doc_label = "{0} {1}".format(_(doc.reference_doctype), doc.reference_name) | ||||
subject = _("{0} mentioned you in a comment in {1}").format(sender_fullname, parent_doc_label) | |||||
message = frappe.get_template("templates/emails/mentioned_in_comment.html").render({ | |||||
"sender_fullname": sender_fullname, | |||||
"comment": doc, | |||||
"link": get_link_to_form(doc.reference_doctype, doc.reference_name, label=parent_doc_label) | |||||
}) | |||||
subject = _("{0} mentioned you in a comment").format(sender_fullname) | |||||
recipients = [frappe.db.get_value("User", {"enabled": 1, "username": username, "user_type": "System User"}) | recipients = [frappe.db.get_value("User", {"enabled": 1, "username": username, "user_type": "System User"}) | ||||
for username in mentions] | for username in mentions] | ||||
@@ -96,7 +91,13 @@ def notify_mentions(doc): | |||||
recipients=recipients, | recipients=recipients, | ||||
sender=frappe.session.user, | sender=frappe.session.user, | ||||
subject=subject, | subject=subject, | ||||
message=message | |||||
template="mentioned_in_comment", | |||||
args={ | |||||
"sender_fullname": sender_fullname, | |||||
"comment": doc, | |||||
"link": get_link_to_form(doc.reference_doctype, doc.reference_name, label=parent_doc_label) | |||||
}, | |||||
header=[_('New Mention'), 'orange'] | |||||
) | ) | ||||
def get_comments_from_parent(doc): | def get_comments_from_parent(doc): | ||||
@@ -66,12 +66,16 @@ def send_feedback_request(reference_doctype, reference_name, trigger="Manual", d | |||||
feedback_request, url = get_feedback_request_url(reference_doctype, | feedback_request, url = get_feedback_request_url(reference_doctype, | ||||
reference_name, details.get("recipients"), trigger) | reference_name, details.get("recipients"), trigger) | ||||
feedback_url = frappe.render_template("templates/emails/feedback_request_url.html", { "url": url }) | |||||
feedback_msg = frappe.render_template("templates/emails/feedback_request_url.html", { "url": url }) | |||||
# appending feedback url to message body | # appending feedback url to message body | ||||
details.update({ "message": "{message}{feedback_url}".format( | |||||
message = "{message}{feedback_msg}".format( | |||||
message=details.get("message"), | message=details.get("message"), | ||||
feedback_url=feedback_url) | |||||
feedback_msg=feedback_msg | |||||
) | |||||
details.update({ | |||||
"message": message, | |||||
"header": [details.get('subject'), 'blue'] | |||||
}) | }) | ||||
if details: | if details: | ||||
@@ -858,25 +858,21 @@ def notify_admin_access_to_system_manager(login_manager=None): | |||||
and login_manager.user == "Administrator" | and login_manager.user == "Administrator" | ||||
and frappe.local.conf.notify_admin_access_to_system_manager): | and frappe.local.conf.notify_admin_access_to_system_manager): | ||||
message = """<p> | |||||
{dear_system_manager} <br><br> | |||||
{access_message} <br><br> | |||||
{is_it_unauthorized} | |||||
</p>""".format( | |||||
dear_system_manager=_("Dear System Manager,"), | |||||
access_message=_("""Administrator accessed {0} on {1} via IP Address {2}.""").format( | |||||
"""<a href="{site}" target="_blank">{site}</a>""".format(site=frappe.local.request.host_url), | |||||
"""<b>{date_and_time}</b>""".format(date_and_time=format_datetime(now_datetime(), format_string="medium")), | |||||
frappe.local.request_ip | |||||
), | |||||
is_it_unauthorized=_("If you think this is unauthorized, please change the Administrator password.") | |||||
site = '<a href="{0}" target="_blank">{0}</a>'.format(frappe.local.request.host_url) | |||||
date_and_time = '<b>{0}</b>'.format(format_datetime(now_datetime(), format_string="medium")) | |||||
ip_address = frappe.local.request_ip | |||||
access_message = _('Administrator accessed {0} on {1} via IP Address {2}.').format( | |||||
site, date_and_time, ip_address) | |||||
frappe.sendmail( | |||||
recipients=get_system_managers(), | |||||
subject=_("Administrator Logged In"), | |||||
template="administrator_logged_in", | |||||
args={'access_message': access_message}, | |||||
header=[subject, 'orange'] | |||||
) | ) | ||||
frappe.sendmail(recipients=get_system_managers(), subject=_("Administrator Logged In"), | |||||
message=message) | |||||
def extract_mentions(txt): | def extract_mentions(txt): | ||||
"""Find all instances of @username in the string. | """Find all instances of @username in the string. | ||||
The mentions will be separated by non-word characters or may appear at the start of the string""" | The mentions will be separated by non-word characters or may appear at the start of the string""" | ||||
@@ -7,7 +7,7 @@ import frappe | |||||
import json | import json | ||||
from frappe.utils import (getdate, cint, add_months, date_diff, add_days, | from frappe.utils import (getdate, cint, add_months, date_diff, add_days, | ||||
nowdate, get_datetime_str, cstr, get_datetime, now_datetime) | |||||
nowdate, get_datetime_str, cstr, get_datetime, now_datetime, format_datetime) | |||||
from frappe.model.document import Document | from frappe.model.document import Document | ||||
from frappe.utils.user import get_enabled_system_users | from frappe.utils.user import get_enabled_system_users | ||||
from frappe.desk.reportview import get_filters_cond | from frappe.desk.reportview import get_filters_cond | ||||
@@ -48,20 +48,22 @@ def send_event_digest(): | |||||
for user in get_enabled_system_users(): | for user in get_enabled_system_users(): | ||||
events = get_events(today, today, user.name, for_reminder=True) | events = get_events(today, today, user.name, for_reminder=True) | ||||
if events: | if events: | ||||
text = "" | |||||
frappe.set_user_lang(user.name, user.language) | frappe.set_user_lang(user.name, user.language) | ||||
text = "<h3>" + frappe._("Events In Today's Calendar") + "</h3>" | |||||
for e in events: | for e in events: | ||||
e.starts_on = format_datetime(e.starts_on, 'hh:mm a') | |||||
if e.all_day: | if e.all_day: | ||||
e.starts_on = "All Day" | e.starts_on = "All Day" | ||||
text += "<h4>%(starts_on)s: %(subject)s</h4><p>%(description)s</p>" % e | |||||
text += '<p style="color: #888; font-size: 80%; margin-top: 20px; padding-top: 10px; border-top: 1px solid #eee;">'\ | |||||
+ frappe._("Daily Event Digest is sent for Calendar Events where reminders are set.")+'</p>' | |||||
frappe.sendmail(recipients=user.email, subject=frappe._("Upcoming Events for Today"), | |||||
content = text) | |||||
frappe.sendmail( | |||||
recipients=user.email, | |||||
subject=frappe._("Upcoming Events for Today"), | |||||
template="upcoming_events", | |||||
args={ | |||||
'events': events, | |||||
}, | |||||
header=[frappe._("Events in Today's Calendar"), 'blue'] | |||||
) | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def get_events(start, end, user=None, for_reminder=False, filters=None): | def get_events(start, end, user=None, for_reminder=False, filters=None): | ||||
@@ -76,9 +76,14 @@ def backup_files_and_notify_user(user_email=None): | |||||
backup_files = backup(with_files=True) | backup_files = backup(with_files=True) | ||||
get_downloadable_links(backup_files) | get_downloadable_links(backup_files) | ||||
subject = "File backup is ready" | |||||
message = frappe.render_template('frappe/templates/emails/file_backup_notification.html', backup_files, is_path=True) | |||||
frappe.sendmail(recipients=[user_email], subject=subject, message=message) | |||||
subject = _("File backup is ready") | |||||
frappe.sendmail( | |||||
recipients=[user_email], | |||||
subject=subject, | |||||
template="file_backup_notification", | |||||
args=backup_files, | |||||
header=[subject, 'green'] | |||||
) | |||||
def get_downloadable_links(backup_files): | def get_downloadable_links(backup_files): | ||||
for key in ['backup_path_files', 'backup_path_private_files']: | for key in ['backup_path_files', 'backup_path_private_files']: | ||||
@@ -6,6 +6,7 @@ import frappe | |||||
from frappe.desk.notifications import delete_notification_count_for | from frappe.desk.notifications import delete_notification_count_for | ||||
from frappe.core.doctype.user.user import STANDARD_USERS | from frappe.core.doctype.user.user import STANDARD_USERS | ||||
from frappe.utils import cint | from frappe.utils import cint | ||||
from frappe import _ | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def get_list(arg=None): | def get_list(arg=None): | ||||
@@ -132,11 +133,13 @@ def _notify(contact, txt, subject=None): | |||||
frappe.sendmail(\ | frappe.sendmail(\ | ||||
recipients=contact, | recipients=contact, | ||||
sender= frappe.db.get_value("User", frappe.session.user, "email"), | sender= frappe.db.get_value("User", frappe.session.user, "email"), | ||||
subject=subject or "New Message from " + get_fullname(frappe.session.user), | |||||
message=frappe.get_template("templates/emails/new_message.html").render({ | |||||
subject=subject or _("New Message from {0}").format(get_fullname(frappe.session.user)), | |||||
template="new_message", | |||||
args={ | |||||
"from": get_fullname(frappe.session.user), | "from": get_fullname(frappe.session.user), | ||||
"message": txt, | "message": txt, | ||||
"link": get_url() | "link": get_url() | ||||
})) | |||||
}, | |||||
header=[_('New Message'), 'orange']) | |||||
except frappe.OutgoingEmailError: | except frappe.OutgoingEmailError: | ||||
pass | pass |
@@ -121,6 +121,9 @@ hr { | |||||
.text-small { | .text-small { | ||||
font-size: 10px; | font-size: 10px; | ||||
} | } | ||||
.text-bold { | |||||
font-weight: bold; | |||||
} | |||||
.indicator { | .indicator { | ||||
width: 8px; | width: 8px; | ||||
height: 8px; | height: 8px; | ||||
@@ -152,6 +152,10 @@ hr { | |||||
font-size: @text-small; | font-size: @text-small; | ||||
} | } | ||||
.text-bold { | |||||
font-weight: bold; | |||||
} | |||||
.indicator { | .indicator { | ||||
width: 8px; | width: 8px; | ||||
height: 8px; | height: 8px; | ||||
@@ -0,0 +1,3 @@ | |||||
<p>{{ _("Dear System Manager,") }} </p> | |||||
<p>{{ access_message }}</p> | |||||
<p>{{ _("If you think this is unauthorized, please change the Administrator password.") }}</p> |
@@ -5,5 +5,5 @@ | |||||
<a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=3">★</a> | <a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=3">★</a> | ||||
<a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=4">★</a> | <a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=4">★</a> | ||||
<a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=5">★</a> | <a class="rating" style="font-size: 20px; text-decoration: none; color: grey" href="{{url}}&rating=5">★</a> | ||||
<p>{{ _("1 star being lowest & 5 stars being highest rating") }}</p> | |||||
<div class="more-info">{{ _("1 star being lowest & 5 stars being highest rating") }}</div> | |||||
</div> | </div> |
@@ -1,5 +1,5 @@ | |||||
<h3>New Message</h3> | |||||
<p>You have a new message from: <b>{{ from }}</b></p> | <p>You have a new message from: <b>{{ from }}</b></p> | ||||
<p>{{ message }}</p> | <p>{{ message }}</p> | ||||
<hr> | |||||
<p><a href="{{ link }}">Login and view in Browser</a></p> | |||||
<div class="more-info"> | |||||
<a href="{{ link }}">Login and view in Browser</a> | |||||
</div> |
@@ -0,0 +1,9 @@ | |||||
{% for e in events %} | |||||
<p> | |||||
<span class="text-bold">{{ e.starts_on }}: </span><span>{{ e.subject }}</span> | |||||
<div>{{ e.description or '' }}</div> | |||||
</p> | |||||
{% endfor %} | |||||
<p class="more-info"> | |||||
{{ _("Daily Event Digest is sent for Calendar Events where reminders are set.") }} | |||||
</p> |
@@ -28,8 +28,8 @@ def get_email_from_template(name, args): | |||||
args = args or {} | args = args or {} | ||||
try: | try: | ||||
message = get_template('templates/emails/' + name + '.html').render(args) | message = get_template('templates/emails/' + name + '.html').render(args) | ||||
except TemplateNotFound: | |||||
message = None | |||||
except TemplateNotFound as e: | |||||
raise e | |||||
try: | try: | ||||
text_content = get_template('templates/emails/' + name + '.txt').render(args) | text_content = get_template('templates/emails/' + name + '.txt').render(args) | ||||