Commit 9ccd5aa3 authored by Alexandre Boeglin's avatar Alexandre Boeglin

Add a monkeypatch to MailTemplates: as iHotfix forces PageTemplates to be

rendered as utf-8 encoded strings, it is incompatible with Products that
expect them to render as unicode objects.

- this patch is based on MailTemplates 1.1.0
- it will only try to encode() text if it's of type unicode



git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@18331 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent f7ffdcb5
...@@ -54,6 +54,7 @@ from Products.ERP5Type.patches import PersistencePatch ...@@ -54,6 +54,7 @@ from Products.ERP5Type.patches import PersistencePatch
from Products.ERP5Type.patches import PersistentMapping from Products.ERP5Type.patches import PersistentMapping
from Products.ERP5Type.patches import DateTimePatch from Products.ERP5Type.patches import DateTimePatch
from Products.ERP5Type.patches import PythonScript from Products.ERP5Type.patches import PythonScript
from Products.ERP5Type.patches import MailTemplates
# for python2.3 compatibility # for python2.3 compatibility
import threading import threading
......
#!/usr/bin/python
# Copyright (c) 2005 Simplistix Ltd
#
# This Software is released under the MIT License:
# http://www.opensource.org/licenses/mit-license.html
# See license.txt for more details.
"""
this patch is based on MailTemplates 1.1.0
it will only try to encode() text if it's of type unicode
"""
try:
from Products.MailTemplates import BaseMailTemplate
except ImportError:
BaseMailTemplate = None
if BaseMailTemplate is not None:
def _process_utf8(self,kw):
# sort out what encoding we're going to use
encoding = kw.get('encoding',
self.getProperty('encoding',
BaseMailTemplate.default_encoding))
text = self.__class__.__bases__[1].__call__(self,**kw)
if not self.html() and isinstance(text, unicode):
text = text.encode(encoding,'replace')
# now turn the result into a MIMEText object
msg = BaseMailTemplate.MIMEText(
text.replace('\r',''),
self.content_type.split('/')[1],
encoding
)
# sort out what headers and addresses we're going to use
headers = {}
values = {}
# headers from the headers property
for header in getattr(self,'headers',()):
name,value = header.split(':',1)
headers[name]=value
# headers from the headers parameter
headers_param = kw.get('headers',{})
headers.update(headers_param)
# values and some specific headers
for key,header in (('mfrom','From'),
('mto','To'),
('mcc','Cc'),
('mbcc','Bcc'),
('subject','Subject')):
value = kw.get(key,
headers_param.get(header,
getattr(self,
key,
headers.get(header))))
if value is not None:
values[key]=value
# turn some sequences in coma-seperated strings
if isinstance(value,tuple) or isinstance(value,list):
value = ', '.join(value)
# make sure we have no unicode headers
if isinstance(value,unicode):
value = value.encode(encoding)
headers[header]=value
# check required values have been supplied
errors = []
for param in ('mfrom','mto','subject'):
if not values.get(param):
errors.append(param)
if errors:
raise TypeError(
'The following parameters were required by not specified: '+(
', '.join(errors)
))
# add date header
headers['Date']=BaseMailTemplate.DateTime().rfc822()
# turn headers into an ordered list for predictable header order
keys = headers.keys()
keys.sort()
return msg,values,[(key,headers[key]) for key in keys]
BaseMailTemplate.BaseMailTemplate._process = _process_utf8
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment