diff --git a/advlabdb/forms.py b/advlabdb/forms.py index 1f2d09d..e162180 100644 --- a/advlabdb/forms.py +++ b/advlabdb/forms.py @@ -7,11 +7,12 @@ from advlabdb.models import User class RegistrationForm(FlaskForm): email = StringField("Email", validators=[DataRequired(), Email()]) + assistant = BooleanField("Assistant", default=True) admin = BooleanField("Admin", default=False) submit = SubmitField("Register") - def validate_email(self, email): - user = User.query.filter_by(email=email.data.lower()).first() + def validate_email(form, field): + user = User.query.filter_by(email=field.data.lower()).first() if user: raise ValidationError("A user with this email address is already registered!") diff --git a/advlabdb/routes.py b/advlabdb/routes.py index 8efddfa..adc3ff4 100644 --- a/advlabdb/routes.py +++ b/advlabdb/routes.py @@ -188,12 +188,16 @@ def users(): ["Roles", "[role.name for role in row.roles]"], ["Assistant", "row.assistant"]] - table = makeTable(headerAndDataList=headerAndDataList, - rows=User.query.filter(User.active == True).all(), - tableId="usersTab") + activeUsersTable = makeTable(headerAndDataList=headerAndDataList, + rows=User.query.filter(User.active == True).all(), + tableId="activeUsersTable") + inactiveUsersTable = makeTable(headerAndDataList=headerAndDataList, + rows=User.query.filter(User.active == False).all(), + tableId="inactiveUsersTable") return render_template("users.html", - table=table, + activeUsersTable=activeUsersTable, + inactiveUsersTable=inactiveUsersTable, ) @@ -248,21 +252,31 @@ def register(): passwordHash = hash_password(password) email = form.email.data.lower() + assistant = form.assistant.data admin = form.admin.data + registered = True if admin: - roles = ["admin"] + if assistant: + roles = ["admin", "assistant"] + else: + roles = ["admin"] flash("You have registered a new admin!", "danger") - else: + elif assistant: roles = ["assistant"] + else: + flash("The user has to be assistant and/or admin!", "warning") + registered = False + + if registered: + newUser = user_datastore.create_user(email=email, password=passwordHash, roles=roles) + db.session.commit() + return render_template("registered.html", + email=email, + password=password, + roles=[role.name for role in newUser.roles], + ) - user_datastore.create_user(email=email, password=passwordHash, roles=roles) - db.session.commit() - return render_template("registered.html", - email=email, - password=password, - admin=admin, - ) return render_template("register.html", form=form, ) diff --git a/advlabdb/templates/register.html b/advlabdb/templates/register.html index 5a1549d..3961499 100644 --- a/advlabdb/templates/register.html +++ b/advlabdb/templates/register.html @@ -3,6 +3,7 @@ {% block content %}