2022-05-16 22:20:36 +02:00
# Functions dependent on advlabdb.models
2021-07-31 00:12:37 +02:00
from flask import flash , url_for
from flask_admin . menu import MenuLink
2021-06-02 23:43:41 +02:00
from flask_security import current_user
2022-05-16 22:20:36 +02:00
from sqlalchemy import select
2021-04-26 21:31:15 +02:00
2022-05-08 21:26:25 +02:00
from . import app , db
from . models import Semester
2021-03-19 13:41:52 +01:00
2021-05-17 22:36:24 +02:00
2022-05-16 18:35:42 +02:00
def sortedSemestersStartingWithNewest ( limit = 0 ) :
# Inserting an older semester is not allowed!
# Therefore, the id is enough.
stmt = select ( Semester ) . order_by ( Semester . id . desc ( ) )
if limit > 0 :
stmt = stmt . limit ( limit )
return db . session . execute ( stmt ) . scalars ( )
def lastSemester ( ) :
return sortedSemestersStartingWithNewest ( limit = 1 ) . first ( )
2022-04-12 15:00:12 +02:00
2022-05-17 00:42:49 +02:00
def setUserActiveSemester ( semester ) :
if semester is None :
flash ( f " Can not change the active semester to None! " , " error " )
return
2021-05-18 14:54:30 +02:00
2022-05-17 00:42:49 +02:00
if current_user . active_semester != semester :
try :
current_user . active_semester = semester
db . session . commit ( )
except Exception as ex :
flash ( str ( ex ) , " error " )
2021-07-11 13:48:13 +02:00
2022-05-17 00:42:49 +02:00
db . session . rollback ( )
2021-07-11 13:48:13 +02:00
else :
2022-05-17 00:42:49 +02:00
flash ( f " Active semester changed to { semester . repr ( ) } ! " , " warning " )
2021-07-31 00:12:37 +02:00
def initActiveSemesterMenuLinks ( space ) :
with app . app_context ( ) :
2022-05-17 13:24:16 +02:00
try :
2022-05-16 18:37:57 +02:00
semesters = sortedSemestersStartingWithNewest ( )
2022-05-17 13:24:16 +02:00
for semester in semesters :
space . add_link (
MenuLink (
name = semester . repr ( ) ,
url = url_for ( " set_semester " ) + " ?semester_id= " + str ( semester . id ) ,
category = " Active semester " ,
)
2021-07-31 00:12:37 +02:00
)
2022-05-17 13:24:16 +02:00
except Exception as ex :
print (
" ERROR: The Semester table does not exist yet! Therefore, menu links could not be generated. You can ignore this error if you are just initializing the database. "
2021-07-31 00:12:37 +02:00
)
2022-05-17 13:24:16 +02:00
else :
space . add_link ( MenuLink ( name = " Logout " , url = url_for ( " security.logout " ) ) )
2021-11-30 01:36:19 +01:00
def reportBadAttempt ( message ) :
print ( " BAD ATTEMPT: " , message ) # TODO: Log
2022-05-16 21:48:04 +02:00
def get_count ( table ) :
return db . session . scalar ( select ( func . count ( ) ) . select_from ( table ) )
2022-05-17 01:28:50 +02:00
def active_semester_repr ( ) :
active_semester = current_user . active_semester
repr = active_semester . repr ( )
if active_semester != lastSemester ( ) :
flash ( f " You are in the old semester { repr } ! " , " warning " )
return repr