Projet

Général

Profil

0001-ics-allow-description-rendering-in-custom-templates-.patch

Serghei Mihai (congés, retour 15/05), 04 octobre 2017 16:38

Télécharger (4,5 ko)

Voir les différences:

Subject: [PATCH] ics: allow description rendering in custom templates (#18406)

 tests/test_api.py                     | 12 +++++++++++-
 wcs/backoffice/management.py          |  6 ++++++
 wcs/templates/wcs/ics/description.txt |  1 +
 3 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 wcs/templates/wcs/ics/description.txt
tests/test_api.py
1573 1573
    formdef.workflow_roles = {'_receiver': role.id}
1574 1574
    formdef.fields = [
1575 1575
        fields.StringField(id='0', label='foobar', varname='foobar'),
1576
        fields.StringField(id='1', label='text', varname='text')
1576 1577
        ]
1577 1578
    formdef.store()
1578 1579

  
......
1582 1583
    date = datetime.datetime(2014, 1, 20, 12, 00)
1583 1584
    for i in range(30):
1584 1585
        formdata = data_class()
1585
        formdata.data = {'0': (date + datetime.timedelta(days=i)).strftime('%Y-%m-%d %H:%M')}
1586
        formdata.data = {'0': (date + datetime.timedelta(days=i)).strftime('%Y-%m-%d %H:%M'),
1587
                         '1': 'valu\xc3\xa9'}
1586 1588
        formdata.user_id = local_user.id
1587 1589
        formdata.just_created()
1588 1590
        if i%3 == 0:
......
1603 1605
    local_user.roles = [role.id]
1604 1606
    local_user.store()
1605 1607

  
1608
    # create a temporary custom template for the form 'test'
1609
    custom_template_filename = os.path.join(os.getcwd(), 'wcs/templates/wcs/ics/description-test.txt')
1610
    with open(custom_template_filename, 'w') as custom_template:
1611
        custom_template.write('{{ form.var_text }}')
1606 1612
    # check it gets the data
1607 1613
    resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar', user=local_user))
1614
    os.unlink(custom_template_filename)
1608 1615
    assert resp.headers['content-type'] == 'text/calendar; charset=utf-8'
1609 1616
    assert resp.body.count('BEGIN:VEVENT') == 10
1617
    assert resp.body.count('DESCRIPTION') == 10
1618
    assert resp.body.count('DESCRIPTION:valué') == 10
1610 1619

  
1611 1620
    # check with a filter
1612 1621
    resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar?filter=done', user=local_user))
1613 1622
    assert resp.body.count('BEGIN:VEVENT') == 20
1623
    assert resp.body.count('DESCRIPTION') == 20
1614 1624

  
1615 1625
    # check 404 on erroneous field var
1616 1626
    resp = get_app(pub).get(sign_uri('/api/forms/test/ics/xxx', user=local_user), status=404)
wcs/backoffice/management.py
46 46
from qommon import errors
47 47
from qommon import ezt
48 48
from qommon import ods
49
from qommon import template
49 50
from qommon.form import *
50 51
from qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
51 52
        Intersects, ILike, FtsMatch, Contains, Null)
......
59 60
from wcs.formdef import FormDef
60 61
from wcs.roles import logged_users_role
61 62

  
63
from django.template import RequestContext
64

  
62 65
from .submission import FormFillPage
63 66

  
64 67
def geojson_formdatas(formdatas, geoloc_key='base', fields=None):
......
1616 1619
        fields = self.get_fields_from_query()
1617 1620
        criterias = self.get_criterias_from_query()
1618 1621
        query = get_request().form.get('q')
1622
        template_names = ('wcs/ics/description-%s.txt' % formdef.url_name, 'wcs/ics/description.txt')
1619 1623

  
1620 1624
        class IcsDirectory(Directory):
1621 1625
            # ics/<component> with <component> being the identifier (varname)
......
1647 1651
                    vevent.add('dtstart').value = make_datetime(formdata.data[datefield_field_id])
1648 1652
                    vevent.dtstart.value_param = 'DATE'
1649 1653
                    vevent.add('url').value = formdata.get_url(backoffice=True)
1654
                    context = RequestContext(get_request().django_request, {'form': formdata.get_as_dict()})
1655
                    vevent.add('description').value = unicode(str(template.render(template_names, context)), charset)
1650 1656
                    cal.add(vevent)
1651 1657

  
1652 1658
                get_response().set_content_type('text/calendar')
wcs/templates/wcs/ics/description.txt
1

  
0
-