diff --git a/advlabdb/forms.py b/advlabdb/forms.py
index b0dfbdf..bc47534 100644
--- a/advlabdb/forms.py
+++ b/advlabdb/forms.py
@@ -8,7 +8,7 @@ class RegistrationForm(FlaskForm):
email = StringField("Email",
validators=[DataRequired(), Email()])
admin = BooleanField("Admin")
- submit = SubmitField("Sign Up")
+ submit = SubmitField("Register")
def validate_email(self, email):
user = User.query.filter_by(email=email.data.lower()).first()
diff --git a/advlabdb/routes.py b/advlabdb/routes.py
index 78063fd..49afdd9 100644
--- a/advlabdb/routes.py
+++ b/advlabdb/routes.py
@@ -1,3 +1,4 @@
+import json
from advlabdb import app, user_datastore
from flask import render_template, request, url_for, flash, redirect, session
from flask_security import auth_required, roles_required, hash_password, current_user
@@ -22,8 +23,8 @@ def util_processor():
if "activeSemesterId" not in session:
session["activeSemesterId"] = lastSemesterId
elif session["activeSemesterId"] != lastSemesterId:
- flash(f"Warning: You are in the old semester {Semester.query.get(session['activeSemesterId']).label}!",
- "danger")
+ flash(f"You are in the old semester {Semester.query.get(session['activeSemesterId']).label}!",
+ "warning")
return Semester.query.get(session["activeSemesterId"]).label
def navbarItems(title):
@@ -64,9 +65,7 @@ def util_processor():
@app.route("/")
def index():
- title = "Index"
- return render_template(titleToTemplate(title) + ".html",
- title=title,
+ return render_template("index.html",
)
@@ -188,31 +187,47 @@ def groups():
)
-@app.route("/users")
+@app.route("/users", methods=["GET", "POST"])
@roles_required("admin")
def users():
- headerAndDataList = [["Email", "row.email"],
- ["Roles", "[role.name for role in row.roles]"],
- ["Assistant", "row.assistant"]]
+ if request.method == 'POST':
+ if "registerUser" in request.form:
+ return redirect(url_for("register"))
+ else:
+ headerAndDataList = [["Email", "row.email"],
+ ["Roles", "[role.name for role in row.roles]"],
+ ["Assistant", "row.assistant"]]
- table = makeTable(headerAndDataList=headerAndDataList,
- rows=User.query.all())
+ table = makeTable(headerAndDataList=headerAndDataList,
+ rows=User.query.filter(User.active == True).all(),
+ tableId="usersTab")
- title = "Users"
- return render_template(titleToTemplate(title) + ".html",
- title=title,
- table=table,
- )
+ title = "Users"
+ return render_template(titleToTemplate(title) + ".html",
+ title=title,
+ table=table,
+ )
-@app.route("/set_semester", methods=["GET"])
-@auth_required()
-def set_semester():
- session["activeSemesterId"] = int(request.args.get("semester_id"))
- title = "Index"
- return render_template(titleToTemplate(title) + ".html",
- title=title,
- )
+@app.route("/deactivate_users", methods=["GET"])
+@roles_required("admin")
+def deactivate_users():
+ usersJson = json.loads(request.args.get("json"))
+ deactivatedUsersEmails = []
+ for userJson in usersJson:
+ email = userJson["email"]
+ user = User.query.filter(User.email == email).first()
+ if user == current_user:
+ flash("You have tried to deactivate yourself as user!", "danger")
+ continue
+ if user_datastore.deactivate_user(user):
+ deactivatedUsersEmails.append(email)
+ db.session.commit()
+ if deactivatedUsersEmails == []:
+ flash(f"No users deactivated!", "warning")
+ else:
+ flash(f"Users with emails {deactivatedUsersEmails} deactivated!", "success")
+ return redirect(url_for("users"))
@app.route("/semesters")
@@ -231,6 +246,13 @@ def semesters():
)
+@app.route("/set_semester", methods=["GET"])
+@auth_required()
+def set_semester():
+ session["activeSemesterId"] = int(request.args.get("semester_id"))
+ return redirect(request.referrer)
+
+
@app.route("/register", methods=["GET", "POST"])
def register():
form = RegistrationForm()
@@ -241,7 +263,11 @@ def register():
email = form.email.data.lower()
admin = form.admin.data
- roles = ["assistant"] if not admin else ["admin"]
+ if admin:
+ roles = ["admin"]
+ flash("You have registered a new admin!", "danger")
+ else:
+ roles = ["assistant"]
user_datastore.create_user(email=email, password=passwordHash, roles=roles)
db.session.commit()
diff --git a/advlabdb/templates/layout.html b/advlabdb/templates/layout.html
index dd81bd6..b8e9c3b 100644
--- a/advlabdb/templates/layout.html
+++ b/advlabdb/templates/layout.html
@@ -76,5 +76,6 @@
+ {% block scripts %}{% endblock scripts %}