示例#1
0
class TeamMemberForm(forms.Form):
    name = fields.CharField()
    job_title_en = fields.CharField(label=_('Job Title'))
    job_title_fr = fields.CharField(label=_('Job Title (French)'),
                                    required=False)
    photo = forms.ImageField(required=False)
    phone = fields.CharField(label=_('Phone Number'), required=False)
    email = fields.EmailField(required=False)

    def __init__(self, club, *args, **kwargs):
        self.club = club
        self.team_member = None

        if 'team_member' in kwargs:
            self.team_member = kwargs.pop('team_member')

        if self.team_member:
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'name': self.team_member.name,
                'job_title_en': self.team_member.job_title_en,
                'job_title_fr': self.team_member.job_title_fr,
                'phone': self.team_member.phone,
                'email': self.team_member.email,
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)
示例#2
0
class MyAccountForm(forms.Form):
    first_name = fields.CharField()
    middle_name = fields.CharField(required=False)
    last_name = fields.CharField()
    email = fields.EmailField()
    password = fields.CharField(required=False, widget=forms.PasswordInput())
    preferred_language = fields.ChoiceField(choices=settings.LANGUAGES,
                                            initial=settings.LANGUAGE_CODE)

    def __init__(self, *args, **kwargs):
        self.user = None

        if 'user' in kwargs:
            self.user = kwargs.pop('user')
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'first_name': self.user.first_name,
                'last_name': self.user.last_name,
                'middle_name': self.user.middle_name,
                'email': self.user.email,
                'preferred_language': self.user.preferred_language,
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)
示例#3
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)
示例#4
0
class NewsForm(forms.Form):
    publish_date = fields.DateField(input_formats=['%d/%m/%Y'],
                                    widget=forms.DateInput(attrs={'data-pikaday': True}))
    headline_en = fields.CharField(label=_('Headline'))
    headline_fr = fields.CharField(label=_('Headline (French)'), required=False)
    summary_en = fields.CharField(label=_('Summary'))
    summary_fr = fields.CharField(label=_('Summary (French)'), required=False)
    content_en = forms.CharField(label=_('Content'),
                                 widget=forms.Textarea(attrs={'data-tinymce': True}))
    content_fr = forms.CharField(label=_('Content (French)'), required=False,
                                 widget=forms.Textarea(attrs={'data-tinymce': True}))
    photo = forms.ImageField()
    slug = fields.CharField(required=False)
    show_on_corp_site = forms.BooleanField(widget=forms.CheckboxInput, required=False)
    show_on_club_site = forms.BooleanField(widget=forms.CheckboxInput, required=False)

    def __init__(self, *args, **kwargs):
        self.news = None

        if 'news' in kwargs:
            self.news = kwargs.pop('news')
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'publish_date':
                    self.news.publish_date.strftime('%d/%m/%Y') if self.news.publish_date else '',
                'headline_en': self.news.headline_en,
                'headline_fr': self.news.headline_fr,
                'summary_en': self.news.summary_en,
                'summary_fr': self.news.summary_fr,
                'content_en': self.news.content_en,
                'content_fr': self.news.content_fr,
                'slug': self.news.slug,
                'show_on_corp_site': self.news.show_on_corp_site,
                'show_on_club_site': self.news.show_on_club_site,
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)

        if self.news:
            self.fields['photo'].required = False

    def clean(self):
        slug = self.cleaned_data.get('slug')
        headline = self.cleaned_data.get('headline')

        if not slug and headline:
            slug = headline

        self.cleaned_data['slug'] = slugify(slug)

        news = News.objects.filter(slug=self.cleaned_data.get('slug'))
        if self.news:
            news = news.exclude(pk=self.news.pk)
        if news.exists():
            self.add_error('slug', forms.ValidationError(_('Slug is already in use.')))

        return self.cleaned_data
示例#5
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)
示例#6
0
class InventoryLookupForm(forms.Form):
    """
    This form takes an inventory item ID and performs a search against 
    the IBS inventory.  The IBS inventory API only accepts EXACT, CONTAINS, 
    and something else, and due to budget constraints ClubLink only wanted to 
    do CONTAINS, with some frontend enforcement.
    """

    query = fields.CharField(label=_('Inventory ID'),
                             required=True,
                             widget=forms.TextInput(attrs={'minlength': 5}))
