1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-12-20 23:41:20 +00:00

Added changing active semester from admin view

This commit is contained in:
Mo 2021-05-17 16:55:04 +02:00
parent 6d32b1840d
commit 868c1e2d4d
4 changed files with 31 additions and 9 deletions

View file

@ -1,11 +1,24 @@
from flask_admin import AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_security import current_user
from flask import flash
from flask_admin.contrib.sqla import ModelView
from advlabdb.utils import userActiveSemester
def adminViewIsAccessible():
return current_user.has_role("admin")
def handleAdminView():
flash("User active semester: " + userActiveSemester(flashWarning=True).label)
class SecureAdminIndexView(AdminIndexView):
def is_accessible(self):
return current_user.has_role("admin")
return adminViewIsAccessible()
def _handle_view(self, *args, **kwargs):
handleAdminView()
return super()._handle_view(*args, **kwargs)
class SecureModelView(ModelView):
@ -13,4 +26,8 @@ class SecureModelView(ModelView):
can_set_page_size = True
def is_accessible(self):
return current_user.has_role("admin")
return adminViewIsAccessible()
def _handle_view(self, *args, **kwargs):
handleAdminView()
return super()._handle_view(*args, **kwargs)

View file

@ -1,5 +1,4 @@
from flask import url_for, render_template, flash, request
from advlabdb.customClasses import SecureModelView
from flask_admin.menu import MenuLink
from flask_admin.contrib.sqla.filters import BaseSQLAFilter
from flask_security import hash_password
@ -9,7 +8,7 @@ from wtforms.validators import DataRequired, Email
from advlabdb import admin, app, user_datastore, db
from advlabdb.models import *
from advlabdb.utils import randomPassword, userActiveSemester, partFromLabelInUserActiveSemester
from advlabdb.customClasses import SecureModelView
partsLabels = ["A/1", "A/2", "A/m", "B/1", "B/2"]
@ -168,4 +167,8 @@ admin.add_view(UserModelView(User, db.session))
admin.add_view(RoleModelView(Role, db.session))
with app.app_context():
admin.add_link(MenuLink(name="Home", url=url_for("index"), category="Links"))
semesters = Semester.query.all()
for semester in semesters:
admin.add_link(MenuLink(name=semester.label,
url=url_for("set_semester") + "?semester_id=" + str(semester.id),
category="Active semester"))

View file

@ -164,4 +164,5 @@ def deactivate_users():
def set_semester():
current_user.active_semester_id = int(request.args.get("semester_id"))
db.session.commit()
return redirect(url_for("index"))
flash("Active semester changed!", "warning")
return redirect(request.referrer)

View file

@ -72,7 +72,7 @@ def titleToTemplate(page):
return page.lower().replace(" ", "_")
def userActiveSemester():
def userActiveSemester(flashWarning=False):
lastSemesterId = Semester.query.all()[-1].id
if current_user.active_semester_id is None:
current_user.active_semester_id = lastSemesterId
@ -80,6 +80,7 @@ def userActiveSemester():
elif current_user.active_semester_id != lastSemesterId:
activeSemester = Semester.query.get(current_user.active_semester_id)
if activeSemester:
if flashWarning:
flash(f"You are in the old semester {activeSemester.label}!", "warning")
else:
current_user.active_semester_id = lastSemesterId