From 7c6fc3e4d713b02c19b3caee960f5d68e8c22f39 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 13 Oct 2015 21:55:07 +0200 Subject: [PATCH 1/3] workflows: factorize context building in template_on_formdata (#4292) --- wcs/workflows.py | 60 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/wcs/workflows.py b/wcs/workflows.py index dd4ec5b..2f3548f 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -1398,6 +1398,37 @@ class SendmailWorkflowStatusItem(WorkflowStatusItem): register_item_class(SendmailWorkflowStatusItem) +def template_context_on_formdata(formdata=None, process=None): + ctx = {} + ctx.update(get_publisher().substitutions.get_context_variables()) + if formdata: + ctx['url'] = formdata.get_url() + ctx['url_status'] = '%sstatus' % formdata.get_url() + ctx['details'] = formdata.formdef.get_detailed_email_form(formdata, ctx['url']) + ctx['name'] = formdata.formdef.name + ctx['number'] = formdata.id + if formdata.evolution and formdata.evolution[-1].comment: + ctx['comment'] = formdata.evolution[-1].comment + else: + ctx['comment'] = '' + ctx.update(formdata.get_as_dict()) + + # compatibility vars + ctx['before'] = ctx.get('form_previous_status') + ctx['after'] = ctx.get('form_status') + ctx['evolution'] = ctx.get('form_evolution') + + if process: + for key in ctx: + ctx[key] = process(ctx[key]) + + charset = get_publisher().site_charset + for k, v in ctx.items(): + if isinstance(v, unicode): + ctx[k] = v.encode(charset, 'ignore') + return ctx + + def template_on_html_string(template, process=None): return template_on_formdata(None, template, process=process, base_format=ezt.FORMAT_HTML) @@ -1408,39 +1439,14 @@ def template_on_formdata(formdata=None, template=None, process=None, assert template is not None if not '[' in template: return template - dict = {} - dict.update(get_publisher().substitutions.get_context_variables()) - if formdata: - dict['url'] = formdata.get_url() - dict['url_status'] = '%sstatus' % formdata.get_url() - dict['details'] = formdata.formdef.get_detailed_email_form(formdata, dict['url']) - dict['name'] = formdata.formdef.name - dict['number'] = formdata.id - if formdata.evolution and formdata.evolution[-1].comment: - dict['comment'] = formdata.evolution[-1].comment - else: - dict['comment'] = '' - dict.update(formdata.get_as_dict()) - - # compatibility vars - dict['before'] = dict.get('form_previous_status') - dict['after'] = dict.get('form_status') - dict['evolution'] = dict.get('form_evolution') - - if process: - for key in dict: - dict[key] = process(dict[key]) - charset = get_publisher().site_charset - for k, v in dict.items(): - if isinstance(v, unicode): - dict[k] = v.encode(charset, 'ignore') + ctx = template_context_on_formdata(formdata, process=process) processor = ezt.Template(compress_whitespace=False) processor.parse(template or '', base_format=base_format) fd = StringIO() - processor.generate(fd, dict) + processor.generate(fd, ctx) return fd.getvalue() -- 2.1.4