Projet

Général

Profil

0001-ics-add-formdata-digest-to-ics-export-33152.patch

Nicolas Roche, 09 avril 2020 17:32

Télécharger (4,55 ko)

Voir les différences:

Subject: [PATCH] ics: add formdata digest to ics export (#33152)

 tests/test_api.py            | 9 +++++++++
 wcs/backoffice/management.py | 7 ++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)
tests/test_api.py
2253 2253
    formdef = FormDef()
2254 2254
    formdef.url_name = 'test'
2255 2255
    formdef.name = 'testé'
2256 2256
    formdef.workflow_roles = {'_receiver': role.id}
2257 2257
    formdef.fields = [
2258 2258
        fields.StringField(id='0', label='foobar', varname='foobar'),
2259 2259
        fields.StringField(id='1', label='foobar2', varname='foobar2'),
2260 2260
        ]
2261
    formdef.digest_template = 'plop {{ form_var_foobar }} plop'
2261 2262
    formdef.store()
2262 2263

  
2263 2264
    data_class = formdef.data_class()
2264 2265
    data_class.wipe()
2265 2266

  
2266 2267
    date = datetime.datetime(2014, 1, 20, 12, 00)
2267 2268
    for i in range(30):
2268 2269
        formdata = data_class()
......
2303 2304
    # check that description contains form name, display id, workflow status,
2304 2305
    # backoffice url and attached user
2305 2306
    pattern = re.compile(u'DESCRIPTION:testé \| 1-\d+ \| New', re.MULTILINE)
2306 2307
    m = pattern.findall(resp.text)
2307 2308
    assert len(m) == 10
2308 2309
    assert resp.text.count('Jean Darmette') == 10
2309 2310
    assert resp.text.count('DTSTART') == 10
2310 2311

  
2312
    # check formdata digest summary and description contains the formdata digest
2313
    pattern = re.compile(
2314
        u'SUMMARY:testé #1-\d+ : plop \d{4}-\d{2}-\d{2} \d{2}:\d{2} plop',
2315
        re.MULTILINE)
2316
    m = pattern.findall(resp.text)
2317
    assert len(m) == 10
2318
    assert resp.text.count('plop') == 40
2319

  
2311 2320
    # check with a filter
2312 2321
    resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar?filter=done', user=local_user))
2313 2322
    assert resp.text.count('BEGIN:VEVENT') == 20
2314 2323
    pattern = re.compile(u'DESCRIPTION:testé \| 1-\d+ \| Finished', re.MULTILINE)
2315 2324
    m = pattern.findall(resp.text)
2316 2325
    assert len(m) == 20
2317 2326
    assert resp.text.count('Jean Darmette') == 20
2318 2327

  
wcs/backoffice/management.py
1951 1951
                for formdata in formdatas:
1952 1952
                    if not formdata.data.get(start_date_field_id):
1953 1953
                        continue
1954 1954
                    vevent = vobject.newFromBehavior('vevent')
1955 1955
                    vevent.add('uid').value = '%s-%s-%s' % (
1956 1956
                            get_request().get_server().lower(),
1957 1957
                            formdef.url_name,
1958 1958
                            formdata.id)
1959
                    vevent.add('summary').value = force_text(formdata.get_display_name(), charset)
1959
                    summary = force_text(formdata.get_display_name(), charset)
1960
                    if formdata.digest:
1961
                        summary += ' : %s' % formdata.digest
1962
                    vevent.add('summary').value = summary
1960 1963
                    vevent.add('dtstart').value = make_datetime(formdata.data[start_date_field_id])
1961 1964
                    if end_date_field_id and formdata.data.get(end_date_field_id):
1962 1965
                        vevent.add('dtend').value = make_datetime(formdata.data[end_date_field_id])
1963 1966
                    vevent.dtstart.value_param = 'DATE'
1964 1967
                    backoffice_url = formdata.get_url(backoffice=True)
1965 1968
                    vevent.add('url').value = backoffice_url
1966 1969
                    form_name = force_text(formdef.name, charset)
1967 1970
                    status_name = force_text(formdata.get_status_label(), charset)
1968 1971
                    description = '%s | %s | %s\n'  % (form_name, formdata.get_display_id(), status_name)
1969 1972
                    description += backoffice_url
1970 1973
                    # TODO: improve performance by loading all users in one
1971 1974
                    # single query before the loop
1972 1975
                    if formdata.user:
1973 1976
                        description += '\n%s' % force_text(formdata.user.get_display_name(), charset)
1977
                    if formdata.digest:
1978
                        description += '\n\n%s' % formdata.digest
1974 1979
                    vevent.add('description').value = description
1975 1980
                    cal.add(vevent)
1976 1981

  
1977 1982
                get_response().set_content_type('text/calendar')
1978 1983
                return cal.serialize()
1979 1984

  
1980 1985
        return IcsDirectory()
1981 1986

  
1982
-