class CalendarMessageForm(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) from_name = fields.CharField(required=True, initial='ClubLink') reply_to = fields.EmailField(required=True, initial='*****@*****.**') subject = fields.CharField(required=True) message = fields.TextareaField(required=True)
class SnippetsForm(forms.Form): title = fields.CharField(required=False) keywords = fields.CharField(required=False) description = fields.TextareaField(required=False) headline = fields.CharField(required=False) button = fields.CharField(required=False) clickthrough = fields.CharField(required=False) def __init__(self, page, locale, *args, **kwargs): self.page = page if 'prefix' not in kwargs: kwargs['prefix'] = locale template = PAGE_TEMPLATES.get(self.page.full_path, PAGE_TEMPLATES['*']) template_snippets = template.get('snippets', PAGE_TEMPLATES['*']['snippets']) kw_initial = kwargs.get('initial', {}) kwargs['initial'] = { 'title': self.page.get_snippet('title', fallback=False, locale=locale), 'keywords': self.page.get_snippet('keywords', fallback=False, locale=locale), 'description': self.page.get_snippet('description', fallback=False, locale=locale), 'headline': self.page.get_snippet('headline', fallback=False, locale=locale), 'button': self.page.get_snippet('button', fallback=False, locale=locale), 'clickthrough': self.page.get_snippet('clickthrough', fallback=False, locale=locale), } for slug in template_snippets: kwargs['initial'][slug] = self.page.get_snippet(slug, fallback=False, locale=locale) kwargs['initial'].update(kw_initial) super().__init__(*args, **kwargs) for slug in template_snippets: field_type = template_snippets[slug] if field_type == 'text': self.fields[slug] = fields.TextareaField(required=False) elif field_type == 'html': self.fields[slug] = forms.CharField( required=False, widget=forms.Textarea(attrs={'data-tinymce': True})) else: self.fields[slug] = fields.CharField(required=False)
class CalendarForm(forms.Form): # extra_fields recurrence_set = forms.BooleanField(label=_('Set recurrence parameters'), required=False, initial=False, widget=forms.CheckboxInput) recurrence_pattern = forms.ChoiceField(label=_('Pattern'), choices=RECURRENCE_PATTERN, required=False) recurrence_every = forms.IntegerField(label=_('Event happens every'), required=False) recurrence_repetition_types = forms.ChoiceField( label=_('Recurrence type'), required=False, choices=RECURRENCE_REPETITION_TYPES) recurrence_until = forms.DateField(label=_('Until'), required=False, initial=None, widget=forms.SelectDateWidget()) recurrence_repetitions = forms.IntegerField(label=_('Repetitions'), required=False) type = fields.ChoiceField(choices=ClubEvent.TYPE_CHOICES) name = fields.CharField() email = fields.EmailField(required=False) description = fields.TextareaField(widget=forms.Textarea( attrs={'data-tinymce': True})) start_date = forms.DateField(widget=forms.SelectDateWidget()) start_time = forms.TimeField(initial=DEFAULT_START_TIME, widget=SelectTimeWidget(required=False, twelve_hr=True)) end_date = forms.DateField(required=False, initial=None, widget=forms.SelectDateWidget()) end_time = forms.TimeField(required=False, initial=DEFAULT_END_TIME, widget=SelectTimeWidget(required=False, twelve_hr=True)) max_attendees = fields.IntegerField(initial=0) max_guests_per_rsvp = fields.IntegerField(initial=1, min_value=1) photo = forms.ImageField(required=False) custom_question_1 = fields.CharField(required=False) custom_question_2 = fields.CharField(required=False) custom_question_3 = fields.CharField(required=False) custom_question_4 = fields.CharField(required=False) custom_question_5 = fields.CharField(required=False) online_registration = fields.TypedChoiceField( coerce=lambda x: x == 'True', choices=fields.BOOLEAN_CHOICES, initial=True, required=False) registration_open_date = forms.DateField(required=False, initial=None, widget=forms.SelectDateWidget()) registration_open_time = forms.TimeField( required=False, initial=DEFAULT_REGISTRATION_OPEN_TIME, widget=SelectTimeWidget(required=False, twelve_hr=True)) registration_close_date = forms.DateField(required=False, initial=None, widget=forms.SelectDateWidget()) registration_close_time = forms.TimeField( required=False, initial=DEFAULT_REGISTRATION_CLOSE_TIME, widget=SelectTimeWidget(required=False, twelve_hr=True)) def __init__(self, *args, **kwargs): self.event = None if 'event' in kwargs: self.event = kwargs.pop('event') if self.event: kw_initial = kwargs.get('initial', {}) kwargs['initial'] = { 'start_date': self.event.start_date, 'start_time': self.event.start_time, 'end_date': self.event.end_date, 'end_time': self.event.end_time, 'name': self.event.name, 'email': self.event.email, 'description': self.event.description, 'type': self.event.type, 'max_attendees': self.event.max_attendees, 'max_guests_per_rsvp': self.event.max_guests_per_rsvp, 'custom_question_1': self.event.custom_question_1, 'custom_question_2': self.event.custom_question_2, 'custom_question_3': self.event.custom_question_3, 'custom_question_4': self.event.custom_question_4, 'custom_question_5': self.event.custom_question_5, 'online_registration': self.event.online_registration, 'registration_open_date': self.event.registration_open_date, 'registration_open_time': self.event.registration_open_time, 'registration_close_date': self.event.registration_close_date, 'registration_close_time': self.event.registration_close_time } kwargs['initial'].update(kw_initial) super().__init__(*args, **kwargs) def clean(self): cleaned_data = self.cleaned_data start_date = self.cleaned_data['start_date'] start_time = self.cleaned_data['start_time'] if self.cleaned_data.get('recurrence_set'): if not self.cleaned_data.get('recurrence_pattern'): self.add_error( 'recurrence_pattern', forms.ValidationError(_('This is a required field.'))) if not self.cleaned_data.get('recurrence_every'): self.add_error( 'recurrence_every', forms.ValidationError(_('This is a required field.'))) if self.cleaned_data.get('recurrence_repetition_types') == REPETITION_UNTIL \ and not self.cleaned_data.get('recurrence_until'): self.add_error( 'recurrence_until', forms.ValidationError(_('This is a required field.'))) if self.cleaned_data.get('recurrence_repetition_types') == NB_REPETITIONS \ and not self.cleaned_data.get('recurrence_repetitions'): self.add_error( 'recurrence_repetitions', forms.ValidationError(_('This is a required field.'))) if not self.cleaned_data.get('end_date'): self.cleaned_data['end_date'] = start_date if not self.cleaned_data.get('end_time'): self.cleaned_data['end_time'] = start_time end_date = self.cleaned_data['end_date'] end_time = self.cleaned_data['end_time'] email = self.cleaned_data['email'] if end_date < start_date: self.add_error( 'end_date', forms.ValidationError( _('End date must not be earlier than start date.'))) if start_date == end_date and end_time < start_time: self.add_error( 'end_time', forms.ValidationError( _('End time must not be earlier than start time.'))) open_date = self.cleaned_data.get('registration_open_date') open_time = self.cleaned_data.get('registration_open_time') close_date = self.cleaned_data.get('registration_close_date') close_time = self.cleaned_data.get('registration_close_time') online_registration = self.cleaned_data.get('online_registration') if online_registration: if not open_date: self.add_error( 'registration_open_date', forms.ValidationError(_('This field is required.'))) if not open_time: self.add_error( 'registration_open_time', forms.ValidationError(_('This field is required.'))) if not close_date: self.add_error( 'registration_close_date', forms.ValidationError(_('This field is required.'))) if not close_time: self.add_error( 'registration_close_time', forms.ValidationError(_('This field is required.'))) if open_date and open_time and close_date and close_time: if open_date > end_date: self.add_error( 'registration_open_date', forms.ValidationError( _('Open date must not be later than end date.'))) if close_date > end_date: self.add_error( 'registration_close_date', forms.ValidationError( _('Close date must not be later than end date.'))) if close_date < open_date: self.add_error( 'registration_close_date', forms.ValidationError( _('Close date must not be earlier than open date.') )) if open_date == close_date and close_time < open_time: self.add_error( 'registration_close_time', forms.ValidationError( _('Close time must not be earlier than open time.') )) photo = self.cleaned_data.get('photo', False) if photo and photo._size > 4 * 1024 * 1024: self.add_error( 'photo', forms.ValidationError(_('Image too large( > 4MB )'))) return cleaned_data