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
from Products.ERP5Type.patches import PersistentMapping
from Products.ERP5Type.patches import DateTimePatch
from Products.ERP5Type.patches import PythonScript
from Products.ERP5Type.patches import MailTemplates
# for python2.3 compatibility
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