update sba testing (and fix others)
This commit is contained in:
+1
-1
@@ -213,7 +213,7 @@ class UserAnswer(UserAnswerBase):
|
||||
answer = models.CharField(
|
||||
max_length=20,
|
||||
choices=Question.BEST_ANSWER_CHOICES,
|
||||
help_text="The correct answer",
|
||||
help_text="The user selected answer",
|
||||
)
|
||||
|
||||
user = models.ForeignKey(
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
<span class="correct-answer">Correct answer: {{correct_answer|safe}}</span> <br />
|
||||
{% endif %}
|
||||
|
||||
<span class="submitted-user-answer">{{a}}</span>
|
||||
Chosen answer: {{chosen_answer|safe}}
|
||||
Chosen answer: <span class="submitted-user-answer">{{a}}</span>
|
||||
{{chosen_answer|safe}}
|
||||
{% if exam.publish_results or view_all_results %}
|
||||
<span class="answer-{{score}}">(Score: {{score}})</span>
|
||||
{% endif %}
|
||||
|
||||
@@ -190,22 +190,14 @@ def test_exams(db, client):
|
||||
if exam_tester.testing_cid_user:
|
||||
cid_user_answer = UserAnswer(
|
||||
question=extra_question,
|
||||
a=True,
|
||||
b=False,
|
||||
c=True,
|
||||
d=False,
|
||||
e=True,
|
||||
answer = "a",
|
||||
cid=cid_user.cid,
|
||||
exam=exam,
|
||||
)
|
||||
else:
|
||||
cid_user_answer = UserAnswer(
|
||||
question=extra_question,
|
||||
a=True,
|
||||
b=False,
|
||||
c=True,
|
||||
d=False,
|
||||
e=True,
|
||||
answer = "a",
|
||||
user=exam_tester.current_user,
|
||||
exam=exam,
|
||||
)
|
||||
|
||||
+10
-10
@@ -72,16 +72,16 @@ urlpatterns = [
|
||||
views.UserAnswerDelete.as_view(),
|
||||
name="user_answer_delete",
|
||||
),
|
||||
path(
|
||||
"exam/<int:pk>/scores/<int:cid>/<str:passcode>/",
|
||||
views.exam_scores_cid_user,
|
||||
name="exam_scores_cid_user",
|
||||
),
|
||||
path(
|
||||
"exam/<int:pk>/scores/",
|
||||
views.exam_scores_cid_user,
|
||||
name="exam_scores_user",
|
||||
),
|
||||
#path(
|
||||
# "exam/<int:pk>/scores/<int:cid>/<str:passcode>/",
|
||||
# views.exam_scores_cid_user,
|
||||
# name="exam_scores_cid_user",
|
||||
#),
|
||||
#path(
|
||||
# "exam/<int:pk>/scores/",
|
||||
# views.exam_scores_cid_user,
|
||||
# name="exam_scores_user",
|
||||
#),
|
||||
]
|
||||
|
||||
urlpatterns.extend(generic_view_urls(views.GenericViews))
|
||||
|
||||
+66
-63
@@ -99,69 +99,69 @@ def active_exams(request):
|
||||
return render(request, "sbas/available_exam_list.html", {"exams": active_exams})
|
||||
|
||||
|
||||
def exam_scores_cid_user(request, pk, cid=None, passcode=None):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
exam.check_user_can_review(cid, passcode, request)
|
||||
|
||||
questions = exam.exam_questions.all()
|
||||
|
||||
answers_and_marks = []
|
||||
answers_marks = []
|
||||
answers = []
|
||||
|
||||
view_all_results = False
|
||||
if request.user.groups.filter(name="view_all_results").exists():
|
||||
view_all_results = True
|
||||
|
||||
for q in questions:
|
||||
# Get user answer
|
||||
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_score = 0
|
||||
ans = ""
|
||||
else:
|
||||
answer_score = user_answer.get_answer_score()
|
||||
ans = user_answer.get_answer()
|
||||
|
||||
correct_answer = q.get_correct_answer()
|
||||
|
||||
if not exam.publish_results and not view_all_results:
|
||||
correct_answer = "*****"
|
||||
answer_score = 0
|
||||
answers.append(ans)
|
||||
answers_marks.append(answer_score)
|
||||
|
||||
merged_ans = (ans, answer_score, correct_answer)
|
||||
chosen_answer = q.get_answer_by_choice(ans)
|
||||
answers_and_marks.append((q, *merged_ans, chosen_answer))
|
||||
|
||||
total_score = sum(answers_marks)
|
||||
|
||||
max_score = len(questions)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"sbas/exam_scores_user.html",
|
||||
{
|
||||
"exam": exam,
|
||||
"cid": cid,
|
||||
"passcode": passcode,
|
||||
"questions": questions,
|
||||
"answers": answers,
|
||||
"answers_marks": answers_marks,
|
||||
"total_score": total_score,
|
||||
"max_score": max_score,
|
||||
"answers_and_marks": answers_and_marks,
|
||||
"view_all_results": view_all_results,
|
||||
},
|
||||
)
|
||||
#def exam_scores_cid_user(request, pk, cid=None, passcode=None):
|
||||
# exam = get_object_or_404(Exam, pk=pk)
|
||||
#
|
||||
# exam.check_user_can_review(cid, passcode, request)
|
||||
#
|
||||
# questions = exam.exam_questions.all()
|
||||
#
|
||||
# answers_and_marks = []
|
||||
# answers_marks = []
|
||||
# answers = []
|
||||
#
|
||||
# view_all_results = False
|
||||
# if request.user.groups.filter(name="view_all_results").exists():
|
||||
# view_all_results = True
|
||||
#
|
||||
# for q in questions:
|
||||
# # Get user answer
|
||||
# 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_score = 0
|
||||
# ans = ""
|
||||
# else:
|
||||
# answer_score = user_answer.get_answer_score()
|
||||
# ans = user_answer.get_answer()
|
||||
#
|
||||
# correct_answer = q.get_correct_answer()
|
||||
#
|
||||
# if not exam.publish_results and not view_all_results:
|
||||
# correct_answer = "*****"
|
||||
# answer_score = 0
|
||||
# answers.append(ans)
|
||||
# answers_marks.append(answer_score)
|
||||
#
|
||||
# merged_ans = (ans, answer_score, correct_answer)
|
||||
# chosen_answer = q.get_answer_by_choice(ans)
|
||||
# answers_and_marks.append((q, *merged_ans, chosen_answer))
|
||||
#
|
||||
# total_score = sum(answers_marks)
|
||||
#
|
||||
# max_score = len(questions)
|
||||
#
|
||||
# return render(
|
||||
# request,
|
||||
# "sbas/exam_scores_user.html",
|
||||
# {
|
||||
# "exam": exam,
|
||||
# "cid": cid,
|
||||
# "passcode": passcode,
|
||||
# "questions": questions,
|
||||
# "answers": answers,
|
||||
# "answers_marks": answers_marks,
|
||||
# "total_score": total_score,
|
||||
# "max_score": max_score,
|
||||
# "answers_and_marks": answers_and_marks,
|
||||
# "view_all_results": view_all_results,
|
||||
# },
|
||||
# )
|
||||
|
||||
|
||||
def exam_start(request, pk):
|
||||
@@ -225,6 +225,9 @@ def exam_take_overview(request, pk, cid=None, passcode=None):
|
||||
def exam_take(request, pk: int, sk: int, cid: int = None, passcode: str = None):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.active:
|
||||
return exam_inactive(request, context={"exam": exam})
|
||||
|
||||
exam.check_user_can_take(cid, passcode, request)
|
||||
|
||||
cid_user_exam = exam.get_or_create_cid_user_exam(cid = cid, user_user=request.user)
|
||||
|
||||
Reference in New Issue
Block a user