Tracking PR for registration rewrite #5
8 changed files with 83 additions and 22 deletions
|
@ -1,10 +1,18 @@
|
||||||
from flask import Blueprint, render_template
|
from flask import Blueprint, flash, render_template, request
|
||||||
from flask_login import login_required
|
from flask_login import current_user, login_required
|
||||||
|
|
||||||
bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
||||||
|
|
||||||
|
from goathacks.dashboard import forms
|
||||||
|
from goathacks import db
|
||||||
|
|
||||||
@bp.route("/")
|
@bp.route("/", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def home():
|
def home():
|
||||||
return render_template("dashboard.html")
|
form = forms.ShirtAndAccomForm(request.form)
|
||||||
|
if request.method == "POST" and form.validate():
|
||||||
|
current_user.shirt_size = request.form.get('shirt_size')
|
||||||
|
current_user.accomodations = request.form.get('accomodations')
|
||||||
|
db.session.commit()
|
||||||
|
flash("Updated successfully")
|
||||||
|
return render_template("dashboard.html", form=form)
|
||||||
|
|
9
goathacks/dashboard/forms.py
Normal file
9
goathacks/dashboard/forms.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from flask_wtf import FlaskForm
|
||||||
|
from wtforms import RadioField, TextAreaField
|
||||||
|
from wtforms.validators import DataRequired
|
||||||
|
|
||||||
|
class ShirtAndAccomForm(FlaskForm):
|
||||||
|
shirt_size = RadioField("Shirt size", choices=["XS", "S", "M", "L", "XL",
|
||||||
|
"None"],
|
||||||
|
validators=[DataRequired()])
|
||||||
|
accomodations = TextAreaField("Special needs and/or Accomodations")
|
|
@ -16,6 +16,7 @@ class User(db.Model, UserMixin):
|
||||||
waitlisted = Column(Boolean, nullable=False, default=False)
|
waitlisted = Column(Boolean, nullable=False, default=False)
|
||||||
shirt_size = Column(String, nullable=True)
|
shirt_size = Column(String, nullable=True)
|
||||||
accomodations = Column(String, nullable=True)
|
accomodations = Column(String, nullable=True)
|
||||||
|
checked_in = Column(Boolean, nullable=False, default=False)
|
||||||
|
|
||||||
|
|
||||||
@login.user_loader
|
@login.user_loader
|
||||||
![]() The data was required by mlh, still could be nice to have so I'd keep it The data was required by mlh, still could be nice to have so I'd keep it
|
|||||||
|
|
|
@ -145,3 +145,13 @@ form input[type="submit"] {
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border-color: #26a69a;
|
border-color: #26a69a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form input[type="radio"] {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form label {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 25px !important;
|
||||||
|
}
|
||||||
|
|
|
@ -145,4 +145,12 @@ form {
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border-color: $color-accent;
|
border-color: $color-accent;
|
||||||
}
|
}
|
||||||
|
input[type="radio"] {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 25px !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,27 +70,18 @@
|
||||||
class="btn btn-lg btn-primary btn-invert">Discord</a>
|
class="btn btn-lg btn-primary btn-invert">Discord</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="row center justify-content-center" style="background-color: #974355; padding: 20; margin-left: 20; margin-right: 20; border-radius: 5px;">
|
<div class="row center justify-content-center" style="background-color: #974355; padding: 20; margin-left: 20; margin-right: 20; border-radius: 5px;">
|
||||||
<form method="get" action="/shirtpost">
|
<form method="post">
|
||||||
|
{{ form.csrf_token }}
|
||||||
<br>
|
<br>
|
||||||
<p><b>Optional Info:</b></p>
|
<p><b>Optional Info:</b></p>
|
||||||
<div>
|
<div>
|
||||||
<p>Shirt Size (Currently selected: {{shirt_size}})</p>
|
<p>Shirt Size (Currently selected: {{current_user.shirt_size}})</p>
|
||||||
<input type="radio" id="shirtxs" name="size" value="xs">
|
{% for subfield in form.shirt_size %}
|
||||||
<label for="shirtxs">XS</label>
|
{{subfield}}{{subfield.label}}
|
||||||
<input type="radio" id="shirts" name="size" value="s">
|
{% endfor %}
|
||||||
<label for="shirts">S</label>
|
|
||||||
<input type="radio" id="shirtm" name="size" value="m">
|
|
||||||
<label for="shirtm">M</label>
|
|
||||||
<input type="radio" id="shirtl" name="size" value="l">
|
|
||||||
<label for="shirtl">L</label>
|
|
||||||
<input type="radio" id="shirtxl" name="size" value="xl">
|
|
||||||
<label for="shirtxl">XL</label>
|
|
||||||
<input type="radio" id="shirtxxl" name="size" value="xxl">
|
|
||||||
<label for="shirtxxl">XXL</label>
|
|
||||||
<input type="radio" id="no" name="size" value="no">
|
|
||||||
<label for="no">Don't want one</label>
|
|
||||||
<p>Special Needs/Accommodations:</p>
|
<p>Special Needs/Accommodations:</p>
|
||||||
<input type="text" name="special_needs" id="special_needs" value="{{ special_needs }}">
|
<input type="text" name="accomodations"
|
||||||
|
id="special_needs" value="{{ current_user.accomodations }}">
|
||||||
</div>
|
</div>
|
||||||
<br><br>
|
<br><br>
|
||||||
<input name="save" class="btn btn-lg btn-primary btn-invert" type="submit" value="Save"/>
|
<input name="save" class="btn btn-lg btn-primary btn-invert" type="submit" value="Save"/>
|
||||||
|
@ -114,7 +105,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
{% if admin %}
|
{% if current_user.is_admin %}
|
||||||
<br>
|
<br>
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<a href="/admin"><p class="btn">Admin Dashboard</p></a>
|
<a href="/admin"><p class="btn">Admin Dashboard</p></a>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
|
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
|
||||||
|
<link href="../static/css/materialize.min.css" rel="stylesheet">
|
||||||
{% assets 'scss' %}
|
{% assets 'scss' %}
|
||||||
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}">
|
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}">
|
||||||
{% endassets %}
|
{% endassets %}
|
||||||
|
|
33
migrations/versions/3f427be4ce8a_.py
Normal file
33
migrations/versions/3f427be4ce8a_.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
"""empty message
|
||||||
|
|
||||||
|
Revision ID: 3f427be4ce8a
|
||||||
|
Revises: 55d77cdbbb49
|
||||||
|
Create Date: 2022-12-06 10:18:07.322064
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '3f427be4ce8a'
|
||||||
|
down_revision = '55d77cdbbb49'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('user', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('checked_in', sa.Boolean(),
|
||||||
|
nullable=False, default=False))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('user', schema=None) as batch_op:
|
||||||
|
batch_op.drop_column('checked_in')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
Loading…
Add table
Reference in a new issue
@willhockey20 is this something that actually needs to be stored? I only included it bc it was in the original registration system.