From 9aceee2623fbe68bac32d15163d14d0403df3551 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 28 May 2015 02:21:58 -0400 Subject: [PATCH 1/4] [edge case] recipients can be blank when email is received as BCC. Fixes frappe/erpnext#3371. --- frappe/core/doctype/communication/communication.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 1e3b6df602..a6781448d7 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import import frappe import json from email.utils import formataddr, parseaddr -from frappe.utils import get_url, get_formatted_email +from frappe.utils import get_url, get_formatted_email, cstr from frappe.utils.file_manager import get_file import frappe.email.smtp from frappe import _ @@ -122,7 +122,8 @@ class Communication(Document): def get_recipients(self, except_recipient=False): """Build a list of users to which this email should go to""" - original_recipients = [s.strip() for s in self.recipients.split(",")] + # [EDGE CASE] self.recipients can be None when an email is sent as BCC + original_recipients = [s.strip() for s in cstr(self.recipients).split(",")] recipients = original_recipients[:] if self.reference_doctype and self.reference_name: From 6d35a8c3913baa343b54b173985a7ea97a5545d7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 29 May 2015 15:52:40 +0530 Subject: [PATCH 2/4] [fixes] [timezone] handle system timezone not set for old accounts, assume user timezone --- frappe/public/js/frappe/form/control.js | 3 ++- frappe/public/js/frappe/misc/datetime.js | 22 ++++++++++++++++----- frappe/public/js/frappe/misc/pretty_date.js | 6 +++++- frappe/templates/emails/standard.html | 2 +- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index 20b17f4aa8..0210fe7d9a 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -29,7 +29,8 @@ frappe.ui.form.Control = Class.extend({ this.make_wrapper(); this.$wrapper .addClass("ui-front") - .attr("data-fieldtype", this.df.fieldtype); + .attr("data-fieldtype", this.df.fieldtype) + .attr("data-fieldname", this.df.fieldname); this.wrapper = this.$wrapper.get(0); this.wrapper.fieldobj = this; // reference for event handlers }, diff --git a/frappe/public/js/frappe/misc/datetime.js b/frappe/public/js/frappe/misc/datetime.js index a3d3e46608..613a96b7ef 100644 --- a/frappe/public/js/frappe/misc/datetime.js +++ b/frappe/public/js/frappe/misc/datetime.js @@ -9,17 +9,29 @@ frappe.provide("frappe.datetime"); $.extend(frappe.datetime, { convert_to_user_tz: function(date) { - return moment.tz(date, sys_defaults.time_zone).utc() - .utcOffset(moment.user_utc_offset).format(moment.defaultDatetimeFormat); + if(sys_defaults.time_zone) { + return moment.tz(date, sys_defaults.time_zone).utc() + .utcOffset(moment.user_utc_offset).format(moment.defaultDatetimeFormat); + } else { + return moment(date).format(moment.defaultDatetimeFormat); + } }, convert_to_system_tz: function(date) { - return moment(date).utc() - .utcOffset(moment.system_utc_offset).format(moment.defaultDatetimeFormat); + if(sys_defaults.time_zone) { + return moment(date).utc() + .utcOffset(moment.system_utc_offset).format(moment.defaultDatetimeFormat); + } else { + return moment(date).format(moment.defaultDatetimeFormat); + } }, is_timezone_same: function() { - return moment().tz(sys_defaults.time_zone).utcOffset() === moment().utcOffset(); + if(sys_defaults.time_zone) { + return moment().tz(sys_defaults.time_zone).utcOffset() === moment().utcOffset(); + } else { + return true; + } }, str_to_obj: function(d) { diff --git a/frappe/public/js/frappe/misc/pretty_date.js b/frappe/public/js/frappe/misc/pretty_date.js index 19e94e2451..1d0a8bee43 100644 --- a/frappe/public/js/frappe/misc/pretty_date.js +++ b/frappe/public/js/frappe/misc/pretty_date.js @@ -1,7 +1,11 @@ function prettyDate(time, mini){ if(moment) { - var ret = moment.tz(time, sys_defaults.time_zone).fromNow(mini); + if(sys_defaults.time_zone) { + var ret = moment.tz(time, sys_defaults.time_zone).fromNow(mini); + } else { + var ret = moment(time).fromNow(mini); + } if(mini) { if(ret === "a few seconds") { ret = "now"; diff --git a/frappe/templates/emails/standard.html b/frappe/templates/emails/standard.html index bd9c9b74a3..fa8981a37b 100644 --- a/frappe/templates/emails/standard.html +++ b/frappe/templates/emails/standard.html @@ -18,8 +18,8 @@ data-email-footer="true"> {{ footer }} - + From 6840e894eccecba0c2e32245fc78b614c200319f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 29 May 2015 15:55:00 +0530 Subject: [PATCH 3/4] [fix] [minor] print permission error --- frappe/model/document.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/model/document.py b/frappe/model/document.py index 8115e27a82..547bdc6932 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -147,7 +147,9 @@ class Document(BaseDocument): def raise_no_permission_to(self, perm_type): """Raise `frappe.PermissionError`.""" - raise frappe.PermissionError("No permission to {} {} {}".format(perm_type, self.doctype, self.name or "")) + msg = _("No permission to {0} {1} {2}".format(perm_type, self.doctype, self.name or "")) + frappe.msgprint(msg) + raise frappe.PermissionError(msg) def insert(self, ignore_permissions=None): """Insert the document in the database (as a new document). From 9c770a3016f0ccd382f7bddc8aac124b7c9f543f Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Fri, 29 May 2015 16:26:04 +0600 Subject: [PATCH 4/4] bumped to version 5.0.15 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index b6f376d1b5..85a6195a1e 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "5.0.14" +__version__ = "5.0.15" diff --git a/frappe/hooks.py b/frappe/hooks.py index dfb3ec379e..93b2f978f5 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -4,7 +4,7 @@ app_title = "Frappe Framework" app_publisher = "Frappe Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "octicon octicon-circuit-board" -app_version = "5.0.14" +app_version = "5.0.15" app_color = "orange" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index 78a2cbd230..d7d75922be 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = "5.0.14" +version = "5.0.15" with open("requirements.txt", "r") as f: install_requires = f.readlines()