From 0cfd2e9136642ee514af0f17675d42f248e404b2 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Wed, 4 Oct 2017 13:51:54 +0200 Subject: [PATCH] ics: allow description rendering in custom templates (#18406) --- tests/test_api.py | 6 +++++- wcs/backoffice/management.py | 6 ++++++ wcs/templates/wcs/ics/description.txt | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 wcs/templates/wcs/ics/description.txt diff --git a/tests/test_api.py b/tests/test_api.py index 43ac6367..25309849 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1573,6 +1573,7 @@ def ics_data(local_user): formdef.workflow_roles = {'_receiver': role.id} formdef.fields = [ fields.StringField(id='0', label='foobar', varname='foobar'), + fields.StringField(id='1', label='text', varname='text') ] formdef.store() @@ -1582,7 +1583,8 @@ def ics_data(local_user): date = datetime.datetime(2014, 1, 20, 12, 00) for i in range(30): formdata = data_class() - formdata.data = {'0': (date + datetime.timedelta(days=i)).strftime('%Y-%m-%d %H:%M')} + formdata.data = {'0': (date + datetime.timedelta(days=i)).strftime('%Y-%m-%d %H:%M'), + '1': 'valu\xc3\xa9 %s' % i} formdata.user_id = local_user.id formdata.just_created() if i%3 == 0: @@ -1607,10 +1609,12 @@ def test_api_ics_formdata(pub, local_user, ics_data): resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar', user=local_user)) assert resp.headers['content-type'] == 'text/calendar; charset=utf-8' assert resp.body.count('BEGIN:VEVENT') == 10 + assert resp.body.count('DESCRIPTION') == 10 # check with a filter resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar?filter=done', user=local_user)) assert resp.body.count('BEGIN:VEVENT') == 20 + assert resp.body.count('DESCRIPTION') == 20 # check 404 on erroneous field var resp = get_app(pub).get(sign_uri('/api/forms/test/ics/xxx', user=local_user), status=404) diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index eb1c8b22..0f1f17a9 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -46,6 +46,7 @@ import qommon.sms from qommon import errors from qommon import ezt from qommon import ods +from qommon import template from qommon.form import * from qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or, Intersects, ILike, FtsMatch, Contains, Null) @@ -59,6 +60,8 @@ from wcs.formdata import FormData from wcs.formdef import FormDef from wcs.roles import logged_users_role +from django.template import RequestContext + from .submission import FormFillPage def geojson_formdatas(formdatas, geoloc_key='base', fields=None): @@ -1616,6 +1619,7 @@ class FormPage(Directory): fields = self.get_fields_from_query() criterias = self.get_criterias_from_query() query = get_request().form.get('q') + template_names = ('wcs/ics/description/%s.txt' % formdef.url_name, 'wcs/ics/description.txt') class IcsDirectory(Directory): # ics/ with being the identifier (varname) @@ -1647,6 +1651,8 @@ class FormPage(Directory): vevent.add('dtstart').value = make_datetime(formdata.data[datefield_field_id]) vevent.dtstart.value_param = 'DATE' vevent.add('url').value = formdata.get_url(backoffice=True) + context = RequestContext(get_request().django_request, {'form': formdata.get_as_dict()}) + vevent.add('description').value = unicode(template.render(template_names, context)) cal.add(vevent) get_response().set_content_type('text/calendar') diff --git a/wcs/templates/wcs/ics/description.txt b/wcs/templates/wcs/ics/description.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/wcs/templates/wcs/ics/description.txt @@ -0,0 +1 @@ + -- 2.14.2