This commit is contained in:
Ross
2022-08-05 12:13:41 +01:00
parent c7377754b1
commit e7d46fa677
7 changed files with 81 additions and 22 deletions
+43 -18
View File
@@ -98,11 +98,10 @@ def active_exams(request):
active_exams.append(exam)
return render(request, "physics/available_exam_list.html", {"exams": active_exams})
def exam_scores_cid_user(request, pk, cid, passcode):
def exam_scores_cid_user(request, pk, cid=None, passcode=None):
exam = get_object_or_404(Exam, pk=pk)
if not exam.check_cid_user(cid, passcode, request):
if not request.user and not exam.check_cid_user(cid, passcode, request):
raise Http404("Error accessing exam")
questions = exam.exam_questions.all()
@@ -117,7 +116,12 @@ def exam_scores_cid_user(request, pk, cid, passcode):
for q in questions:
# Get user answer
user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first()
if cid is not None:
user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first()
else:
user_answer = q.cid_user_answers.filter(
user=request.user, exam__id=pk
).first()
if user_answer is None:
answer_scores = (0, 0, 0, 0, 0)
@@ -193,18 +197,21 @@ def exam_start(request, pk):
)
def exam_take_overview(request, pk, cid, passcode):
def exam_take_overview(request, pk, cid=None, passcode=None):
exam = get_object_or_404(Exam, pk=pk)
if not exam.active:
raise Http404("Exam not found")
if not exam.check_cid_user(cid, passcode):
if not request.user and not exam.check_cid_user(cid, passcode):
raise Http404("Error accessing exam")
questions = exam.exam_questions.all()
answers = CidUserAnswer.objects.filter(cid=cid, exam=exam)
if request.user:
answers = CidUserAnswer.objects.filter(user=request.user, exam=exam)
else:
answers = CidUserAnswer.objects.filter(cid=cid, exam=exam)
answer_question_map = {}
for ans in answers:
@@ -220,8 +227,11 @@ def exam_take_overview(request, pk, cid, passcode):
else:
question_answer_tuples.append((q, None))
c = CidUser.objects.filter(cid=cid).first()
cid_user_exam = exam.get_or_create_cid_user_exam(cid_user=c)
if request.user:
cid_user_exam = exam.get_or_create_cid_user_exam(user_user=request.user)
else:
c = CidUser.objects.filter(cid=cid).first()
cid_user_exam = exam.get_or_create_cid_user_exam(cid_user=c)
return render(
request,
@@ -238,18 +248,21 @@ def exam_take_overview(request, pk, cid, passcode):
)
def exam_take(request, pk, sk, cid, passcode):
def exam_take(request, pk, sk, cid=None, passcode=None):
exam = get_object_or_404(Exam, pk=pk)
if not exam.active:
raise Http404("Exam not found")
if not exam.check_cid_user(cid, passcode):
if not request.user and not exam.check_cid_user(cid, passcode):
raise Http404("Error accessing exam")
c = CidUser.objects.filter(cid=cid).first()
cid_user_exam = exam.get_or_create_cid_user_exam(cid_user=c)
if request.user:
cid_user_exam = exam.get_or_create_cid_user_exam(user_user=request.user)
else:
c = CidUser.objects.filter(cid=cid).first()
cid_user_exam = exam.get_or_create_cid_user_exam(cid_user=c)
question = exam.exam_questions.all()[sk]
@@ -257,7 +270,10 @@ def exam_take(request, pk, sk, cid, passcode):
pos = exam.get_question_index(question)
answer = question.cid_user_answers.filter(cid=cid, exam=exam).first()
if request.user:
answer = question.cid_user_answers.filter(user=request.user, exam=exam).first()
else:
answer = question.cid_user_answers.filter(cid=cid, exam=exam).first()
if request.method == "POST":
if answer:
@@ -266,7 +282,11 @@ def exam_take(request, pk, sk, cid, passcode):
form = CidUserAnswerForm(request.POST)
if form.is_valid() and not exam.publish_results:
answer = form.save(commit=False)
answer.cid = cid
if request.user:
answer.user = request.user
else:
answer.cid = cid
answer.question = question
answer.exam = exam
# answer.published_date = timezone.now()
@@ -275,9 +295,14 @@ def exam_take(request, pk, sk, cid, passcode):
cid_user_exam.end_time = timezone.now()
cid_user_exam.save()
kwargs = {"pk": pk, "cid": cid, "passcode": passcode}
take_url = "physics:exam_take"
finish_url = "physics:exam_take_overview"
if request.user:
kwargs = {"pk": pk}
take_url = "physics:exam_take_user"
finish_url = "physics:exam_take_overview_user"
else:
kwargs = {"pk": pk, "cid": cid, "passcode": passcode}
take_url = "physics:exam_take"
finish_url = "physics:exam_take_overview"
if "next" in request.POST:
return redirect(take_url, sk=pos + 1, **kwargs)