Files @ a65e79a6c323
Branch filter:

Location: C3L/C3L-Membership-Online-Form/c3l_membership/forms.py - annotation

Dennis Fink
Automatically download PDF
805cb46ada9a
7cf7d1e162a4
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
7cf7d1e162a4
6f06fc328a13
6f06fc328a13
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
7cf7d1e162a4
6f06fc328a13
6f06fc328a13
805cb46ada9a
805cb46ada9a
805cb46ada9a
805cb46ada9a
805cb46ada9a
6f06fc328a13
9b37bb918b8a
6f06fc328a13
805cb46ada9a
805cb46ada9a
6f06fc328a13
9b37bb918b8a
6f06fc328a13
805cb46ada9a
805cb46ada9a
805cb46ada9a
805cb46ada9a
805cb46ada9a
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
805cb46ada9a
6f06fc328a13
52127f437376
52127f437376
805cb46ada9a
805cb46ada9a
805cb46ada9a
52127f437376
6f06fc328a13
6f06fc328a13
805cb46ada9a
805cb46ada9a
805cb46ada9a
6f06fc328a13
6f06fc328a13
6f06fc328a13
6f06fc328a13
52127f437376
805cb46ada9a
805cb46ada9a
805cb46ada9a
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
262323080d4e
52127f437376
52127f437376
52127f437376
805cb46ada9a
52127f437376
52127f437376
52127f437376
52127f437376
6f06fc328a13
805cb46ada9a
805cb46ada9a
6f06fc328a13
6f06fc328a13
3e495ae230a2
9954f35f0971
6f06fc328a13
805cb46ada9a
3e495ae230a2
6f06fc328a13
9b37bb918b8a
6f06fc328a13
805cb46ada9a
3e495ae230a2
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
3e495ae230a2
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
3e495ae230a2
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
3e495ae230a2
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
43a5d40b28e0
6f06fc328a13
6f06fc328a13
6f06fc328a13
6f06fc328a13
6f06fc328a13
805cb46ada9a
6f06fc328a13
805cb46ada9a
6f06fc328a13
805cb46ada9a
from flask_babel import lazy_gettext
from flask_wtf import FlaskForm
from wtforms import (
    BooleanField,
    DateField,
    RadioField,
    StringField,
    SubmitField,
    ValidationError,
)
from wtforms.validators import Email, InputRequired, Length, Optional


class NotEqualTo:
    """
    Compares the values of two fields.
    :param fieldname:
        The name of the other field to compare to.
    :param message:
        Error message to raise in case of a validation error. Can be
        interpolated with `%(other_label)s` and `%(other_name)s` to provide a
        more helpful error.
    """

    def __init__(self, fieldname, message=None):
        self.fieldname = fieldname
        self.message = message

    def __call__(self, form, field):
        try:
            other = form[self.fieldname]
        except KeyError as exc:
            raise ValidationError(
                field.gettext("Invalid field name '%s'.") % self.fieldname
            ) from exc
        if field.data != other.data:
            return

        d = {
            "other_label": hasattr(other, "label")
            and other.label.text
            or self.fieldname,
            "other_name": self.fieldname,
        }
        message = self.message
        if message is None:
            message = field.gettext("Field must not be equal to %(other_name)s.")

        raise ValidationError(message % d)


class MembershipForm(FlaskForm):

    username = StringField(
        lazy_gettext("Username"),
        validators=[
            InputRequired(lazy_gettext("This field is required!")),
            Length(max=255),
        ],
    )

    email = StringField(
        lazy_gettext("E-Mail"),
        validators=[InputRequired(lazy_gettext("This field is required!")), Email()],
    )

    fullname = StringField(
        lazy_gettext("Full Name"),
        validators=[
            InputRequired(lazy_gettext("This field is required!")),
            Length(max=65536),
        ],
    )

    membership = RadioField(
        lazy_gettext("Membership Plan"),
        validators=[InputRequired(lazy_gettext("Please select one of the options!"))],
        choices=[
            (
                "regular",
                lazy_gettext(
                    "Regular membership - Membership with voting rights on the general assembly."
                ),
            ),
            (
                "supporting",
                lazy_gettext(
                    "Supporting membership - Membership without voting rights on the general assembly."
                ),
            ),
        ],
    )

    student = BooleanField(
        lazy_gettext(
            "I am a student and would like to have the reduced membership fees."
        ),
        validators=[
            Optional(),
            NotEqualTo(
                "starving",
                lazy_gettext(
                    "Student and Starving Hacker are mutually exclusive! Please select only one of them."
                ),
            ),
        ],
    )

    starving = BooleanField(
        lazy_gettext(
            "I am a starving hacker and cannot afford the membership! (Please get in touch with us at info@c3l.lu before filling out this membership form)"
        )
    )

    payment = RadioField(
        lazy_gettext("Payment Options"),
        validators=[InputRequired(lazy_gettext("Please select one of the options!"))],
    )

    birthday = DateField(lazy_gettext("Birthday"), validators=[Optional()])

    street = StringField(
        lazy_gettext("Nr., Street"),
        validators=[Optional(), Length(max=4000)],
    )

    zip = StringField(
        lazy_gettext("Postal Code"),
        validators=[Optional(), Length(max=30)],
    )

    city = StringField(
        lazy_gettext("City/Town"),
        validators=[Optional(), Length(max=500)],
    )

    state = StringField(
        lazy_gettext("State/County/Province"),
        validators=[Optional(), Length(max=500)],
    )

    country = StringField(
        lazy_gettext("Country"),
        validators=[Optional(), Length(max=500)],
    )

    terms = BooleanField(
        lazy_gettext(
            'By submitting this membership application, you agree to have read and understood the <a href="http://statutes.c3l.lu">statutes of the Chaos Computer Club Lëtzebuerg A.S.B.L.</a>.'
        ),
        validators=[InputRequired()],
    )

    minor_member = BooleanField(
        lazy_gettext(
            "I am under 18 years of age and have the approval of my legal representative."
        )
    )
    submit = SubmitField(lazy_gettext("Become a member"))