@@ -51,6 +51,13 @@ def _(msg, lang=None): | |||||
return get_full_dict(local.lang).get(msg) or msg | return get_full_dict(local.lang).get(msg) or msg | ||||
def as_unicode(text, encoding='utf-8'): | |||||
'''Convert to unicode if required''' | |||||
if text and not isinstance(text, unicode): | |||||
return unicode(text, encoding) | |||||
else: | |||||
return text or '' | |||||
def get_lang_dict(fortype, name=None): | def get_lang_dict(fortype, name=None): | ||||
"""Returns the translated language dict for the given type and name. | """Returns the translated language dict for the given type and name. | ||||
@@ -347,10 +347,10 @@ class EmailAccount(Document): | |||||
parent = frappe.new_doc(self.append_to) | parent = frappe.new_doc(self.append_to) | ||||
if self.subject_field: | if self.subject_field: | ||||
parent.set(self.subject_field, email.subject) | |||||
parent.set(self.subject_field, frappe.as_unicode(email.subject)) | |||||
if self.sender_field: | if self.sender_field: | ||||
parent.set(self.sender_field, email.from_email) | |||||
parent.set(self.sender_field, frappe.as_unicode(email.from_email)) | |||||
parent.flags.ignore_mandatory = True | parent.flags.ignore_mandatory = True | ||||
@@ -412,9 +412,6 @@ h6.uppercase, | |||||
.frappe-control pre { | .frappe-control pre { | ||||
white-space: pre-wrap; | white-space: pre-wrap; | ||||
} | } | ||||
.frappe-control:last-child { | |||||
margin-bottom: 0px; | |||||
} | |||||
.hide-control { | .hide-control { | ||||
display: none !important; | display: none !important; | ||||
} | } | ||||
@@ -507,17 +504,20 @@ select.form-control { | |||||
.form-page .form-section { | .form-page .form-section { | ||||
padding: 0px 15px; | padding: 0px 15px; | ||||
} | } | ||||
.form-page .frappe-control { | |||||
.frappe-control.form-page { | |||||
padding: 7px 15px; | padding: 7px 15px; | ||||
border-bottom: 1px solid #EBEFF2; | border-bottom: 1px solid #EBEFF2; | ||||
margin: 0px -15px; | margin: 0px -15px; | ||||
} | } | ||||
.form-page .frappe-control .link-btn { | |||||
.frappe-control.form-page .link-btn { | |||||
top: -2px; | top: -2px; | ||||
} | } | ||||
.form-page .frappe-control .like-disabled-input { | |||||
.frappe-control.form-page .like-disabled-input { | |||||
min-height: 0px !important; | min-height: 0px !important; | ||||
} | } | ||||
.frappe-control.form-page:last-child { | |||||
margin-bottom: 0px; | |||||
} | |||||
.form-page .frappe-control:last-child { | .form-page .frappe-control:last-child { | ||||
border-bottom: 0px; | border-bottom: 0px; | ||||
} | } | ||||
@@ -518,10 +518,6 @@ h6.uppercase, .h6.uppercase { | |||||
pre { | pre { | ||||
white-space: pre-wrap; | white-space: pre-wrap; | ||||
} | } | ||||
&:last-child { | |||||
margin-bottom: 0px; | |||||
} | |||||
} | } | ||||
.hide-control { | .hide-control { | ||||
@@ -647,7 +643,7 @@ select.form-control { | |||||
padding: 0px 15px; | padding: 0px 15px; | ||||
} | } | ||||
.frappe-control { | |||||
.frappe-control& { | |||||
padding: 7px 15px; | padding: 7px 15px; | ||||
border-bottom: 1px solid @light-border-color; | border-bottom: 1px solid @light-border-color; | ||||
margin: 0px -15px; | margin: 0px -15px; | ||||
@@ -659,6 +655,10 @@ select.form-control { | |||||
.like-disabled-input { | .like-disabled-input { | ||||
min-height: 0px !important; | min-height: 0px !important; | ||||
} | } | ||||
&:last-child { | |||||
margin-bottom: 0px; | |||||
} | |||||
} | } | ||||
.frappe-control:last-child { | .frappe-control:last-child { | ||||
@@ -118,6 +118,7 @@ def random_string(length): | |||||
from random import choice | from random import choice | ||||
return ''.join([choice(string.letters + string.digits) for i in range(length)]) | return ''.join([choice(string.letters + string.digits) for i in range(length)]) | ||||
def has_gravatar(email): | def has_gravatar(email): | ||||
'''Returns gravatar url if user has set an avatar at gravatar.com''' | '''Returns gravatar url if user has set an avatar at gravatar.com''' | ||||
if (frappe.flags.in_import | if (frappe.flags.in_import | ||||
@@ -127,10 +128,7 @@ def has_gravatar(email): | |||||
# since querying gravatar for every item will be slow | # since querying gravatar for every item will be slow | ||||
return '' | return '' | ||||
if not isinstance(email, unicode): | |||||
email = unicode(email, 'utf-8') | |||||
hexdigest = md5.md5(email).hexdigest() | |||||
hexdigest = md5.md5(frappe.as_unicode(email)).hexdigest() | |||||
gravatar_url = "https://secure.gravatar.com/avatar/{hash}?d=404&s=200".format(hash=hexdigest) | gravatar_url = "https://secure.gravatar.com/avatar/{hash}?d=404&s=200".format(hash=hexdigest) | ||||
try: | try: | ||||