class Form(forms.Form): other = forms.StringField("Other") field = forms.StringField("Field", validators=[ forms.validators.RequiredIf('other'), forms.validators.Optional() ])
class ResourceForm(forms.Form): """ Edit a resource provided by an application """ name = forms.StringField(__("Resource name"), validators=[forms.validators.DataRequired()], description=__("Name of the resource as a single word in lower case. " "This is provided by applications as part of the scope " "when requesting access to a user's resources"), widget_attrs={'autocorrect': 'none', 'autocapitalize': 'none'}) title = forms.StringField(__("Title"), validators=[forms.validators.DataRequired()], description=__("Resource title that is displayed to users")) description = forms.TextAreaField(__("Description"), description=__("An optional description of what the resource is")) siteresource = forms.BooleanField(__("Site resource"), description=__("Enable if this resource is generic to the site and not owned by specific users")) restricted = forms.BooleanField(__("Restrict access to your apps"), description=__("Enable if access to the resource should be restricted to client apps " "that share the same owner. You may want to do this for sensitive resources " "that should only be available to your own apps")) def validate_name(self, field): field.data = field.data.lower() if not valid_username(field.data): raise forms.ValidationError(_("Name contains invalid characters")) if field.data in resource_registry: raise forms.ValidationError(_("This name is reserved for internal use")) existing = Resource.get(name=field.data, client=self.client) if existing and existing.id != self.edit_id: raise forms.ValidationError(_("A resource with that name already exists"))
class GetSetForm(forms.Form): firstname = forms.StringField("First name") lastname = forms.StringField("Last name") company = forms.StringField("Company") # Test for NOT having get_/set_company password = forms.PasswordField("Password") confirm_password = forms.PasswordField("Confirm password") def get_firstname(self, obj): return obj.fullname.split(' ', 1)[0] def get_lastname(self, obj): parts = obj.fullname.split(' ', 1) if len(parts) > 1: return parts[-1] return '' def get_password(self, obj): return '' def get_confirm_password(self, obj): return '' def set_firstname(self, obj): pass def set_lastname(self, obj): obj.fullname = self.firstname.data + " " + self.lastname.data def set_password(self, obj): obj.password = self.password.data def set_confirm_password(self, obj): pass
class PublicEmailDomainFormTest(forms.Form): webmail_domain = forms.StringField( __("Webmail Domain"), validators=[forms.validators.IsPublicEmailDomain()]) not_webmail_domain = forms.StringField( __("Not Webmail Domain"), validators=[forms.validators.IsNotPublicEmailDomain()])
class ResourceActionForm(forms.Form): """ Edit an action associated with a resource """ name = forms.StringField( __("Action name"), validators=[forms.validators.DataRequired()], description= __("Name of the action as a single word in lower case. " "This is provided by applications as part of the scope in the form " "'resource/action' when requesting access to a user's resources. " "Read actions are implicit when applications request just 'resource' " "in the scope and do not need to be specified as an explicit action" ), widget_attrs={ 'autocorrect': 'none', 'autocapitalize': 'none' }) title = forms.StringField( __("Title"), validators=[forms.validators.DataRequired()], description=__("Action title that is displayed to users")) description = forms.TextAreaField( __("Description"), description=__("An optional description of what the action is")) def validate_name(self, field): field.data = field.data.lower() if not valid_username(field.data): raise forms.ValidationError(_("Name contains invalid characters")) existing = self.edit_resource.get_action(field.data) if existing and existing.id != self.edit_id: raise forms.ValidationError( _("An action with that name already exists for this resource"))
class AssigneeForm(forms.Form): email = forms.EmailField( __("Email"), validators=[ forms.validators.DataRequired(), forms.validators.Length(max=254) ], ) fullname = forms.StringField(__("Full Name"), validators=[forms.validators.DataRequired()]) phone = forms.StringField(__("Phone number"), validators=[forms.validators.DataRequired()]) def validate_email(self, field): existing_assignees = ( Assignee.query.join(LineItem).join(Item).join(Order).filter( LineItem.item_id == self.edit_parent.item_id).filter( Order.status != ORDER_STATUS.CANCELLED).filter( Assignee.current.is_(True)).filter( Assignee.email == field.data)) if self.edit_obj is not None: existing_assignees = existing_assignees.filter( Assignee.id != self.edit_obj.id) if existing_assignees.count() > 0: raise forms.ValidationError( __("Email address has been already used"))
class VenueRoomForm(forms.Form): title = forms.StringField( __("Name"), description=__("Name of the room"), validators=[ forms.validators.DataRequired(), forms.validators.Length(max=250) ], filters=[forms.filters.strip()], ) description = forms.MarkdownField( __("Description"), description=__("An optional note about the room")) bgcolor = forms.StringField( __("Room colour"), validators=[ forms.validators.DataRequired(), forms.validators.Length(max=6) ], description=__( "RGB colour for the room. Enter without the '#'. E.g. CCCCCC."), default="CCCCCC", ) def validate_bgcolor(self, field): if not valid_color_re.match(field.data): raise forms.ValidationError("Please enter a valid color code")
class LabelForm(forms.Form): name = forms.StringField( "", widget=forms.HiddenInput(), validators=[forms.validators.Optional()] ) title = forms.StringField( __("Label"), validators=[ forms.validators.DataRequired(__("This can’t be empty")), forms.validators.Length(max=250), ], filters=[forms.filters.strip()], ) icon_emoji = forms.StringField( "", validators=[forms.validators.Optional(), forms.validators.IsEmoji()] ) required = forms.BooleanField( __("Make this label mandatory in proposal forms"), default=False, description=__("If checked, proposers must select one of the options"), ) restricted = forms.BooleanField( __("Restrict use of this label to editors"), default=False, description=__( "If checked, only editors and reviewers can apply this label on proposals" ), )
class InvoiceForm(forms.Form): buyer_taxid = forms.StringField(__("GSTIN"), validators=[forms.validators.Optional(), forms.validators.Length(max=255), validate_gstin], filters=[forms.filters.strip(), forms.filters.none_if_empty()]) invoicee_name = forms.StringField(__("Full name"), validators=[forms.validators.DataRequired(__("Please enter the buyer's full name")), forms.validators.Length(max=255)], filters=[forms.filters.strip()]) invoicee_company = forms.StringField(__("Company"), validators=[forms.validators.Optional(), forms.validators.Length(max=255)], filters=[forms.filters.strip()]) invoicee_email = forms.EmailField(__("Email"), validators=[forms.validators.DataRequired(__("Please enter an email address")), forms.validators.Length(min=5, max=80), forms.validators.ValidEmail(__("Please enter a valid email"))], filters=[forms.filters.strip()]) street_address_1 = forms.StringField(__("Street address 1"), validators=[forms.validators.DataRequired(__("Please enter the street address")), forms.validators.Length(max=255)], filters=[forms.filters.strip()]) street_address_2 = forms.StringField(__("Street address 2"), validators=[forms.validators.Optional(), forms.validators.Length(max=255)], filters=[forms.filters.strip()]) city = forms.StringField(__("City"), validators=[forms.validators.DataRequired(__("Please enter the city")), forms.validators.Length(max=255)], filters=[forms.filters.strip()]) country_code = forms.StringField(__("Country"), validators=[forms.validators.DataRequired(__("Please select a country")), forms.validators.Length(max=2)], filters=[forms.filters.strip()]) state_code = forms.StringField(__("State code"), validators=[forms.validators.Length(max=4), validate_state_code], filters=[forms.filters.strip()]) state = forms.StringField(__("State"), validators=[forms.validators.Optional(), forms.validators.Length(max=255)], filters=[forms.filters.strip(), forms.filters.none_if_empty()]) postcode = forms.StringField(__("Postcode"), validators=[forms.validators.DataRequired(__("Please enter a postcode")), forms.validators.Length(max=8)], filters=[forms.filters.strip()])
class ProposalSpaceForm(forms.Form): name = forms.StringField(__("URL name"), validators=[forms.validators.DataRequired(), forms.ValidName(), AvailableName()]) title = forms.StringField(__("Title"), validators=[forms.validators.DataRequired()]) datelocation = forms.StringField(__("Date and Location"), validators=[forms.validators.DataRequired(), forms.validators.Length(max=50)]) date = forms.DateField(__("Start date (for sorting)"), validators=[forms.validators.DataRequired(__("Enter a valid date in YYYY-MM-DD format"))]) date_upto = forms.DateField(__("End date (for sorting)"), validators=[forms.validators.DataRequired(__("Enter a valid date in YYYY-MM-DD format"))]) tagline = forms.StringField(__("Tagline"), validators=[forms.validators.DataRequired()], description=__("This is displayed on the card on the homepage")) website = forms.URLField(__("Website"), validators=[forms.validators.Optional()]) description = forms.MarkdownField(__("Description"), validators=[forms.validators.DataRequired()], description=__("About Event")) timezone = forms.SelectField(__("Timezone"), description=__("The timezone in which this event occurs"), validators=[forms.validators.DataRequired()], choices=sorted_timezones(), default=u'UTC') bg_image = forms.URLField(__("Background image URL"), description=u"Background image for the mobile app", validators=[forms.validators.Optional()]) bg_color = forms.StringField(__("Background color"), description=__("RGB color for the event, shown on the mobile app. Enter without the '#'. E.g. CCCCCC."), validators=[forms.validators.Optional(), forms.validators.Length(max=6)], default=u"CCCCCC") explore_url = forms.URLField(__("Explore tab URL"), description=__(u"Page containing the explore tab’s contents, for the mobile app"), validators=[forms.validators.Optional()]) parent_space = QuerySelectField(__(u"Parent space"), get_label='title', allow_blank=True, blank_text=__(u"None")) status = forms.SelectField(__("Status"), coerce=int, choices=[ (0, __("Draft")), (1, __("Open")), (2, __("Voting")), (3, __("Jury selection")), (4, __("Feedback")), (5, __("Closed")), (6, __("Withdrawn")), ], description=__(u"Proposals can only be submitted in the “Open” state. " u"“Closed” and “Withdrawn” are hidden from homepage")) admin_team = QuerySelectField(u"Admin Team", validators=[forms.validators.DataRequired(__(u"Please select a team"))], query_factory=profile_teams, get_label='title', allow_blank=False, description=__(u"The administrators of this proposal space")) review_team = QuerySelectField(u"Review Team", validators=[forms.validators.DataRequired(__(u"Please select a team"))], query_factory=profile_teams, get_label='title', allow_blank=False, description=__(u"Reviewers can see contact details of proposers, but can’t change settings")) allow_rsvp = forms.BooleanField(__("Allow site visitors to RSVP (login required)")) buy_tickets_url = forms.URLField(__("URL to buy tickets"), description=__(u"Eg: Explara, Instamojo"), validators=[forms.validators.Optional()]) def validate_date_upto(self, date_upto): if self.date_upto.data < self.date.data: raise forms.ValidationError(_("End date cannot be before start date")) def validate_bg_color(self, field): if not valid_color_re.match(field.data): raise forms.ValidationError("Please enter a valid color code")
class ProjectForm(forms.Form): title = forms.StringField( __("Title"), validators=[forms.validators.DataRequired()], filters=[forms.filters.strip()], ) tagline = forms.StringField( __("Tagline"), validators=[forms.validators.DataRequired(), forms.validators.Length(max=250)], filters=[forms.filters.strip()], description=__("One line description of the project"), ) location = forms.StringField( __("Location"), description=__( '“Online” if this is online-only, else the city or region (without quotes)' ), validators=[ forms.validators.DataRequired( __("If this project is online-only, use “Online”") ), forms.validators.Length( min=3, max=50, message=__("%(max)d characters maximum") ), ], filters=[forms.filters.strip()], ) timezone = forms.SelectField( __("Timezone"), description=__("The timezone in which this event occurs"), validators=[forms.validators.DataRequired()], choices=sorted_timezones(), default='UTC', ) bg_image = forms.URLField( __("Banner image URL"), description=( "From images.hasgeek.com, with 16:9 aspect ratio." " Should be < 100 kB in size" ), validators=[ forms.validators.Optional(), forms.validators.Length(max=2000), image_url_validator(), ], ) description = forms.MarkdownField( __("Project description"), validators=[forms.validators.DataRequired()], description=__("Landing page contents"), ) def validate_location(self, field): if re.search(double_quote_re, field.data) is not None: raise forms.ValidationError( __("Quotes are not necessary in the location name") )
class SessionForm(forms.Form): title = forms.StringField(__("Title"), validators=[forms.validators.DataRequired()]) venue_room_id = forms.SelectField(__("Room"), choices=[], coerce=nullint, validators=[forms.validators.Optional()]) description = forms.MarkdownField(__("Description"), validators=[forms.validators.Optional()]) speaker = forms.StringField(__("Speaker"), validators=[forms.validators.Optional()]) speaker_bio = forms.MarkdownField(__("Speaker bio"), validators=[forms.validators.Optional()]) is_break = forms.BooleanField(__("This session is a break period"), default=False) start = forms.HiddenField(__("Start Time"), validators=[forms.validators.DataRequired()]) end = forms.HiddenField(__("End Time"), validators=[forms.validators.DataRequired()])
class BuyerForm(forms.Form): email = forms.EmailField(__("Email"), validators=[ forms.validators.DataRequired(), forms.validators.Length(max=80) ]) fullname = forms.StringField(__("Full name"), validators=[forms.validators.DataRequired()]) phone = forms.StringField(__("Phone number"), validators=[forms.validators.Length(max=16)])
class PermissionForm(forms.Form): """ Create or edit a permission """ name = forms.StringField(__("Permission name"), validators=[forms.validators.DataRequired()], description=__("Name of the permission as a single word in lower case. " "This is passed to the application when a user logs in. " "Changing the name will not automatically update it everywhere. " "You must reassign the permission to users who had it with the old name"), widget_attrs={'autocorrect': 'none', 'autocapitalize': 'none'}) title = forms.StringField(__("Title"), validators=[forms.validators.DataRequired()], description=__("Permission title that is displayed to users")) description = forms.TextAreaField(__("Description"), description=__("An optional description of what the permission is for")) context = forms.RadioField(__("Context"), validators=[forms.validators.DataRequired()], description=__("Context where this permission is available")) def validate(self): rv = super(PermissionForm, self).validate() if not rv: return False if not valid_username(self.name.data): self.name.errors.append(_("Name contains invalid characters")) return False existing = Permission.get(name=self.name.data, allusers=True) if existing and existing.id != self.edit_id: self.name.errors.append(_("A global permission with that name already exists")) return False if self.context.data == self.edit_user.userid: existing = Permission.get(name=self.name.data, user=self.edit_user) else: org = Organization.get(userid=self.context.data) if org: existing = Permission.get(name=self.name.data, org=org) else: existing = None if existing and existing.id != self.edit_id: self.name.errors.append(_("You have another permission with the same name")) return False return True def validate_context(self, field): if field.data == self.edit_user.userid: self.user = self.edit_user self.org = None else: orgs = [org for org in self.edit_user.organizations_owned() if org.userid == field.data] if len(orgs) != 1: raise forms.ValidationError(_("Invalid context")) self.user = None self.org = orgs[0]
class RegisterForm(forms.Form): fullname = forms.StringField(__("Full name"), validators=[forms.validators.DataRequired()]) email = forms.EmailField(__("Email address"), validators=[ forms.validators.DataRequired(), forms.validators.ValidEmail() ], widget_attrs={ 'autocorrect': 'none', 'autocapitalize': 'none' }) username = forms.StringField( __("Username"), validators=[forms.validators.DataRequired()], description=__( "Single word that can contain letters, numbers and dashes"), widget_attrs={ 'autocorrect': 'none', 'autocapitalize': 'none' }) password = forms.PasswordField( __("Password"), validators=[forms.validators.DataRequired()]) confirm_password = forms.PasswordField( __("Confirm password"), validators=[ forms.validators.DataRequired(), forms.validators.EqualTo('password') ]) recaptcha = wtf.RecaptchaField( __("Are you human?"), description=__( "Type both words into the text box to prove that you are a human and not a computer program" )) def validate_username(self, field): if field.data in current_app.config['RESERVED_USERNAMES']: raise forms.ValidationError, _("This name is reserved") if not valid_username(field.data): raise forms.ValidationError( _(u"Invalid characters in name. Names must be made of ‘a-z’, ‘0-9’ and ‘-’, without trailing dashes" )) existing = User.get(username=field.data) if existing is not None: raise forms.ValidationError(_("This username is taken")) def validate_email(self, field): field.data = field.data.lower() # Convert to lowercase existing = UserEmail.get(email=field.data) if existing is not None: raise forms.ValidationError( Markup( _(u"This email address is already registered. Do you want to <a href=\"{loginurl}\">login</a> instead?" ).format(loginurl=escape(url_for('.login')))))
class FiltersetForm(forms.Form): title = forms.StringField(__("Title"), description=__("A title shown to viewers"), validators=[forms.validators.DataRequired()], filters=[forms.filters.strip()]) description = forms.TinyMce4Field( __("Description"), content_css=content_css, description=__("Description shown to viewers and search engines"), validators=[forms.validators.DataRequired()]) types = QuerySelectMultipleField(__("Job types"), widget=ListWidget(), option_widget=CheckboxInput(), get_label='title', validators=[forms.validators.Optional()]) categories = QuerySelectMultipleField( __("Job categories"), widget=ListWidget(), option_widget=CheckboxInput(), get_label='title', validators=[forms.validators.Optional()]) geonameids = forms.GeonameSelectMultiField("Locations", filters=[format_geonameids]) remote_location = forms.BooleanField(__("Match remote jobs")) pay_cash_currency = forms.RadioField( __("Currency"), choices=get_currency_choices(), default='', validators=[forms.validators.Optional()]) pay_cash = forms.IntegerField(__("Pay"), description=__("Minimum pay"), validators=[forms.validators.Optional()]) keywords = forms.StringField(__("Keywords"), validators=[forms.validators.Optional()], filters=[forms.filters.strip()]) auto_domains = forms.AutocompleteMultipleField( __("Domains"), autocomplete_endpoint='/api/1/domain/autocomplete', results_key='domains') auto_tags = forms.AutocompleteMultipleField( __("Tags"), autocomplete_endpoint='/api/1/tag/autocomplete', results_key='tags') def set_queries(self): if not self.edit_parent: self.edit_parent = g.board self.types.query = JobType.query.join(board_jobtype_table).filter( board_jobtype_table.c.board_id == self.edit_parent.id).order_by( 'title') self.categories.query = JobCategory.query.join( board_jobcategory_table).filter( board_jobcategory_table.c.board_id == self.edit_parent.id).order_by('title')
class Form(forms.Form): """Test form.""" other = forms.StringField("Other") field = forms.StringField( "Field", validators=[ forms.validators.OptionalIf('other'), forms.validators.DataRequired(), ], )
class DomainForm(forms.Form): title = forms.StringField( __("Common name"), validators=[ forms.validators.DataRequired(), forms.validators.Length( min=1, max=250, message=__("%(max)d characters maximum") ), ], filters=[forms.filters.strip()], description=__( "The name of your organization, excluding legal suffixes like Pvt Ltd" ), ) legal_title = forms.StringField( __("Legal name"), validators=[ forms.validators.Optional(), forms.validators.Length( min=1, max=250, message=__("%%(max)d characters maximum") ), ], filters=[forms.filters.none_if_empty()], description=__("Optional — The full legal name of your organization"), ) # logo_url = forms.URLField( # __("Logo URL"), # TODO: Use ImgeeField # validators=[ # forms.validators.Optional(), # forms.validators.Length( # min=0, max=250, message=__("%%(max)d characters maximum") # ), # ], # description=Markup( # __( # u"Optional — Your organization’s logo. " # u"Upload at <a target='_blank' href='https://images.hasgeek.com/'>images.hasgeek.com</a> " # u"and use the Direct Link URL" # ) # ), # ) description = forms.TinyMce4Field( __("Description"), description=__( "Who are you and why should someone work for you? Tell your story" ), content_css=content_css, validators=[ forms.validators.AllUrlsValid(invalid_urls=invalid_urls), forms.validators.NoObfuscatedEmail( __("Do not include contact information here") ), ], )
class TicketClientForm(forms.Form): name = forms.StringField(__("Name"), validators=[forms.validators.DataRequired()]) clientid = forms.StringField(__("Client id"), validators=[forms.validators.DataRequired()]) client_eventid = forms.StringField( __("Client event id"), validators=[forms.validators.DataRequired()]) client_secret = forms.StringField( __("Client event secret"), validators=[forms.validators.DataRequired()]) client_access_token = forms.StringField( __("Client access token"), validators=[forms.validators.DataRequired()])
class UserGroupForm(forms.Form): name = forms.StringField(__("URL name"), validators=[ forms.validators.DataRequired(), forms.validators.ValidName(), AvailableName() ]) title = forms.StringField(__("Title"), validators=[forms.validators.DataRequired()]) users = forms.TextAreaField( __("Users"), validators=[forms.validators.DataRequired()], description=__("Usernames or email addresses, one per line"))
class OrderSessionForm(forms.Form): utm_campaign = forms.StringField(__("UTM Campaign"), filters=[trim(250)]) utm_source = forms.StringField(__("UTM Source"), filters=[trim(250)]) utm_medium = forms.StringField(__("UTM Medium"), filters=[trim(250)]) utm_term = forms.StringField(__("UTM Term"), filters=[trim(250)]) utm_content = forms.StringField(__("UTM Content"), filters=[trim(250)]) utm_id = forms.StringField(__("UTM Id"), filters=[trim(250)]) gclid = forms.StringField(__("Gclid"), filters=[trim(250)]) referrer = forms.StringField(__("Referrer"), filters=[trim(2083)]) host = forms.StringField(__("Host"), filters=[trim(2083)])
class SessionForm(forms.Form): title = forms.StringField( __("Title"), validators=[forms.validators.DataRequired()], filters=[forms.filters.strip()], ) venue_room_id = forms.SelectField(__("Room"), choices=[], coerce=nullint, validators=[forms.validators.Optional()]) description = forms.MarkdownField(__("Description"), validators=[forms.validators.Optional()]) speaker = forms.StringField( __("Speaker"), validators=[ forms.validators.Optional(), forms.validators.Length(max=200) ], filters=[forms.filters.strip()], ) speaker_bio = forms.MarkdownField(__("Speaker bio"), validators=[forms.validators.Optional()]) banner_image_url = forms.URLField( __("Banner image URL"), description=__("From images.hasgeek.com, with 16:9 aspect ratio." " Should be < 50 kB in size"), validators=[ forms.validators.Optional(), forms.validators.Length(max=2000), image_url_validator(), ], ) is_break = forms.BooleanField(__("This session is a break period"), default=False) featured = forms.BooleanField(__("This is a featured session"), default=False) start_at = forms.HiddenField(__("Start Time"), validators=[forms.validators.DataRequired()]) end_at = forms.HiddenField(__("End Time"), validators=[forms.validators.DataRequired()]) video_url = forms.StringField( __("Video URL"), description=__("URL of the uploaded video after the session is over"), validators=[ forms.validators.Optional(), forms.validators.ValidUrl(), forms.validators.Length(max=2000), ], )
class OrderRefundForm(forms.Form): amount = forms.IntegerField( __("Amount"), validators=[ forms.validators.DataRequired(__("Please specify an amount")) ], ) internal_note = forms.StringField( __("Internal note"), validators=[ forms.validators.DataRequired( __("Please specify a note for future reference")), forms.validators.Length(max=250), ], description=__("Add a note for future reference"), filters=[forms.filters.none_if_empty()], ) refund_description = forms.StringField( __("Refund description"), validators=[ forms.validators.DataRequired( __("Please specify a description for the invoice")), forms.validators.Length(max=250), ], description=__("Description for the invoice"), filters=[forms.filters.none_if_empty()], ) note_to_user = forms.MarkdownField( __("Note to user"), validators=[ forms.validators.DataRequired( __("Please specify a note for the buyer")) ], description=__("Send this note to the buyer"), filters=[forms.filters.none_if_empty()], ) def validate_amount(self, field): requested_refund_amount = field.data order = self.edit_parent if not order.paid_amount: raise StopValidation( __("Refunds can only be issued for paid orders")) if (order.refunded_amount + requested_refund_amount) > order.paid_amount: raise StopValidation( __("Invalid refund amount! Must be lesser than {amount}, the net amount paid for the order" .format(amount=order.net_amount)))
class CampaignContentForm(forms.Form): subject = forms.StringField( __("Subject"), description=__("A subject title shown to viewers"), validators=[forms.validators.Optional()], filters=[forms.filters.strip(), forms.filters.none_if_empty()], ) blurb = forms.TinyMce4Field( __("Blurb"), description=__( "Teaser to introduce the campaign and convince users to interact" ), content_css=content_css, validators=[forms.validators.Optional(), forms.validators.AllUrlsValid()], ) description = forms.TinyMce4Field( __("Description"), description=__("Optional additional content to follow after the blurb"), content_css=content_css, validators=[forms.validators.Optional(), forms.validators.AllUrlsValid()], ) banner_image = forms.URLField( __("Banner image URL"), validators=[forms.validators.Optional()], # TODO: Use ImgeeField description=__("An image to illustrate your campaign"), ) banner_location = forms.RadioField( __("Banner location"), choices=list(BANNER_LOCATION.items()), coerce=int, description=__("Where should this banner appear relative to text?"), )
class CategoryForm(forms.Form): title = forms.StringField(__("Category title"), validators=[forms.validators.DataRequired(__("Please specify a title")), forms.validators.Length(max=250)], filters=[forms.filters.strip()]) seq = forms.IntegerField(__("Sequence"), description=__("The sequence of the category on the listing"), validators=[forms.validators.DataRequired(__("Please specify the sequence order")), available_seq])
class AuthClientPermissionEditForm(forms.Form): """ Edit a user or team's permissions """ perms = forms.StringField(__("Permissions"), validators=[permission_validator])
class LoginForm(forms.Form): username = forms.StringField( __("Username or Email"), validators=[forms.validators.DataRequired()], widget_attrs={ 'autocorrect': 'none', 'autocapitalize': 'none' }, ) password = forms.PasswordField( __("Password"), validators=[forms.validators.DataRequired()]) def validate_username(self, field): existing = getuser(field.data) if existing is None: raise forms.ValidationError(_("User does not exist")) def validate_password(self, field): if not self.username.data: # Can't validate password without a user return user = getuser(self.username.data) if user and not user.pw_hash: raise LoginPasswordResetException() if user is None or not user.password_is(field.data): if not self.username.errors: raise forms.ValidationError(_("Incorrect password")) self.user = user
class CampaignForm(forms.Form): title = forms.StringField( __("Title"), description=__("A reference name for looking up this campaign again"), validators=[ forms.validators.DataRequired(__("A title is required")), forms.validators.StripWhitespace() ]) start_at = forms.DateTimeField(__("Start at"), timezone=lambda: g.user.timezone if g.user else None) end_at = forms.DateTimeField(__("End at"), timezone=lambda: g.user.timezone if g.user else None) public = forms.BooleanField(__("This campaign is live")) position = forms.RadioField(__("Display position"), choices=CAMPAIGN_POSITION.items(), coerce=int) priority = forms.IntegerField( __("Priority"), default=0, description=__( "A larger number is higher priority when multiple campaigns are running on the " "same dates. 0 implies lowest priority")) boards = QuerySelectMultipleField( __("Boards"), widget=ListWidget(), option_widget=CheckboxInput(), query_factory=lambda: Board.query.order_by('title'), get_label='title', validators=[forms.validators.Optional()], description=__(u"Select the boards this campaign is active on")) geonameids = forms.GeonameSelectMultiField( "Locations", description=__( "This campaign will be targetted at users and jobs with matching locations" )) user_required = forms.RadioField(__("User is required"), coerce=getbool, choices=[(None, __("N/A")), (True, __("Yes")), (False, __("No"))]) flags = forms.RadioMatrixField( "Flags", coerce=getbool, fields=Campaign.flag_choices, description=__( "All selected flags must match the logged in user for the campaign to be shown" ), choices=[('None', __("N/A")), ('True', __("True")), ('False', __("False"))]) content = forms.FormField(CampaignContentForm, __("Campaign content")) def validate_geonameids(self, field): field.data = [int(x) for x in field.data if x.isdigit()] def validate_end_at(self, field): if field.data <= self.start_at.data: raise forms.ValidationError( __(u"The campaign can’t end before it starts"))
class DomainForm(forms.Form): title = forms.StringField( __(u"Common name"), validators=[ forms.validators.DataRequired(), forms.validators.StripWhitespace() ], description=__( "The name of your organization, excluding legal suffixes like Pvt Ltd" )) legal_title = forms.NullTextField( __("Legal name"), validators=[forms.validators.Optional()], description=__(u"Optional — The full legal name of your organization")) logo_url = forms.URLField( __("Logo URL"), validators=[forms.validators.Optional()], # TODO: Use ImgeeField description=__(u"Optional — Your organization’s logo")) description = forms.TinyMce4Field( __("Description"), description=__( "Who are you and why should someone work for you? Tell your story" ), content_css=content_css, validators=[ forms.validators.AllUrlsValid(invalid_urls=invalid_urls), forms.validators.NoObfuscatedEmail( u"Do not include contact information here") ])
class ProfileForm(forms.Form): fullname = forms.StringField(__("Full name"), validators=[forms.validators.DataRequired(), forms.validators.Length(max=80)]) email = forms.EmailField(__("Email address"), validators=[forms.validators.DataRequired(), forms.ValidEmail()], widget_attrs={'autocorrect': 'none', 'autocapitalize': 'none'}) username = forms.AnnotatedTextField(__("Username"), validators=[forms.validators.DataRequired()], filters=[forms.filters.none_if_empty()], prefix=u"https://hasgeek.com/…", widget_attrs={'autocorrect': 'none', 'autocapitalize': 'none'}) timezone = forms.SelectField(__("Timezone"), validators=[forms.validators.DataRequired()], choices=timezones) def validate_username(self, field): # # Usernames are now mandatory. This should be commented out: # if not field.data: # field.data = None # return field.data = field.data.lower() # Usernames can only be lowercase if not valid_username(field.data): raise forms.ValidationError(_("Usernames can only have alphabets, numbers and dashes (except at the ends)")) if field.data in current_app.config.get('RESERVED_USERNAMES', []): raise forms.ValidationError(_("This name is reserved")) if not self.edit_user.is_valid_username(field.data): raise forms.ValidationError(_("This username is taken")) # TODO: Move to function and place before ValidEmail() def validate_email(self, field): field.data = field.data.lower() # Convert to lowercase existing = UserEmail.get(email=field.data) if existing is not None and existing.user != self.edit_obj: raise forms.ValidationError(_("This email address has been claimed by another user"))