From e400fce42c50409db6cb344fe58977e141bc8e8a Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Fri, 23 Mar 2018 16:54:31 +0100 Subject: [PATCH] force user to redo step 1 when he fails to a quizz : https://trackers.pilotsystems.net/probarreau/0291 --- teleforma/templates/quiz/question.html | 11 +++++++++++ teleforma/templates/quiz/result.html | 4 ++-- teleforma/views/pro.py | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/teleforma/templates/quiz/question.html b/teleforma/templates/quiz/question.html index 89215db4..410c91a2 100644 --- a/teleforma/templates/quiz/question.html +++ b/teleforma/templates/quiz/question.html @@ -10,6 +10,16 @@ {% block course_content %} +{% if not can_access %} +
+

Vous n'avez pas accès à ce quizz car vous n'avez pas complété les étapes 1 et/ou 2.

+
+

+  {% trans "Back" %} au séminaire +

+
+{% else %} + {% if previous.answers %}

{% trans "The previous question" %}:

@@ -83,6 +93,7 @@
{% endif %} +{% endif %}
diff --git a/teleforma/templates/quiz/result.html b/teleforma/templates/quiz/result.html index fed90e25..88b260f6 100644 --- a/teleforma/templates/quiz/result.html +++ b/teleforma/templates/quiz/result.html @@ -32,8 +32,8 @@ Votre quiz est validé.

 {% trans "Back" %} au séminaire {% else %} - Vous devez recommencer le quiz.

-  {% trans "Recommencer" %} + Vous devez revalider l'étape 1, puis recommencer le quiz.

+  {% trans "Back" %} au séminaire {% endif %} {% endif %} diff --git a/teleforma/views/pro.py b/teleforma/views/pro.py index 91e9005e..024ab09a 100644 --- a/teleforma/views/pro.py +++ b/teleforma/views/pro.py @@ -882,10 +882,20 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): user_id = self.request.user.id return User.objects.get(id=user_id) + def can_access(self): + user = self.get_user() + for items in [self.seminar.docs_1, self.seminar.medias]: + for item in items.all(): + if item.weight: + if user not in item.readers.all(): + return False + return True + def get_context_data(self, **kwargs): context = super(QuizQuestionView, self).get_context_data(**kwargs) user = self.get_user() self.seminar = Seminar.objects.get(pk=self.kwargs['pk']) + context['can_access'] = self.can_access() context['seminar'] = self.seminar context['seminar_progress'] = seminar_progress(user, self.seminar) return context @@ -902,6 +912,7 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): 'sitting': self.sitting, 'previous': self.previous, 'seminar': self.seminar, + 'can_access': True } self.sitting.mark_quiz_complete() @@ -918,5 +929,10 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): if self.sitting.get_percent_correct >= self.quiz.pass_mark: validation = QuizValidation(user=user, quiz=self.seminar.quiz, validated=True) validation.save() + else: + # revert step 1 validation + for doc in self.seminar.docs_1.all(): + doc.readers.remove(user) + doc.save() return render(self.request, 'quiz/result.html', results) -- 2.39.5