From f5fab681578cdb6c33f81758f8ac73f8bb21ab15 Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Mon, 25 Apr 2011 15:41:26 +0530 Subject: [PATCH] [FIX] mail: improvement in get_template_value() for expression evaluation bzr revid: rha@tinyerp.com-20110425101126-serj3us6yt6drjcn --- addons/mail/wizard/email_compose_message.py | 22 ++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/addons/mail/wizard/email_compose_message.py b/addons/mail/wizard/email_compose_message.py index 80c53b398bb..efa87f6a108 100644 --- a/addons/mail/wizard/email_compose_message.py +++ b/addons/mail/wizard/email_compose_message.py @@ -23,6 +23,7 @@ from osv import osv from osv import fields import tools from tools.safe_eval import safe_eval as eval +import re class email_compose_message(osv.osv_memory): _name = 'email.compose.message' @@ -221,11 +222,22 @@ class email_compose_message(osv.osv_memory): def get_template_value(self, cr, uid, message, model, resource_id, context=None): - locals_for_emails = { - 'user' : self.pool.get('res.users').browse(cr, uid, uid, context=context), - 'object' : self.pool.get(model).browse(cr, uid, resource_id), - } - return message and eval(message, {}, locals_for_emails) + if context is None: + context = {} + def merge(match): + exp = str(match.group()[2:-2]).strip() + result = eval(exp, + { + 'user' : self.pool.get('res.users').browse(cr, uid, uid, context=context), + 'context': dict(context), # copy context to prevent side-effects of eval + 'object' : self.pool.get(model).browse(cr, uid, resource_id), + }) + if result in (None, False): + return str("--------") + return tools.ustr(result) + + com = re.compile('(\[\[.+?\]\])') + return message and com.sub(merge, message) email_compose_message()