示例#1
0
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)
示例#2
0
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)
示例#3
0
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