diff --git a/ennstatus/root/forms.py b/ennstatus/root/forms.py --- a/ennstatus/root/forms.py +++ b/ennstatus/root/forms.py @@ -1,6 +1,7 @@ from flask_wtf import Form -from wtforms import SelectField -from wtforms.validators import DataRequired +from wtforms import SelectField, StringField, RadioField, BooleanField, SubmitField +from wtforms.validators import DataRequired, InputRequired, Email, Optional, Length + COUNTRIES = [ @@ -17,3 +18,50 @@ class BPMForm(Form): country = SelectField('Country', validators=[DataRequired()], choices=COUNTRIES) + + +class MembershipForm(Form): + + username = StringField('Username*', + validators=[ + InputRequired('This field is required!')] + ) + email = StringField('E-Mail*', + validators=[ + InputRequired('This field is required!'), + Email() + ] + ) + firstname = StringField('First Name', + validators=[Optional()], + ) + surname = StringField('Surname', + validators=[Optional()], + ) + street = StringField('Nr., Street', + validators=[Optional()], + ) + zip = StringField('ZIP-Code', + validators=[Length(max=30), Optional()], + ) + city = StringField('City/Town', + validators=[Optional()], + ) + country = StringField('Country', + validators=[Optional()], + ) + gpg = StringField('GPG-ID', + validators=[Optional()], + ) + + membership = RadioField('Membership Plan*', + validators=[DataRequired()], + choices=[ + ('regular', 'Regular membership (120€/year)'), + ('student', 'Student memnbership (60€/year)'), + ('starving', 'Starving Hacker - Get in touch with us at info@enn.lu'), + ] + ) + + c3l = BooleanField('Include "Chaos Computer Club Lëtzebuerg" Membership1') + submit = SubmitField('Become a member') diff --git a/ennstatus/root/functions.py b/ennstatus/root/functions.py new file mode 100644 --- /dev/null +++ b/ennstatus/root/functions.py @@ -0,0 +1,34 @@ +from flask import render_template, current_app + +from flask_mail import Mail, Message + +from ennstatus.status.functions import mail + + +def send_membership_mail(form): + try: + msg = Message('New membership application', sender='ennstatus@enn.lu') + msg.add_recipient(current_app.config['ENNSTATUS_MEMBERSHIP_MAIL']) + + msg.body = render_template('root/membership_mail.txt', + username=form.username.data, + email=form.email.data, + membership=form.membership.data, + c3l=form.c3l.data, + firstname=form.firstname.data, + surname=form.surname.data, + street=form.street.data, + zip=form.zip.data, + city=form.city.data, + country=form.country.data, + gpg=form.gpg.data + ) + print(msg.body) + mail.send(msg) + except KeyError: + current_app.logger.error('Membership admin not found!') + except AssertionError: + pass + except Exception as e: + current_app.logger.error('Unexpecter error: %s' % e, + exc_info=True) diff --git a/ennstatus/root/views.py b/ennstatus/root/views.py --- a/ennstatus/root/views.py +++ b/ennstatus/root/views.py @@ -1,8 +1,9 @@ from flask import (Blueprint, render_template, current_app, request, redirect, url_for) -from ennstatus.root.forms import BPMForm +from ennstatus.root.forms import BPMForm, MembershipForm from ennstatus.root.constants import BPM_ADDRESSES +from ennstatus.root.functions import send_membership_mail root_page = Blueprint('root', __name__) @@ -37,6 +38,20 @@ def member(): return render_template('root/member.html') +@root_page.route('/membership', methods=('GET', 'POST')) +def membership(): + + current_app.logger.info('Handling membership') + form = MembershipForm() + + if request.method == 'POST': + current_app.logger.debug('Validating form') + if form.validate_on_submit(): + send_membership_mail(form) + + return render_template('root/membership.html', form=form) + + @root_page.route('/contact', methods=('GET', 'POST')) def contact(): diff --git a/ennstatus/templates/root/member.html b/ennstatus/templates/root/member.html --- a/ennstatus/templates/root/member.html +++ b/ennstatus/templates/root/member.html @@ -34,14 +34,30 @@
Becoming a member is very simple. Just follow these steps:
-Using online form | +Using PDF form | +
---|---|
Fill out the online form. | +Download the following membership form and fill in the necessary information. | +
The form will automatically send a mail to our staff when you click the 'Become a member' button. | +Send the membership form per mail to info@enn.lu or to one ou our snailmail addresses. | +
Pay your annually membership fee. Use one of the payment methods (except Flattr or BPM Points) + specified on our donations page. | +|
Wait until we get back in touch with you. | +
Field marked with * are required!
+1: If you have decided to apply for the double membership, the membership fees are 150€/year for the regular + membership and 70€/year for the student membership.
+ +{% endblock %} diff --git a/ennstatus/templates/root/membership_mail.txt b/ennstatus/templates/root/membership_mail.txt new file mode 100644 --- /dev/null +++ b/ennstatus/templates/root/membership_mail.txt @@ -0,0 +1,21 @@ +Hi, + +We got a new membership application! + +Username: {{ username }} +E-Mail: {{ email }} +Membership Plan: {{ membership }} +Double Membership: {{ c3l }} + +Additional information: + +First Name: {{ firstname }} +Surname: {{ surname }} +Nr., Street: {{ street }} +ZIP-Code: {{ zip }} +City: {{ city }} +Country: {{ country }} +GPG-ID: {{ gpg }} + +Sincerely, +Ennstatus