示例#7
0
class EventsGalleryForm(forms.Form):
    name = fields.CharField(required=False)
    name_en = fields.CharField(required=False)
    name_fr = fields.CharField(required=False)
    slug = fields.CharField()
    site_id = fields.ChoiceField(
        choices=[(site.id, site.name) for site in Site.objects.all()]
    )

    def __init__(self, request=None, *args, **kwargs):
        self.gallery = None

        if 'gallery' in kwargs:
            self.gallery = kwargs.pop('gallery')
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'name': self.gallery.name,
                'name_en': self.gallery.name_en,
                'name_fr': self.gallery.name_fr,
                'slug': self.gallery.slug,
                'site_id': self.gallery.site_id
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)

    def clean_slug(self):
        data = self.cleaned_data['slug']

        galleries = CorpEventsGallery.objects.all()
        if self.gallery:
            galleries = galleries.exclude(pk=self.gallery.pk)

        try:
            galleries.get(slug=data)
        except CorpEventsGallery.DoesNotExist:
            pass
        else:
            raise forms.ValidationError(_('This slug is already in use.'))

        return data
示例#8
0
class GalleryForm(forms.Form):
    name = fields.CharField()
    slug = fields.CharField()

    def __init__(self, club, *args, **kwargs):
        self.club = club
        self.gallery = None

        if 'gallery' in kwargs:
            self.gallery = kwargs.pop('gallery')

        if self.gallery:
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'name': self.gallery.name,
                'slug': self.gallery.slug,
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)

    def clean_slug(self):
        data = self.cleaned_data['slug']

        galleries = ClubGallery.objects.all()
        if self.gallery:
            galleries = galleries.exclude(pk=self.gallery.pk)

        try:
            galleries.get(slug=data, club=self.club)
        except ClubGallery.DoesNotExist:
            pass
        else:
            raise forms.ValidationError(_('This slug is already in use.'))

        return data
示例#9
0
class FolderForm(forms.Form):
    name = fields.CharField(max_length=60)

    def __init__(self, *args, **kwargs):
        self.parent = kwargs.pop('parent', None)
        super().__init__(*args, **kwargs)

    def clean_name(self):
        name = self.cleaned_data.get('name')

        if Folder.objects.filter(name=name, parent=self.parent).exists():
            raise forms.ValidationError(
                _('A folder with that name already exists.'))

        return name
示例#10
0
class FileForm(forms.Form):
    name = fields.CharField(max_length=60)
    file = forms.FileField()

    def __init__(self, *args, **kwargs):
        self.instance = kwargs.pop('instance', None)
        self.folder = kwargs.pop('folder', None)

        super().__init__(*args, **kwargs)

        if self.instance:
            self.fields.pop('file')

    def clean_name(self):
        name = self.cleaned_data.get('name')

        if File.objects.filter(name=name, folder=self.folder).exists():
            raise forms.ValidationError(
                _('A file with that name already exists.'))

        return name
示例#11
0
class UserSearchForm(forms.Form):
    query = fields.CharField(
        label=_('Search for User.... (or type the club name - ex. woodlands)'),
        min_length=3)

    def clean(self):
        super().clean()

        query = self.cleaned_data.get('query')

        if query:
            users = User.objects.filter(
                Q(username__icontains=query) | Q(membership_number=query)
                | Q(first_name__icontains=query)
                | Q(last_name__icontains=query)
                | Q(home_club__name__icontains=query))

            users = users.exclude(membership_number=None)

            self.cleaned_data['results'] = users

        return self.cleaned_data
