diff --git a/openslides/agenda/signals.py b/openslides/agenda/signals.py index 9f90b5bf0..b4286aa27 100644 --- a/openslides/agenda/signals.py +++ b/openslides/agenda/signals.py @@ -10,10 +10,13 @@ :license: GNU GPL, see LICENSE for more details. """ +from datetime import datetime + from django.dispatch import receiver from django import forms from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _ from django.template.loader import render_to_string +from django.core.exceptions import ValidationError from openslides.config.signals import config_signal from openslides.config.api import config, ConfigVariable, ConfigPage @@ -26,6 +29,13 @@ from openslides.projector.api import (get_active_slide, get_slide_from_sid, from .models import Speaker, Item +def validate_start_time(value): + try: + datetime.strptime(value, '%d.%m.%Y %H:%M') + except ValueError: + raise ValidationError(_('Invalid input.')) + + # TODO: Reinsert the datepicker scripts in the template @receiver(config_signal, dispatch_uid='setup_agenda_config_page') @@ -38,6 +48,7 @@ def setup_agenda_config_page(sender, **kwargs): name='agenda_start_event_date_time', default_value='', form_field=forms.CharField( + validators=[validate_start_time, ], widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M'), required=False, label=_('Begin of event'), diff --git a/tests/agenda/tests.py b/tests/agenda/tests.py index 77fcbbc8c..5092e6fb0 100644 --- a/tests/agenda/tests.py +++ b/tests/agenda/tests.py @@ -216,3 +216,12 @@ class ConfigTest(TestCase): response = self.client.get('/config/agenda/') self.assertContains(response, 'timepicker.css', status_code=200) self.assertContains(response, 'jquery-ui-timepicker-addon.min.js', status_code=200) + + def test_wrong_input(self): + response = self.client.post( + '/config/agenda/', + {'agenda_start_event_date_time': 'wrong_format', + 'agenda_show_last_speakers': '3'}) + self.assertFormError(response, form='form', + field='agenda_start_event_date_time', + errors='Invalid input.')