api: use correct DATE-TIME type for datetime values in ics (#64881)
This commit is contained in:
parent
2ab6ed3a96
commit
5c0201e722
|
@ -102,6 +102,7 @@ def ics_data(local_user):
|
|||
formdef.fields = [
|
||||
fields.StringField(id='0', label='foobar', varname='foobar'),
|
||||
fields.StringField(id='1', label='foobar2', varname='foobar2'),
|
||||
fields.DateField(id='2', type='date', label='date', varname='date'),
|
||||
]
|
||||
formdef.digest_templates = {'default': 'plöp {{ form_var_foobar }} plÔp'}
|
||||
formdef.store()
|
||||
|
@ -114,6 +115,7 @@ def ics_data(local_user):
|
|||
formdata = data_class()
|
||||
formdata.data = {'0': (date + datetime.timedelta(days=i)).strftime('%Y-%m-%d %H:%M')}
|
||||
formdata.data['1'] = (date + datetime.timedelta(days=i, minutes=i + 1)).strftime('%Y-%m-%d %H:%M')
|
||||
formdata.data['2'] = (datetime.date(2014, 1, 20) + datetime.timedelta(days=i)).timetuple()
|
||||
formdata.user_id = local_user.id
|
||||
formdata.just_created()
|
||||
if i % 3 == 0:
|
||||
|
@ -2655,6 +2657,20 @@ def test_api_ics_formdata_custom_view(pub, local_user, ics_data):
|
|||
assert resp.text.count('DTEND') == 10
|
||||
|
||||
|
||||
def test_api_ics_formdata_dtstart_type(pub, local_user, ics_data):
|
||||
role = pub.role_class.select()[0]
|
||||
local_user.roles = [role.id]
|
||||
local_user.store()
|
||||
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/ics/date/date/', user=local_user))
|
||||
assert 'DTSTART;VALUE=DATE:20140123\r\n' in resp.text
|
||||
assert 'DTEND;VALUE=DATE:20140123\r\n' in resp.text
|
||||
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/ics/foobar/foobar/', user=local_user))
|
||||
assert 'DTSTART;VALUE=DATE-TIME:20140123T120000\r\n' in resp.text
|
||||
assert 'DTEND;VALUE=DATE-TIME:20140123T120000\r\n' in resp.text
|
||||
|
||||
|
||||
def test_api_invalid_http_basic_auth(pub, local_user, admin_user, ics_data):
|
||||
app = get_app(pub)
|
||||
app.get(
|
||||
|
|
|
@ -2549,11 +2549,15 @@ class FormPage(Directory):
|
|||
|
||||
start_date_field_id = None
|
||||
end_date_field_id = None
|
||||
start_date_field_type = None
|
||||
end_date_field_type = None
|
||||
for field in formdef.get_all_fields():
|
||||
if getattr(field, 'varname', None) == start_date_field_varname:
|
||||
start_date_field_id = field.id
|
||||
start_date_field_type = field.type
|
||||
if end_date_field_varname and getattr(field, 'varname', None) == end_date_field_varname:
|
||||
end_date_field_id = field.id
|
||||
end_date_field_type = field.type
|
||||
|
||||
if not start_date_field_id:
|
||||
raise errors.TraversalError()
|
||||
|
@ -2576,9 +2580,13 @@ class FormPage(Directory):
|
|||
continue
|
||||
try:
|
||||
dtstart = make_datetime(formdata.data[start_date_field_id])
|
||||
if start_date_field_type == 'date':
|
||||
dtstart = dtstart.date()
|
||||
dtend = None
|
||||
if end_date_field_id and formdata.data.get(end_date_field_id):
|
||||
dtend = make_datetime(formdata.data[end_date_field_id])
|
||||
if end_date_field_type == 'date':
|
||||
dtend = dtend.date()
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
|
@ -2593,9 +2601,16 @@ class FormPage(Directory):
|
|||
summary += ' - %s' % force_text(formdata.default_digest, charset)
|
||||
vevent.add('summary').value = summary
|
||||
vevent.add('dtstart').value = dtstart
|
||||
if isinstance(dtstart, datetime.datetime):
|
||||
vevent.dtstart.value_param = 'DATE-TIME'
|
||||
else:
|
||||
vevent.dtstart.value_param = 'DATE'
|
||||
if dtend:
|
||||
vevent.add('dtend').value = dtend
|
||||
vevent.dtstart.value_param = 'DATE'
|
||||
if isinstance(dtend, datetime.datetime):
|
||||
vevent.dtend.value_param = 'DATE-TIME'
|
||||
else:
|
||||
vevent.dtend.value_param = 'DATE'
|
||||
backoffice_url = formdata.get_url(backoffice=True)
|
||||
vevent.add('url').value = backoffice_url
|
||||
form_name = force_text(formdef.name, charset)
|
||||
|
|
Loading…
Reference in New Issue