示例#12
0
class PageForm(forms.Form):
    name_en = fields.CharField(label=_('Name'), required=False)
    name_fr = fields.CharField(label=_('Name (French)'), required=False)
    slug = fields.CharField(max_length=64)
    show_in_main_menu = forms.BooleanField(
        label=_('Show in Hamburger Menu'), required=False, initial=True,
        widget=forms.CheckboxInput)
    hidden_bucket = forms.BooleanField(required=False, initial=False)
    list_in_main_menu_subnav = forms.BooleanField(
        label=_('Duplicate in Hamburger Menu Subnav'), required=False, initial=False,
        widget=forms.CheckboxInput)
    name_in_main_menu_subnav_en = fields.CharField(
        label=_('Name in Hamburger Menu Subnav'), required=False)
    name_in_main_menu_subnav_fr = fields.CharField(
        label=_('Name in Hamburger Menu Subnav (French)'), required=False)
    show_page_nav = forms.BooleanField(
        label=_('Show Page Navigation'), required=False, initial=True,
        widget=forms.CheckboxInput)
    list_in_child_page_nav = forms.BooleanField(
        label=_('Show in Child Page Navigation'), required=False, initial=False,
        widget=forms.CheckboxInput)
    name_in_child_page_nav_en = fields.CharField(
        label=_('Name in Child Page Navigation'), required=False)
    name_in_child_page_nav_fr = fields.CharField(
        label=_('Name in Child Page Navigation (French)'), required=False)
    should_redirect = forms.BooleanField(
        required=False, initial=False, widget=forms.CheckboxInput)
    external_redirect = fields.CharField(required=False)
    opens_in_new_window = fields.TypedChoiceField(
        coerce=lambda x: x == 'True', choices=fields.BOOLEAN_CHOICES, initial=False,
        required=False)
    site_id = fields.ChoiceField(
        choices=[
            [s.id, s.domain] for s in Site.objects.all()
        ]
    )
    facebook_pixel_id = fields.CharField(required=False)

    def __init__(self, site=None, request=None, *args, **kwargs):
        self.page = None

        if 'page' in kwargs:
            self.page = kwargs.pop('page')

        p = self.page

        specified_site_id_string = request.GET.get('site', None)

        if specified_site_id_string:
            initial_site_id = specified_site_id_string
        elif p and p.site:
            initial_site_id = p.site.id

        if self.page:
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'name_en': p.name_en,
                'name_fr': p.name_fr,
                'slug': p.slug,
                'parent': p.parent.pk if p.parent else None,
                'show_in_main_menu': p.show_in_main_menu,
                'list_in_main_menu_subnav': p.list_in_main_menu_subnav,
                'name_in_main_menu_subnav_en': p.name_in_main_menu_subnav_en,
                'name_in_main_menu_subnav_fr': p.name_in_main_menu_subnav_fr,
                'show_page_nav': p.show_page_nav,
                'list_in_child_page_nav': p.list_in_child_page_nav,
                'name_in_child_page_nav_en': p.name_in_child_page_nav_en,
                'name_in_child_page_nav_fr': p.name_in_child_page_nav_fr,
                'should_redirect': p.should_redirect,
                'external_redirect': p.external_redirect,
                'internal_redirect': p.internal_redirect.pk if p.internal_redirect else None,
                'opens_in_new_window': p.opens_in_new_window,
                'site_id': int(initial_site_id),
                'facebook_pixel_id': p.facebook_pixel_id
            }
            kwargs['initial'].update(kw_initial)
        else:

            prepop_site = {'site_id': initial_site_id}

            if kwargs.get('initial', {}):
                kwargs['initial'].update(prepop_site)
            else:
                kwargs['initial'] = prepop_site


        super().__init__(*args, **kwargs)

        excludes = Q(parent=None, slug='')
        if self.page:
            excludes |= Q(pk=self.page.pk)
        linkable_pages = CorpPage.objects.exclude(excludes).order_by('full_path')

        if request:
            # import pdb; pdb.set_trace();
            if p and p.site:
                linkable_pages = linkable_pages.filter(site=p.site)
            elif request:
                if specified_site_id_string:
                    linkable_pages = linkable_pages.filter(site_id=specified_site_id_string)
                else:
                    linkable_pages = linkable_pages.filter(site=request.site)
            else:
                pass

        if self.page and self.page.is_locked:
            self.fields.pop('slug')
        else:
            self.fields['parent'] = fields.ChoiceField(
                choices=[(None, 'No parent')] + [(p.pk, '{} ({})'.format(p.full_path, p.site.domain) ) for p in linkable_pages],
                required=False)

        self.fields['internal_redirect'] = fields.ChoiceField(
            choices=[(None, 'No redirect')] + [(p.pk, p.full_path) for p in linkable_pages],
            required=False)

    def clean_parent(self):
        pk = self.cleaned_data['parent']
        parent = None

        if pk:
            try:
                parent = CorpPage.objects.get(pk=pk)
            except CorpPage.DoesNotExist:
                raise forms.ValidationError('Invalid parent.')

        return parent

    def clean_internal_redirect(self):
        pk = self.cleaned_data['internal_redirect']
        parent = None

        if pk:
            try:
                parent = CorpPage.objects.get(pk=pk)
            except CorpPage.DoesNotExist:
                raise forms.ValidationError('Invalid internal redirect.')

        return parent

    def clean(self):
        cleaned_data = super().clean()

        slug = cleaned_data.get('slug', '')
        parent = cleaned_data.get('parent', None)

        if slug:
            if re.match(r'[^a-zA-Z0-9_-]', slug):
                self.add_error(
                    'slug', forms.ValidationError(_('Slug may only contain alphanumeric '
                                                    'characters, underscore and hyphens.')))
            else:
                pages = CorpPage.objects.filter(parent=parent, slug=slug)

                if self.page:
                    pages = pages.exclude(pk=self.page.pk)

                if pages.exists():
                    self.add_error(
                        'slug', forms.ValidationError(_('This slug is already in use.')))

        return cleaned_data
