2022-08-09 12:46:48 +00:00
from flask import Blueprint , flash , redirect , request , url_for
2022-08-15 20:22:36 +00:00
from flask_login import current_user
from flask_security . decorators import auth_required
2021-04-03 00:11:26 +00:00
2022-06-01 20:53:23 +00:00
from . model_dependent_funs import active_semester_str
2022-08-09 12:46:48 +00:00
from . models import Semester , db
2021-03-18 13:53:55 +00:00
2022-08-09 12:46:48 +00:00
bp = Blueprint ( " main " , __name__ , root_path = " / " , template_folder = " templates " )
2021-03-31 23:04:21 +00:00
2022-08-09 12:46:48 +00:00
@bp.app_context_processor
2021-03-20 14:41:22 +00:00
def util_processor ( ) :
2022-06-17 20:24:23 +00:00
author_email = " mobitar@students.uni-mainz.de "
2022-06-27 20:09:17 +00:00
footer = f " <hr><p style= ' font-size:14px; ' >This website is still under development (beta release)! If you have any questions, find any bugs or want some feature, please write a formless email (german/english) to Mo Bitar: <a href= ' mailto: { author_email } ' > { author_email } </a>. Feedback is also welcome :)</p><br> "
2022-08-09 12:46:48 +00:00
2022-06-01 20:53:23 +00:00
return dict ( active_semester_str = active_semester_str , current_user = current_user , footer = footer )
2021-03-20 14:41:22 +00:00
2021-03-31 23:04:21 +00:00
2022-08-09 12:46:48 +00:00
@bp.route ( " / " )
2021-03-18 13:53:55 +00:00
def index ( ) :
2021-05-17 20:15:50 +00:00
if current_user . has_role ( " admin " ) :
2022-06-28 14:57:55 +00:00
endpoint_base = " admin "
2021-05-17 20:15:50 +00:00
elif current_user . has_role ( " assistant " ) :
2022-06-28 14:57:55 +00:00
endpoint_base = " assistant "
2021-05-17 20:15:50 +00:00
else :
2021-09-11 19:20:36 +00:00
return redirect ( url_for ( " security.login " ) )
2021-03-18 22:20:59 +00:00
2022-09-17 13:55:09 +00:00
url = url_for ( endpoint_base + " .index " )
return redirect ( url )
@bp.route ( " /post-login " )
@auth_required ( )
def post_login ( ) :
current_active_semester = current_user . active_semester
if current_active_semester . done :
last_semester = Semester . lastSemester ( )
if not last_semester . done :
try :
current_user . active_semester = last_semester
db . session . commit ( )
except Exception as ex :
flash ( str ( ex ) , " error " )
db . session . rollback ( )
else :
flash (
f " Active semester changed to { last_semester } because the semester { current_active_semester } was marked as done! " ,
" warning " ,
)
if current_user . has_role ( " admin " ) :
endpoint_base = " admin "
else :
endpoint_base = " assistant "
2022-06-28 14:57:55 +00:00
if current_user . login_count == 1 :
2022-06-28 15:01:32 +00:00
url = url_for ( endpoint_base + " _docs.index " )
2022-06-28 14:57:55 +00:00
else :
url = url_for ( endpoint_base + " .index " )
return redirect ( url )