class EventContactInfoForm(IndicoForm): _contact_fields = ('contact_title', 'contact_emails', 'contact_phones') contact_title = StringField(_('Title'), [DataRequired()]) contact_emails = MultiStringField(_('Emails'), field=('email', _('email')), unique=True, flat=True, sortable=True) contact_phones = MultiStringField(_('Phone numbers'), field=('phone', _('number')), unique=True, flat=True, sortable=True) organizer_info = TextAreaField(_('Organizers')) additional_info = TextAreaField( _('Additional information'), widget=CKEditorWidget(simple=True, images=True, height=250), description=_("This text is displayed on the main conference page.")) def __init__(self, *args, **kwargs): self.event = kwargs.pop('event') super(EventContactInfoForm, self).__init__(*args, **kwargs) if self.event.type_ != EventType.lecture: del self.organizer_info if self.event.type_ != EventType.conference: del self.additional_info def validate_contact_emails(self, field): for email in field.data: if not is_valid_mail(email, False): raise ValidationError( _('Invalid email address: {}').format(escape(email)))
class MultiSelectConfigForm(object): options = MultiStringField(_('Options'), [DataRequired()], field=('option', _('option')), unique=True, uuid_field='id', sortable=True, description=_('Specify the answers the user can select')) min_choices = IntegerField(_("Minimum choices"), [HiddenUnless('is_required'), Optional(), NumberRange(min=0)], description=_("The minimum amount of options the user has to choose.")) max_choices = IntegerField(_("Maximum choices"), [HiddenUnless('is_required'), Optional(), NumberRange(min=1)], description=_("The maximum amount of options the user may choose.")) def _validate_min_max_choices(self): if (self.min_choices.data is not None and self.max_choices.data is not None and self.min_choices.data > self.max_choices.data): raise ValidationError(_('Maximum choices must be greater than minimum choices.')) def validate_min_choices(self, field): if field.data is None: return if field.data >= len(self.options.data): raise ValidationError(_("Minimum choices must be fewer than the total number of options.")) def validate_max_choices(self, field): if field.data is None: return self._validate_min_max_choices() if field.data > len(self.options.data): raise ValidationError(_("Maximum choices must be fewer or equal than the total number of options."))
class AdminUserSettingsForm(IndicoForm): notify_account_creation = BooleanField(_('Registration notifications'), widget=SwitchWidget(), description=_('Send an email to all administrators whenever someone ' 'registers a new local account.')) email_blacklist = MultiStringField(_('Email blacklist'), field=('email_blacklist', _('email')), unique=True, flat=True, description=_('Prevent users from creating Indico accounts with these email ' 'addresses. Supports wildcards, e.g. *@gmail.com')) allow_personal_tokens = BooleanField(_('Personal API tokens'), widget=SwitchWidget(), description=_('Whether users are allowed to generate personal API tokens. ' 'If disabled, only admins can create them, but users will ' 'still be able to regenerate the tokens assigned to them.'))
class SingleChoiceConfigForm(object): display_type = IndicoRadioField(_('Display type'), [DataRequired()], description=_('Widget that will be used to render the available options'), choices=[('radio', _('Radio buttons')), ('select', _('Drop-down list'))], default='radio') radio_display_type = IndicoRadioField(_('Alignment'), [DataRequired(), HiddenUnless('display_type', 'radio')], description=_('The arrangement of the options'), choices=[('vertical', _('Vertical')), ('horizontal', _('Horizontal'))]) options = MultiStringField(_('Options'), [DataRequired()], field=('option', _('option')), unique=True, uuid_field='id', sortable=True, description=_('Specify the options the user can choose from'))