add (correct) support for logged in users to sba and physics exams
This commit is contained in:
+12
-13
@@ -99,13 +99,15 @@ 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=None, passcode=None):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.exam_mode:
|
||||
raise Http404("Packet not in exam mode")
|
||||
|
||||
if cid is not None and not exam.check_cid_user(cid, passcode, request):
|
||||
print(cid, passcode, request.user)
|
||||
if not exam.check_cid_user(cid, passcode, request):
|
||||
raise Http404("Error accessing exam")
|
||||
|
||||
questions = exam.exam_questions.all()
|
||||
@@ -168,7 +170,6 @@ def exam_scores_cid_user(request, pk, cid=None, passcode=None):
|
||||
|
||||
|
||||
def exam_take_old(request, pk):
|
||||
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.active:
|
||||
@@ -197,6 +198,9 @@ def exam_start(request, pk):
|
||||
"physics/exam_start.html",
|
||||
{
|
||||
"exam": exam,
|
||||
# This may be overly comlicated but if the logged in user
|
||||
# does not have access we give the option to take it as a cid user
|
||||
"valid_user": exam.check_logged_in_user(request),
|
||||
},
|
||||
)
|
||||
|
||||
@@ -204,12 +208,11 @@ def exam_start(request, pk):
|
||||
def exam_take_overview(request, pk, cid=None, passcode=None):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if cid is not None and not exam.check_cid_user(cid, passcode):
|
||||
raise Http404("Error accessing exam")
|
||||
|
||||
if not exam.active:
|
||||
return exam_inactive(request, context={"exam": exam})
|
||||
|
||||
if not exam.check_cid_user(cid, passcode, request):
|
||||
raise Http404("Error accessing exam")
|
||||
|
||||
questions = exam.exam_questions.all()
|
||||
|
||||
@@ -253,14 +256,13 @@ def exam_take_overview(request, pk, cid=None, passcode=None):
|
||||
)
|
||||
|
||||
|
||||
def exam_take(request, pk, sk, cid=None, passcode=None):
|
||||
|
||||
def exam_take(request, pk: int, sk: int, cid: str = None, passcode: str = None):
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.active:
|
||||
return exam_inactive(request, context={"exam": exam})
|
||||
|
||||
if cid is not None and not exam.check_cid_user(cid, passcode):
|
||||
if not exam.check_cid_user(cid, passcode, request):
|
||||
raise Http404("Error accessing exam")
|
||||
|
||||
if cid is not None:
|
||||
@@ -329,7 +331,6 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
|
||||
else:
|
||||
form = UserAnswerForm(instance=answer)
|
||||
|
||||
|
||||
saved_answer = False
|
||||
if answer is not None:
|
||||
saved_answer = [answer.a, answer.b, answer.c, answer.d, answer.e]
|
||||
@@ -346,6 +347,7 @@ def exam_take(request, pk, sk, cid=None, passcode=None):
|
||||
"previous": previous,
|
||||
"exam_length": exam_length,
|
||||
"pos": pos,
|
||||
"saved_answer": saved_answer,
|
||||
"passcode": passcode,
|
||||
"cid_user_exam": cid_user_exam,
|
||||
},
|
||||
@@ -413,6 +415,7 @@ GenericExamViews = ExamViews(Exam, Question, None, UserAnswer, "physics", "physi
|
||||
|
||||
GenericViews = GenericViewBase("physics", Question, UserAnswer, Exam)
|
||||
|
||||
|
||||
class ExamCreate(ExamCreateBase):
|
||||
model = Exam
|
||||
form_class = ExamForm
|
||||
@@ -427,7 +430,6 @@ class ExamDelete(AuthorOrCheckerRequiredMixin, ExamDeleteBase):
|
||||
model = Exam
|
||||
|
||||
|
||||
|
||||
class ExamClone(AuthorOrCheckerRequiredMixin, ExamCloneMixin, ExamCreate):
|
||||
"""Clone exam view"""
|
||||
|
||||
@@ -439,8 +441,6 @@ class ExamAuthorUpdate(
|
||||
form_class = ExamAuthorForm
|
||||
|
||||
|
||||
|
||||
|
||||
class QuestionView(
|
||||
LoginRequiredMixin, SingleTableMixin, FilterView, AuthorOrCheckerRequiredMixin
|
||||
):
|
||||
@@ -456,7 +456,6 @@ class QuestionView(
|
||||
return context
|
||||
|
||||
|
||||
|
||||
class UserAnswerView(AuthorOrCheckerRequiredMixin, LoginRequiredMixin, DetailView):
|
||||
model = UserAnswer
|
||||
|
||||
|
||||
Reference in New Issue
Block a user