@ -23,6 +23,19 @@ def isExpired(course_id):
return True
return True
return False
return False
def isCourseFull ( course ) :
students = course . get ( ' students ' , ' ' ) # Because it crashes with ['students'], we have to put a default value: '' here
if not students :
return False
try :
places = int ( course [ ' places ' ] )
if len ( students . split ( ' , ' ) ) > = places :
return True
return False
except :
return False
def getPersonId ( person_name , person_role ) :
def getPersonId ( person_name , person_role ) :
query = f " @name: { person_name } @role: { person_role } "
query = f " @name: { person_name } @role: { person_role } "
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
@ -40,7 +53,7 @@ def getCourseId2(course_title, course_teacher):
return False
return False
def getCourseId ( course ) :
def getCourseId ( course ) :
return getCourseId2 ( course . get ( " title " ) , course . get ( " teacher " ) )
return getCourseId2 ( course [ ' title ' ] , course [ ' teacher ' ] )
@ -68,7 +81,7 @@ def isPersonRegisteredToCourse(course):
for key in course_keys :
for key in course_keys :
course_data = redis_connection . hgetall ( key )
course_data = redis_connection . hgetall ( key )
if personLoggedIn [ ' role ' ] == " Student " :
if personLoggedIn [ ' role ' ] == " Student " :
if person_id in course_data . get ( " students " , " " ) . split ( " , " ) :
if person_id in course_data . get ( ' students ' , ' ' ) . split ( " , " ) :
current_course_id = getCourseId2 ( course_data [ ' title ' ] , course_data [ ' teacher ' ] )
current_course_id = getCourseId2 ( course_data [ ' title ' ] , course_data [ ' teacher ' ] )
if current_course_id == False :
if current_course_id == False :
continue
continue
@ -76,7 +89,7 @@ def isPersonRegisteredToCourse(course):
return True
return True
return False
return False
def details ( request , course_id ):
def details ( request , course_id , error_message = ' ' ):
global redis_connection
global redis_connection
global cancel
global cancel
global personLoggedIn
global personLoggedIn
@ -90,19 +103,19 @@ def details(request, course_id):
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
if not teacher :
if not teacher :
raise Http404 ( " Teacher does not exist " )
raise Http404 ( " Teacher does not exist " )
course [ ' teacher_name ' ] = teacher . get ( ' name ' )
course [ ' teacher_name ' ] = teacher [ ' name ' ]
register = isPersonRegisteredToCourse ( course )
register = isPersonRegisteredToCourse ( course )
return render ( request , ' details.html ' , { ' course ' : course , ' person ' : personLoggedIn , ' register ' : register } )
full = isCourseFull ( course )
return render ( request , ' details.html ' , { ' course ' : course , ' person ' : personLoggedIn , ' register ' : register , ' full ' : full , ' error_message ' : error_message } )
# Handle error messages.
def register ( request ) :
def register ( request ) :
global personLoggedIn
global personLoggedIn
global redis_connection
global redis_connection
global cancel
global cancel
cancel = True
cancel = True
if request . method == ' POST ' :
if request . method == ' POST ' :
person_name = request . POST . get ( ' name ' )
person_name = request . POST [ ' name ' ]
person_role = request . POST . get ( ' role ' )
person_role = request . POST [ ' role ' ]
query = f " @name: { person_name } @role: { person_role } "
query = f " @name: { person_name } @role: { person_role } "
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
# First element = number of results
# First element = number of results
@ -124,8 +137,8 @@ def login(request):
global cancel
global cancel
cancel = True
cancel = True
if request . method == ' POST ' :
if request . method == ' POST ' :
person_name = request . POST . get ( ' name ' )
person_name = request . POST [ ' name ' ]
person_role = request . POST . get ( ' role ' )
person_role = request . POST [ ' role ' ]
query = f " @name: { person_name } @role: { person_role } "
query = f " @name: { person_name } @role: { person_role } "
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
results = redis_connection . execute_command ( ' FT.SEARCH ' , ' idx:persons ' , query )
@ -164,19 +177,15 @@ def courses(request):
course_keys = redis_connection . keys ( f " course:* " )
course_keys = redis_connection . keys ( f " course:* " )
courses = [ ]
courses = [ ]
expired_courses = [ ]
for key in course_keys :
for key in course_keys :
course_data = redis_connection . hgetall ( key )
course_data = redis_connection . hgetall ( key )
if personLoggedIn [ ' role ' ] == " Student " :
if personLoggedIn [ ' role ' ] == " Student " :
if person_id in course_data . get ( " students " , " " ) . split ( " , " ) :
if person_id in course_data . get ( ' students ' , ' ' ) . split ( " , " ) :
course_id = getCourseId2 ( course_data [ ' title ' ] , course_data [ ' teacher ' ] )
course_id = getCourseId2 ( course_data [ ' title ' ] , course_data [ ' teacher ' ] )
if course_id == False :
if course_id == False :
continue
continue
course_data [ ' id ' ] = course_id . split ( " : " ) [ 1 ]
course_data [ ' id ' ] = course_id . split ( " : " ) [ 1 ]
if isExpired ( course_data [ ' id ' ] ) :
courses . append ( course_data )
expired_courses . append ( course_data )
else :
courses . append ( course_data )
else :
else :
teacher_id = course_data [ " teacher " ]
teacher_id = course_data [ " teacher " ]
if teacher_id == person_id :
if teacher_id == person_id :
@ -184,11 +193,8 @@ def courses(request):
if course_id == False :
if course_id == False :
continue
continue
course_data [ ' id ' ] = course_id . split ( " : " ) [ 1 ]
course_data [ ' id ' ] = course_id . split ( " : " ) [ 1 ]
if isExpired ( course_data [ ' id ' ] ) :
courses . append ( course_data )
expired_courses . append ( course_data )
return render ( request , ' courses.html ' , { ' person ' : personLoggedIn , ' courses ' : courses } )
else :
courses . append ( course_data )
return render ( request , ' courses.html ' , { ' person ' : personLoggedIn , ' courses ' : courses , ' expired_courses ' : expired_courses } )
def change_profile ( request ) :
def change_profile ( request ) :
global personLoggedIn
global personLoggedIn
@ -198,8 +204,8 @@ def change_profile(request):
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
if request . method == ' POST ' :
if request . method == ' POST ' :
person_name = request . POST . get ( ' name ' )
person_name = request . POST [ ' name ' ]
person_role = request . POST . get ( ' role ' )
person_role = request . POST [ ' role ' ]
person_id = getPersonId ( personLoggedIn [ " name " ] , personLoggedIn [ " role " ] )
person_id = getPersonId ( personLoggedIn [ " name " ] , personLoggedIn [ " role " ] )
if not person_id :
if not person_id :
@ -234,9 +240,9 @@ def delete_course(course_id):
def delete_course_view ( request , course_id ) :
def delete_course_view ( request , course_id ) :
global personLoggedIn
global personLoggedIn
res = delete_course ( course_id )
if isExpired ( course_id ) :
if isExpired ( course_id ) :
raise Http404 ( " Course has expired... Get faster next time! " )
raise Http404 ( " Course has expired... Get faster next time! " )
res = delete_course ( course_id )
if not res :
if not res :
return courses ( request )
return courses ( request )
return courses ( request )
return courses ( request )
@ -287,11 +293,11 @@ def create_course_form(request):
if personLoggedIn == ' ' :
if personLoggedIn == ' ' :
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
if request . method == ' POST ' :
if request . method == ' POST ' :
course_title = request . POST . get ( ' title ' )
course_title = request . POST [ ' title ' ]
course_summary = request . POST . get ( ' summary ' )
course_summary = request . POST [ ' summary ' ]
course_level = request . POST . get ( ' level ' )
course_level = request . POST [ ' level ' ]
course_places = request . POST . get ( ' places ' )
course_places = request . POST [ ' places ' ]
course_teacher = getPersonId ( personLoggedIn . get ( ' name ' ) , personLoggedIn . get ( ' role ' ) ) . split ( " : " ) [ 1 ]
course_teacher = getPersonId ( personLoggedIn [ ' name ' ] , personLoggedIn [ ' role ' ] ) . split ( " : " ) [ 1 ]
create_course ( course_title , course_summary , course_level , course_places , course_teacher )
create_course ( course_title , course_summary , course_level , course_places , course_teacher )
return courses ( request )
return courses ( request )
@ -307,11 +313,11 @@ def update_course_form(request, course_id):
if personLoggedIn == ' ' :
if personLoggedIn == ' ' :
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
return render ( request , ' login.html ' , { ' person ' : Person ( name = " " , role = " " ) , " error_message " : " You must login! " } )
if request . method == ' POST ' :
if request . method == ' POST ' :
course_title = request . POST . get ( ' title ' )
course_title = request . POST [ ' title ' ]
course_summary = request . POST . get ( ' summary ' )
course_summary = request . POST [ ' summary ' ]
course_level = request . POST . get ( ' level ' )
course_level = request . POST [ ' level ' ]
course_places = request . POST . get ( ' places ' )
course_places = request . POST [ ' places ' ]
course_teacher = getPersonId ( personLoggedIn . get ( ' name ' ) , personLoggedIn . get ( ' role ' ) ) . split ( " : " ) [ 1 ]
course_teacher = getPersonId ( personLoggedIn [ ' name ' ] , personLoggedIn [ ' role ' ] ) . split ( " : " ) [ 1 ]
update_course ( course_id , course_title , course_summary , course_level , course_places , course_teacher )
update_course ( course_id , course_title , course_summary , course_level , course_places , course_teacher )
return courses ( request )
return courses ( request )
@ -328,6 +334,15 @@ def course_register(course_id, person_id):
if person_id in students . split ( ' , ' ) :
if person_id in students . split ( ' , ' ) :
return True
return True
try :
places = int ( course [ ' places ' ] )
if students != ' ' :
students_nb = len ( students . split ( ' , ' ) )
if students_nb and students_nb > = places :
return False
except :
return False
if not students :
if not students :
new_students = person_id
new_students = person_id
else :
else :
@ -370,10 +385,10 @@ def course_register_view(request, course_id):
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
if not teacher :
if not teacher :
raise Http404 ( " Teacher does not exist " )
raise Http404 ( " Teacher does not exist " )
course [ ' teacher_name ' ] = teacher . get ( ' name ' )
course [ ' teacher_name ' ] = teacher [ ' name ' ]
if course_register ( course_id , person_id ) :
if course_register ( course_id , person_id ) :
return render( request , ' details.html ' , { ' person ' : personLoggedIn , ' course ' : course , ' register ' : True } )
return details( request , course_id )
return render( request , ' details.html ' , { ' person ' : personLoggedIn , ' course ' : course , ' register ' : False , " error_message " : " Could not register to the course. Try again later. " } )
return details( request , course_id , " Could not register to the course. Try again later. " )
def course_unregister_view ( request , course_id ) :
def course_unregister_view ( request , course_id ) :
global personLoggedIn
global personLoggedIn
@ -392,10 +407,10 @@ def course_unregister_view(request, course_id):
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
teacher = redis_connection . hgetall ( f " person: { course [ ' teacher ' ] } " )
if not teacher :
if not teacher :
raise Http404 ( " Teacher does not exist " )
raise Http404 ( " Teacher does not exist " )
course [ ' teacher_name ' ] = teacher . get ( ' name ' )
course [ ' teacher_name ' ] = teacher [ ' name ' ]
if course_unregister ( course_id , person_id ) :
if course_unregister ( course_id , person_id ) :
return render( request , ' details.html ' , { ' person ' : personLoggedIn , ' course ' : course , ' register ' : False } )
return details( request , course_id )
return render( request , ' details.html ' , { ' person ' : personLoggedIn , ' course ' : course , ' register ' : False , " error_message " : " Could not unregister from the course. Try again later. " } )
return details( request , course_id , " Could not unregister to the course. Try again later. " )
def refresh_expire ( course_id ) :
def refresh_expire ( course_id ) :
course = redis_connection . hgetall ( f " course: { course_id } " )
course = redis_connection . hgetall ( f " course: { course_id } " )
@ -459,7 +474,7 @@ def search_form(request):
global cancel
global cancel
cancel = True
cancel = True
if request . method == ' POST ' :
if request . method == ' POST ' :
keywords = request . POST . get ( ' keywords ' )
keywords = request . POST [ ' keywords ' ]
courses = [ ]
courses = [ ]
courses_id = search ( keywords )
courses_id = search ( keywords )
for course_id in courses_id :
for course_id in courses_id :