diff --git a/generic/templates/generic/user_scores_header.html b/generic/templates/generic/user_scores_header.html
index 45b56ffa..7591e625 100644
--- a/generic/templates/generic/user_scores_header.html
+++ b/generic/templates/generic/user_scores_header.html
@@ -1,5 +1,5 @@
Exam: {{ exam.name }}
-Candidate: {{ cid }}
+Candidate: {{ cid|default_if_none:request.user.username }}
{% if view_all_results %}
Exam state: Active [{{exam.active}}] / Published [{{exam.publish_results}}]
diff --git a/physics/templates/physics/exam_scores_user.html b/physics/templates/physics/exam_scores_user.html
index faf9df70..26dd3b87 100644
--- a/physics/templates/physics/exam_scores_user.html
+++ b/physics/templates/physics/exam_scores_user.html
@@ -18,7 +18,9 @@
Total mark: {{ total_score }} / {{max_score}}
{% endblock %}
\ No newline at end of file
diff --git a/physics/templates/physics/exam_start.html b/physics/templates/physics/exam_start.html
index 1a190f74..87b2d245 100755
--- a/physics/templates/physics/exam_start.html
+++ b/physics/templates/physics/exam_start.html
@@ -4,6 +4,9 @@
Start exam: {{exam.name}}
+ {% if request.user %}
+ Start Exam
+ {% else %}
Enter your CID and passcode in the below boxes.
@@ -45,4 +48,5 @@
});
});
+ {% endif %}
{% endblock %}
diff --git a/physics/templates/physics/exam_take.html b/physics/templates/physics/exam_take.html
index f9d784b9..abb616f3 100755
--- a/physics/templates/physics/exam_take.html
+++ b/physics/templates/physics/exam_take.html
@@ -1,7 +1,11 @@
{% extends 'base.html' %}
{% block content %}
- CID: {{cid}}
+ {% if request.user %}
+ User: {{request.user}}
+ {% else %}
+ CID: {{cid}}
+ {% endif %}
Allocated time over.
diff --git a/physics/templates/physics/exam_take_overview.html b/physics/templates/physics/exam_take_overview.html
index d2591700..4ea60e29 100644
--- a/physics/templates/physics/exam_take_overview.html
+++ b/physics/templates/physics/exam_take_overview.html
@@ -1,7 +1,11 @@
{% extends 'base.html' %}
{% block content %}
- CID: {{cid}}
+ {% if request.user %}
+ User: {{request.user}}
+ {% else %}
+ CID: {{cid}}
+ {% endif %}
Exam: {{exam.name}}
@@ -15,7 +19,12 @@
{{answer_count}} out of {{exam_length}} questions answered. Click to go to question.
Start time: {{cid_user_exam.start_time}}
diff --git a/physics/urls.py b/physics/urls.py
index 409dc749..37129187 100644
--- a/physics/urls.py
+++ b/physics/urls.py
@@ -22,12 +22,22 @@ urlpatterns.extend(
views.exam_take,
name="exam_take",
),
+ path(
+ "exam///take",
+ views.exam_take,
+ name="exam_take_user",
+ ),
path("exam//start", views.exam_start, name="exam_start"),
path(
"exam////finish",
views.exam_take_overview,
name="exam_take_overview",
),
+ path(
+ "exam//finish",
+ views.exam_take_overview,
+ name="exam_take_overview_user",
+ ),
path(
"exam//authors",
views.ExamAuthorUpdate.as_view(),
@@ -59,6 +69,11 @@ urlpatterns.extend(
views.exam_scores_cid_user,
name="exam_scores_cid_user",
),
+ path(
+ "exam//scores/",
+ views.exam_scores_cid_user,
+ name="exam_scores_user",
+ ),
]
)
diff --git a/physics/views.py b/physics/views.py
index 406cbd0a..d586103c 100644
--- a/physics/views.py
+++ b/physics/views.py
@@ -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)