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)
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)
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 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
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 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}))
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
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
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
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
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
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
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
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
class LoginForm(UserLoginForm): username = fields.CharField(label=_('Username')) password = fields.CharField(label=_('Password'), widget=forms.PasswordInput())
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)