|
|
|
@ -9,19 +9,22 @@ from .models import Person
|
|
|
|
|
DEFAULT_EXPIRE_TIME = 120
|
|
|
|
|
EXPIRE_REFRESH_TIME = 60
|
|
|
|
|
|
|
|
|
|
personLoggedIn = ""
|
|
|
|
|
messages = [] # All messages obtained with pub/sub. Will refresh the view every time a message is received
|
|
|
|
|
redis_connection = redis.Redis(host='localhost', port=6379, decode_responses=True)
|
|
|
|
|
pub_sub = redis_connection.pubsub()
|
|
|
|
|
create_index(redis_connection=redis_connection)
|
|
|
|
|
|
|
|
|
|
def get_uuid4():
|
|
|
|
|
return str(uuid.uuid4()).replace('-', '')
|
|
|
|
|
|
|
|
|
|
def getCoursesFromPerson(person_id):
|
|
|
|
|
global redis_connection
|
|
|
|
|
course_keys = redis_connection.keys(f"course:*")
|
|
|
|
|
courses = []
|
|
|
|
|
person = redis_connection.hgetall(f"person:{person_id}")
|
|
|
|
|
for key in course_keys:
|
|
|
|
|
course_data = redis_connection.hgetall(key)
|
|
|
|
|
if personLoggedIn['role'] == "Student":
|
|
|
|
|
if person['role'] == "Student":
|
|
|
|
|
if person_id in course_data.get('students', '').split(","):
|
|
|
|
|
course_id = getCourseId2(course_data['title'], course_data['teacher'])
|
|
|
|
|
if course_id == False:
|
|
|
|
@ -80,16 +83,15 @@ def getCourseId(course):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def home(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
return render(request, 'home.html', {'person': personLoggedIn})
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
return render(request, 'home.html', {'person': person})
|
|
|
|
|
|
|
|
|
|
def isPersonRegisteredToCourse(course):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
def isPersonRegisteredToCourse(course, person):
|
|
|
|
|
global redis_connection
|
|
|
|
|
if not personLoggedIn:
|
|
|
|
|
if not person:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
person_id = getPersonId(personLoggedIn["name"], personLoggedIn["role"]).split(":")[1]
|
|
|
|
|
person_id = getPersonId(person["name"], person["role"]).split(":")[1]
|
|
|
|
|
if not person_id:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
@ -100,7 +102,7 @@ def isPersonRegisteredToCourse(course):
|
|
|
|
|
course_keys = redis_connection.keys(f"course:*")
|
|
|
|
|
for key in course_keys:
|
|
|
|
|
course_data = redis_connection.hgetall(key)
|
|
|
|
|
if personLoggedIn['role'] == "Student":
|
|
|
|
|
if person['role'] == "Student":
|
|
|
|
|
if person_id in course_data.get('students', '').split(","):
|
|
|
|
|
current_course_id = getCourseId2(course_data['title'], course_data['teacher'])
|
|
|
|
|
if current_course_id == False:
|
|
|
|
@ -110,8 +112,8 @@ def isPersonRegisteredToCourse(course):
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def details(request, course_id, error_message=''):
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
course = redis_connection.hgetall(f"course:{course_id}")
|
|
|
|
@ -122,13 +124,11 @@ def details(request, course_id, error_message=''):
|
|
|
|
|
if not teacher:
|
|
|
|
|
raise Http404("Teacher does not exist")
|
|
|
|
|
course['teacher_name'] = teacher['name']
|
|
|
|
|
register = isPersonRegisteredToCourse(course)
|
|
|
|
|
register = isPersonRegisteredToCourse(course, person)
|
|
|
|
|
full = isCourseFull(course)
|
|
|
|
|
return render(request, 'details.html', {'course': course, 'person': personLoggedIn, 'register': register, 'full': full, 'error_message': error_message})
|
|
|
|
|
return render(request, 'details.html', {'course': course, 'person': person, 'register': register, 'full': full, 'error_message': error_message})
|
|
|
|
|
|
|
|
|
|
def register(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
global redis_connection
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
person_name = request.POST['name']
|
|
|
|
|
person_role = request.POST['role']
|
|
|
|
@ -137,19 +137,19 @@ def register(request):
|
|
|
|
|
# First element = number of results
|
|
|
|
|
if results[0] > 0:
|
|
|
|
|
return render(request, 'register.html', {'person': Person(name="", role=""), "error_message": "This user already exists!"})
|
|
|
|
|
person_key = f"person:{uuid.uuid4()}"
|
|
|
|
|
person_key = f"person:{get_uuid4()}"
|
|
|
|
|
redis_connection.hset(person_key, mapping={
|
|
|
|
|
'name': person_name,
|
|
|
|
|
'role': person_role
|
|
|
|
|
})
|
|
|
|
|
personLoggedIn = redis_connection.hgetall(person_key)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
request.session["person"] = redis_connection.hgetall(person_key)
|
|
|
|
|
return home(request)
|
|
|
|
|
|
|
|
|
|
return render(request, 'register.html', {'person': Person(name="", role=""), "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
|
|
|
|
|
def login(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
global redis_connection
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
person_name = request.POST['name']
|
|
|
|
|
person_role = request.POST['role']
|
|
|
|
@ -158,7 +158,7 @@ def login(request):
|
|
|
|
|
results = redis_connection.execute_command('FT.SEARCH', 'idx:persons', query)
|
|
|
|
|
if results[0] > 0:
|
|
|
|
|
person_key = results[1]
|
|
|
|
|
personLoggedIn = redis_connection.hgetall(person_key)
|
|
|
|
|
request.session["person"] = redis_connection.hgetall(person_key)
|
|
|
|
|
return home(request)
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "No user found!"})
|
|
|
|
|
|
|
|
|
@ -171,44 +171,44 @@ def login_form(request):
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role="")})
|
|
|
|
|
|
|
|
|
|
def logout(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
personLoggedIn = ""
|
|
|
|
|
request.session["person"] = ""
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role="")})
|
|
|
|
|
|
|
|
|
|
def courses(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
if personLoggedIn == "":
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
if person == "":
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
person_id = getPersonId(personLoggedIn["name"], personLoggedIn["role"]).split(":")[1]
|
|
|
|
|
person_id = getPersonId(person["name"], person["role"]).split(":")[1]
|
|
|
|
|
|
|
|
|
|
courses = getCoursesFromPerson(person_id)
|
|
|
|
|
return render(request, 'courses.html', {'person': personLoggedIn, 'courses': courses})
|
|
|
|
|
return render(request, 'courses.html', {'person': person, 'courses': courses})
|
|
|
|
|
|
|
|
|
|
def change_profile(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
if personLoggedIn == '':
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
if person == '':
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
person_name = request.POST['name']
|
|
|
|
|
person_role = request.POST['role']
|
|
|
|
|
|
|
|
|
|
person_id = getPersonId(personLoggedIn["name"], personLoggedIn["role"])
|
|
|
|
|
person_id = getPersonId(person["name"], person["role"])
|
|
|
|
|
if not person_id:
|
|
|
|
|
return render(request, 'profile.html', {'person': personLoggedIn, "error_message": "Internal error: No user found!"})
|
|
|
|
|
return render(request, 'profile.html', {'person': person, "error_message": "Internal error: No user found!"})
|
|
|
|
|
redis_connection.hmset(person_id, mapping={"name": person_name, "role": person_role})
|
|
|
|
|
|
|
|
|
|
personLoggedIn["name"] = person_name
|
|
|
|
|
personLoggedIn["role"] = person_role
|
|
|
|
|
return render(request, 'profile.html', {'person': personLoggedIn})
|
|
|
|
|
person["name"] = person_name
|
|
|
|
|
person["role"] = person_role
|
|
|
|
|
request.session["person"] = person
|
|
|
|
|
return render(request, 'profile.html', {'person': person})
|
|
|
|
|
|
|
|
|
|
return login_form(request)
|
|
|
|
|
|
|
|
|
|
def profile(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
if personLoggedIn == '':
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
if person == '':
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
return render(request, 'profile.html', {'person': personLoggedIn})
|
|
|
|
|
return render(request, 'profile.html', {'person': person})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -223,7 +223,6 @@ def delete_course(course_id):
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def delete_course_view(request, course_id):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
res = delete_course(course_id)
|
|
|
|
@ -232,7 +231,7 @@ def delete_course_view(request, course_id):
|
|
|
|
|
return courses(request)
|
|
|
|
|
|
|
|
|
|
def create_course(course_title, course_summary, course_level, course_places, course_teacher):
|
|
|
|
|
course_id = uuid.uuid4()
|
|
|
|
|
course_id = get_uuid4()
|
|
|
|
|
redis_connection.hset(f"course:{course_id}", mapping={
|
|
|
|
|
"title": course_title,
|
|
|
|
|
"summary": course_summary,
|
|
|
|
@ -254,21 +253,21 @@ def update_course(course_id, course_title, course_summary, course_level, course_
|
|
|
|
|
publish(course_id, f"UPDATE: Course:{course_id} is now: Title: {course_title}, Summary: {course_summary}, Level: {course_level}, Places: {course_places}, Teacher: {course_teacher}")
|
|
|
|
|
|
|
|
|
|
def publish_message(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
courses_fetched = getCoursesFromPerson(getPersonId(personLoggedIn['name'], personLoggedIn['role']).split(":")[1])
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
courses_fetched = getCoursesFromPerson(getPersonId(person['name'], person['role']).split(":")[1])
|
|
|
|
|
for course in courses_fetched:
|
|
|
|
|
course['id'] = getCourseId(course).split(':')[1]
|
|
|
|
|
if not courses_fetched:
|
|
|
|
|
return courses(request)
|
|
|
|
|
return render(request, 'publish_message.html', {'person': personLoggedIn, 'courses': courses_fetched})
|
|
|
|
|
return render(request, 'publish_message.html', {'person': person, 'courses': courses_fetched})
|
|
|
|
|
|
|
|
|
|
def publish_message_form(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if personLoggedIn == '':
|
|
|
|
|
if person == '':
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
if personLoggedIn['role'] == 'Student':
|
|
|
|
|
return render(request, 'publish_message.html', {'person': personLoggedIn, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
if person['role'] == 'Student':
|
|
|
|
|
return render(request, 'publish_message.html', {'person': person, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
course_id = request.POST['course_id']
|
|
|
|
|
message = request.POST['message']
|
|
|
|
@ -278,14 +277,14 @@ def publish_message_form(request):
|
|
|
|
|
publish(course_id, message)
|
|
|
|
|
return publish_message(request)
|
|
|
|
|
|
|
|
|
|
return render(request, 'publish_message.html', {'person': personLoggedIn, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
return render(request, 'publish_message.html', {'person': person, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
|
|
|
|
|
def create_course_view(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
return render(request, 'create.html', {'person': personLoggedIn})
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
return render(request, 'create.html', {'person': person})
|
|
|
|
|
|
|
|
|
|
def update_course_view(request, course_id):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
course = redis_connection.hgetall(f"course:{course_id}")
|
|
|
|
@ -295,41 +294,41 @@ def update_course_view(request, course_id):
|
|
|
|
|
if course_id == False:
|
|
|
|
|
raise Http404("Course does not exist")
|
|
|
|
|
course['id'] = course_id.split(":")[1]
|
|
|
|
|
return render(request, 'update.html', {'person': personLoggedIn, 'course': course})
|
|
|
|
|
return render(request, 'update.html', {'person': person, 'course': course})
|
|
|
|
|
|
|
|
|
|
def create_course_form(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if personLoggedIn == '':
|
|
|
|
|
if person == '':
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
course_title = request.POST['title']
|
|
|
|
|
course_summary = request.POST['summary']
|
|
|
|
|
course_level = request.POST['level']
|
|
|
|
|
course_places = request.POST['places']
|
|
|
|
|
course_teacher = getPersonId(personLoggedIn['name'], personLoggedIn['role']).split(":")[1]
|
|
|
|
|
course_teacher = getPersonId(person['name'], person['role']).split(":")[1]
|
|
|
|
|
create_course(course_title, course_summary, course_level, course_places, course_teacher)
|
|
|
|
|
return courses(request)
|
|
|
|
|
|
|
|
|
|
return render(request, 'create.html', {'person': personLoggedIn, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
return render(request, 'create.html', {'person': person, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
|
|
|
|
|
def update_course_form(request, course_id):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
if personLoggedIn == '':
|
|
|
|
|
if person == '':
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
course_title = request.POST['title']
|
|
|
|
|
course_summary = request.POST['summary']
|
|
|
|
|
course_level = request.POST['level']
|
|
|
|
|
course_places = request.POST['places']
|
|
|
|
|
course_teacher = getPersonId(personLoggedIn['name'], personLoggedIn['role']).split(":")[1]
|
|
|
|
|
course_teacher = getPersonId(person['name'], person['role']).split(":")[1]
|
|
|
|
|
update_course(course_id, course_title, course_summary, course_level, course_places, course_teacher)
|
|
|
|
|
return courses(request)
|
|
|
|
|
|
|
|
|
|
return render(request, 'update.html', {'person': personLoggedIn, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
return render(request, 'update.html', {'person': person, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
|
|
|
|
|
# Test if places are not limited
|
|
|
|
|
def course_register(course_id, person_id):
|
|
|
|
@ -379,11 +378,11 @@ def course_unregister(course_id, person_id):
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def course_register_view(request, course_id):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
person_id = getPersonId(personLoggedIn["name"], personLoggedIn["role"]).split(":")[1]
|
|
|
|
|
person_id = getPersonId(person["name"], person["role"]).split(":")[1]
|
|
|
|
|
if not person_id:
|
|
|
|
|
raise Http404("Person not found")
|
|
|
|
|
course = redis_connection.hgetall(f"course:{course_id}")
|
|
|
|
@ -399,13 +398,13 @@ def course_register_view(request, course_id):
|
|
|
|
|
return details(request, course_id, "Could not register to the course. Try again later.")
|
|
|
|
|
|
|
|
|
|
def course_unregister_view(request, course_id):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if personLoggedIn == "":
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
if isExpired(course_id):
|
|
|
|
|
raise Http404("Course has expired... Get faster next time!")
|
|
|
|
|
person_id = getPersonId(personLoggedIn["name"], personLoggedIn["role"]).split(":")[1]
|
|
|
|
|
person_id = getPersonId(person["name"], person["role"]).split(":")[1]
|
|
|
|
|
if not person_id:
|
|
|
|
|
raise Http404("Person not found")
|
|
|
|
|
course = redis_connection.hgetall(f"course:{course_id}")
|
|
|
|
@ -470,11 +469,11 @@ def search(keywords):
|
|
|
|
|
return courses
|
|
|
|
|
|
|
|
|
|
def search_view(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
return render(request, 'search.html', {'person': personLoggedIn})
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
return render(request, 'search.html', {'person': person})
|
|
|
|
|
|
|
|
|
|
def search_form(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global redis_connection
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
keywords = request.POST['keywords']
|
|
|
|
@ -486,22 +485,22 @@ def search_form(request):
|
|
|
|
|
continue
|
|
|
|
|
course['id'] = course_id.split(":")[1]
|
|
|
|
|
courses.append(course)
|
|
|
|
|
return render(request, 'search.html', {'person': personLoggedIn, 'courses': courses})
|
|
|
|
|
return render(request, 'search.html', {'person': person, 'courses': courses})
|
|
|
|
|
|
|
|
|
|
return render(request, 'search.html', {'person': personLoggedIn, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
return render(request, 'search.html', {'person': person, "error_message": "The form has been wrongly filled!"})
|
|
|
|
|
|
|
|
|
|
def notifications_view(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global messages
|
|
|
|
|
return render(request, 'notifications.html', {'person': personLoggedIn, 'messages': messages})
|
|
|
|
|
return render(request, 'notifications.html', {'person': person, 'messages': messages})
|
|
|
|
|
|
|
|
|
|
def notifications(request):
|
|
|
|
|
global personLoggedIn
|
|
|
|
|
person = request.session.get("person", "")
|
|
|
|
|
global messages
|
|
|
|
|
if personLoggedIn == "":
|
|
|
|
|
if person == "":
|
|
|
|
|
return render(request, 'login.html', {'person': Person(name="", role=""), "error_message": "You must login!"})
|
|
|
|
|
pub_sub.punsubscribe()
|
|
|
|
|
courses_id = [course['id'] for course in getCoursesFromPerson(getPersonId(personLoggedIn['name'], personLoggedIn['role']).split(":")[1])]
|
|
|
|
|
courses_id = [course['id'] for course in getCoursesFromPerson(getPersonId(person['name'], person['role']).split(":")[1])]
|
|
|
|
|
if not courses_id:
|
|
|
|
|
return courses(request)
|
|
|
|
|
pub_sub.psubscribe(*courses_id)
|
|
|
|
|