From bd1bb54f9f84bdbab24ad25cbc0edacd1bfbfa60 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 12 Aug 2024 09:11:27 +0100 Subject: [PATCH] fix a little question ordering bug --- generic/mixins.py | 2 -- generic/models.py | 6 +++++- generic/views.py | 15 +++++++++++++-- longs/views.py | 8 ++++---- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/generic/mixins.py b/generic/mixins.py index 73737ad0..84f31228 100644 --- a/generic/mixins.py +++ b/generic/mixins.py @@ -12,8 +12,6 @@ class CheckCanEditMixin(): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - print(self.object) - print("1234", self.object.check_user_can_edit(self.request.user)) context["can_edit"] = self.object.check_user_can_edit(self.request.user) return context diff --git a/generic/models.py b/generic/models.py index 9e7f55ef..e55880f7 100644 --- a/generic/models.py +++ b/generic/models.py @@ -835,6 +835,10 @@ class ExamBase(ExamOrCollectionGenericBase): default=False, ) + #randomise_question_order = models.BooleanField( + # help_text="If an exam should randomise the order of questions in RTS.", + #) + include_history = models.BooleanField( help_text="If an exam should include history when taking", default=False, @@ -960,7 +964,7 @@ class ExamBase(ExamOrCollectionGenericBase): def get_question_by_index(self, index: int): # There must be a better way to do this - return list(self.get_questions)[index] + return list(self.get_questions())[index] def get_cid_user_score(self, cid_user): c = "c/" + str(cid_user) diff --git a/generic/views.py b/generic/views.py index 43240e8c..4af25ba0 100644 --- a/generic/views.py +++ b/generic/views.py @@ -661,6 +661,8 @@ class ExamViews(View, LoginRequiredMixin): exam_list = self.Exam.objects.filter(author__id=request.user.id, exam_mode=True).order_by( "name" ) + + exam_list = exam_list | self.Exam.objects.filter(markers__id=request.user.id, exam_mode=True).order_by("name") else: exam_list = self.Exam.objects.prefetch_related("valid_user_users", "valid_cid_users").filter(exam_mode=True).order_by("name") @@ -946,6 +948,12 @@ class ExamViews(View, LoginRequiredMixin): cid_candidates = exam.valid_cid_users.count() users_candidates = exam.valid_user_users.count() + #question_orders = [q.examquestiondetail.sort_order for q in questions] + + # Exam order can be missing when, this can be checked with + # exam.exam_questions.select_related().all().order_by("examquestiondetail__sort_order").values_list("examquestiondetail__sort_order") + # TODO decide if / how this should be flagged to a user (updating teh exam order will fix) + return render( request, @@ -1467,11 +1475,13 @@ class ExamViews(View, LoginRequiredMixin): if not self.check_user_access(request.user, pk, marker=True): raise PermissionDenied - question = exam.get_questions()[sk] + #question = exam.get_questions()[sk] + question = exam.get_question_by_index(sk) exam_length = len(exam.exam_questions.all()) - pos = exam.get_question_index(question) + 1 + #pos = exam.get_question_index(question) + 1 + pos = sk + 1 previous = -1 if sk > 0: @@ -2510,6 +2520,7 @@ class ExamCloneMixin(): initial_data["user_user_groups"] = [] initial_data["active"] = False + initial_data["archive"] = False initial_data["publish_results"] = False self.exam_questions = list(questions) diff --git a/longs/views.py b/longs/views.py index 04b836bf..6b602ea8 100755 --- a/longs/views.py +++ b/longs/views.py @@ -129,9 +129,9 @@ class AuthorOrCheckerRequiredMixin(object): or self.request.user.is_superuser ): return obj - if self.request.user not in obj.get_author_objects(): - raise PermissionDenied() # or Http404 - return obj + if self.request.user in obj.get_author_objects(): + return obj + raise PermissionDenied() # or Http404 # def index(request): @@ -959,7 +959,7 @@ class ExamCreate(ExamCreateBase): form_class = ExamForm -class ExamUpdate(ExamUpdateBase, AuthorOrCheckerRequiredMixin): +class ExamUpdate(AuthorOrCheckerRequiredMixin, ExamUpdateBase): model = Exam form_class = ExamForm