示例#13
0
class PageForm(forms.Form):
    name_en = fields.CharField(label=_('Name'), required=False)
    name_fr = fields.CharField(label=_('Name (French)'), required=False)
    slug = fields.CharField(max_length=64)
    visibility = fields.ChoiceField(choices=ClubPage.VISIBILITY_CHOICES)
    show_address_bar = fields.TypedChoiceField(coerce=lambda x: x == 'True',
                                               choices=fields.BOOLEAN_CHOICES,
                                               initial=True,
                                               required=False)
    show_in_main_menu = forms.BooleanField(label=_('Show in Hamburger Menu'),
                                           required=False,
                                           initial=True,
                                           widget=forms.CheckboxInput)
    list_in_main_menu_subnav = forms.BooleanField(
        label=_('Duplicate in Hamburger Menu Subnav'),
        required=False,
        initial=False,
        widget=forms.CheckboxInput)
    name_in_main_menu_subnav_en = fields.CharField(
        label=_('Name in Hamburger Menu Subnav'), required=False)
    name_in_main_menu_subnav_fr = fields.CharField(
        label=_('Name in Hamburger Menu Subnav (French)'), required=False)
    show_page_nav = forms.BooleanField(label=_('Show Page Navigation'),
                                       required=False,
                                       initial=True,
                                       widget=forms.CheckboxInput)
    list_in_child_page_nav = forms.BooleanField(
        label=_('Show in Child Page Navigation'),
        required=False,
        initial=False,
        widget=forms.CheckboxInput)
    name_in_child_page_nav_en = fields.CharField(
        label=_('Name in Child Page Navigation'), required=False)
    name_in_child_page_nav_fr = fields.CharField(
        label=_('Name in Child Page Navigation (French)'), required=False)
    should_redirect = forms.BooleanField(required=False,
                                         initial=False,
                                         widget=forms.CheckboxInput)
    external_redirect = fields.CharField(required=False)
    opens_in_new_window = fields.TypedChoiceField(
        coerce=lambda x: x == 'True',
        choices=fields.BOOLEAN_CHOICES,
        initial=False,
        required=False)
    hidden_bucket = forms.BooleanField(required=False, initial=False)
    facebook_pixel_id = fields.CharField(required=False)

    def __init__(self, club, *args, **kwargs):
        self.club = club
        self.page = None

        if 'page' in kwargs:
            self.page = kwargs.pop('page')

        if self.page:
            kw_initial = kwargs.get('initial', {})
            p = self.page
            kwargs['initial'] = {
                'name_en':
                p.name_en,
                'name_fr':
                p.name_fr,
                'slug':
                p.slug,
                'visibility':
                p.visibility,
                'show_address_bar':
                p.show_address_bar,
                'parent':
                p.parent.pk if p.parent else None,
                'show_in_main_menu':
                p.show_in_main_menu,
                'list_in_main_menu_subnav':
                p.list_in_main_menu_subnav,
                'name_in_main_menu_subnav_en':
                p.name_in_main_menu_subnav_en,
                'name_in_main_menu_subnav_fr':
                p.name_in_main_menu_subnav_fr,
                'show_page_nav':
                p.show_page_nav,
                'list_in_child_page_nav':
                p.list_in_child_page_nav,
                'name_in_child_page_nav_en':
                p.name_in_child_page_nav_en,
                'name_in_child_page_nav_fr':
                p.name_in_child_page_nav_fr,
                'alias':
                p.alias.pk if p.alias else None,
                'should_redirect':
                p.should_redirect,
                'external_redirect':
                p.external_redirect,
                'internal_redirect':
                p.internal_redirect.pk if p.internal_redirect else None,
                'opens_in_new_window':
                p.opens_in_new_window,
                'hidden_bucket':
                p.hidden_bucket,
                'facebook_pixel_id':
                p.facebook_pixel_id
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)

        excludes = Q(parent=None, slug='')
        if self.page:
            excludes |= Q(pk=self.page.pk)
        linkable_pages = self.club.pages.exclude(excludes).order_by(
            'full_path')

        if self.page and self.page.is_locked:
            self.fields.pop('slug')
        else:
            self.fields['parent'] = fields.ChoiceField(
                choices=[(None, 'No parent')] + [(p.pk, p.full_path)
                                                 for p in linkable_pages],
                required=False)

        self.fields['alias'] = fields.ChoiceField(
            choices=[(None, 'No alias')] + [(p.pk, p.full_path)
                                            for p in linkable_pages],
            required=False)

        self.fields['internal_redirect'] = fields.ChoiceField(
            choices=[(None, 'No redirect')] + [(p.pk, p.full_path)
                                               for p in linkable_pages],
            required=False)

    def clean_parent(self):
        pk = self.cleaned_data['parent']
        parent = None

        if pk:
            try:
                parent = ClubPage.objects.get(pk=pk)
            except ClubPage.DoesNotExist:
                raise forms.ValidationError('Invalid parent.')

        return parent

    def clean_alias(self):
        pk = self.cleaned_data['alias']
        parent = None

        if pk:
            try:
                parent = ClubPage.objects.get(pk=pk)
            except ClubPage.DoesNotExist:
                raise forms.ValidationError('Invalid alias.')

        return parent

    def clean_internal_redirect(self):
        pk = self.cleaned_data['internal_redirect']
        parent = None

        if pk:
            try:
                parent = ClubPage.objects.get(pk=pk)
            except ClubPage.DoesNotExist:
                raise forms.ValidationError('Invalid redirect.')

        return parent

    def clean(self):
        cleaned_data = super().clean()

        slug = cleaned_data.get('slug', '')
        parent = cleaned_data.get('parent', None)

        if slug:
            if re.match(r'[^a-zA-Z0-9_-]', slug):
                self.add_error(
                    'slug',
                    forms.ValidationError(
                        _('Slug may only contain alphanumeric '
                          'characters, underscore and hyphens.')))
            else:
                pages = ClubPage.objects.filter(club=self.club,
                                                parent=parent,
                                                slug=slug)

                if self.page:
                    pages = pages.exclude(pk=self.page.pk)

                if pages.exists():
                    self.add_error(
                        'slug',
                        forms.ValidationError(
                            _('This slug is already in use.')))

        return cleaned_data
示例#14
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
示例#15
0
class LoginForm(UserLoginForm):
    username = fields.CharField(label=_('Username'))
    password = fields.CharField(label=_('Password'),
                                widget=forms.PasswordInput())
示例#16
0
class UserForm(forms.Form):
    username = fields.CharField(max_length=48)
    password = fields.CharField(min_length=6,
                                required=False,
                                widget=forms.PasswordInput())
    first_name = fields.CharField(required=False)
    last_name = fields.CharField(required=False)
    middle_name = fields.CharField(required=False)
    email = fields.EmailField()
    membership_number = fields.CharField(max_length=15, required=False)
    employee_number = fields.CharField(max_length=15, required=False)
    is_superuser = fields.TypedChoiceField(coerce=lambda x: x == 'True',
                                           choices=fields.BOOLEAN_CHOICES,
                                           initial=False,
                                           required=False)
    is_staff = fields.TypedChoiceField(coerce=lambda x: x == 'True',
                                       choices=fields.BOOLEAN_CHOICES,
                                       initial=False,
                                       required=False)
    preferred_language = fields.ChoiceField(choices=settings.LANGUAGES,
                                            initial=settings.LANGUAGE_CODE)
    status = fields.ChoiceField(choices=User.STATUSES)
    clubcorp = fields.ChoiceField(choices=[(None, '')], required=False)
    clubcorp_number = fields.CharField(max_length=5, required=False)
    type = fields.ChoiceField(choices=[(None, '')], required=False)
    category = fields.ChoiceField(choices=[(None, '')], required=False)
    home_club = fields.ChoiceField(choices=[(None, '')], required=False)
    option_club = fields.ChoiceField(choices=[(None, '')], required=False)
    home_club_alternate_1 = fields.ChoiceField(choices=[(None, '')],
                                               required=False)
    home_club_alternate_2 = fields.ChoiceField(choices=[(None, '')],
                                               required=False)

    def __init__(self, *args, **kwargs):
        self.user = None

        if kwargs.get('user'):
            self.user = kwargs.pop('user')
            kw_initial = kwargs.get('initial', {})
            kwargs['initial'] = {
                'username':
                self.user.username,
                'first_name':
                self.user.first_name,
                'last_name':
                self.user.last_name,
                'middle_name':
                self.user.middle_name,
                'email':
                self.user.email,
                'membership_number':
                self.user.membership_number,
                'employee_number':
                self.user.employee_number,
                'is_superuser':
                self.user.is_superuser,
                'is_staff':
                self.user.is_staff,
                'preferred_language':
                self.user.preferred_language,
                'status':
                self.user.status,
                'clubcorp':
                getattr(self.user.home_club, 'id', None),
                'clubcorp_number':
                self.user.clubcorp_number,
                'category':
                getattr(self.user.category, 'id', None),
                'type':
                getattr(self.user.type, 'id', None),
                'home_club':
                getattr(self.user.home_club, 'pk', None),
                'option_club':
                getattr(self.user.option_club, 'pk', None),
                'home_club_alternate_1':
                getattr(self.user.home_club_alternate_1, 'pk', None),
                'home_club_alternate_2':
                getattr(self.user.home_club_alternate_2, 'pk', None),
            }
            kwargs['initial'].update(kw_initial)

        super().__init__(*args, **kwargs)

        self.fields['clubcorp'].choices += [(c.id, c.name)
                                            for c in ClubCorp.objects.all()]
        self.fields['type'].choices += [(t.id, t.name)
                                        for t in UserType.objects.all()]
        self.fields['clubcorp'].choices += [
            (c.id, c.name) for c in UserCategory.objects.all()
        ]

        self.fields['home_club'].choices += [(c.pk, c.name)
                                             for c in Club.objects.all()]
        self.fields['option_club'].choices += [(c.pk, c.name)
                                               for c in Club.objects.all()]
        self.fields['home_club_alternate_1'].choices += [
            (c.pk, c.name) for c in Club.objects.all()
        ]
        self.fields['home_club_alternate_2'].choices += [
            (c.pk, c.name) for c in Club.objects.all()
        ]

    def clean_username(self):
        data = self.cleaned_data['username']

        users = User.objects.all()

        if self.user:
            users = users.exclude(pk=self.user.pk)

        try:
            users.get(username=data)
        except User.DoesNotExist:
            pass
        else:
            raise forms.ValidationError(_('Username is already in use.'))

        return data

    def clean_password(self):
        data = self.cleaned_data['password']
        return data if data else None

    def clean_membership_number(self):
        data = self.cleaned_data['membership_number']
        return data if data else None

    def clean_employee_number(self):
        data = self.cleaned_data['employee_number']
        return data if data else None

    def clean_is_staff(self):
        is_superuser = self.cleaned_data['is_superuser']
        is_staff = self.cleaned_data['is_staff']
        return is_staff or is_superuser

    def validate_fk(self, data, klass):
        if data:
            try:
                data = klass.objects.get(pk=data)
            except klass.DoesNotExist:
                raise forms.ValidationError(_('Invalid entry.'))
        else:
            data = None
        return data

    def clean_clubcorp(self):
        data = self.cleaned_data['clubcorp']
        return self.validate_fk(data, ClubCorp)

    def clean_category(self):
        data = self.cleaned_data['category']
        return self.validate_fk(data, UserCategory)

    def clean_type(self):
        data = self.cleaned_data['type']
        return self.validate_fk(data, UserType)

    def clean_home_club(self):
        data = self.cleaned_data['home_club']
        return self.validate_fk(data, Club)

    def clean_option_club(self):
        data = self.cleaned_data['option_club']
        return self.validate_fk(data, Club)

    def clean_home_club_alternate_1(self):
        data = self.cleaned_data['home_club_alternate_1']
        return self.validate_fk(data, Club)

    def clean_home_club_alternate_2(self):
        data = self.cleaned_data['home_club_alternate_2']
        return self.validate_fk(data, Club)