From 5fa372b47e1f70e3d7d3b2df02410f50a86664b2 Mon Sep 17 00:00:00 2001
From: prathamesh
Date: Tue, 16 Feb 2016 14:30:57 +0530
Subject: Marks are updated at each submit. Shows status of the user test to
the moderator
---
yaksh/models.py | 6 ++---
yaksh/templates/yaksh/monitor.html | 2 ++
yaksh/views.py | 47 ++++++++++++++------------------------
3 files changed, 22 insertions(+), 33 deletions(-)
(limited to 'yaksh')
diff --git a/yaksh/models.py b/yaksh/models.py
index e7852d5..712c455 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -430,9 +430,9 @@ class AnswerPaper(models.Model):
else:
self.passed = False
- def update_status(self):
- """ Sets status to completed """
- self.status = 'completed'
+ def update_status(self, state):
+ """ Sets status as inprogress or completed """
+ self.status = state
def get_question_answers(self):
"""
diff --git a/yaksh/templates/yaksh/monitor.html b/yaksh/templates/yaksh/monitor.html
index dae07e3..7df0569 100644
--- a/yaksh/templates/yaksh/monitor.html
+++ b/yaksh/templates/yaksh/monitor.html
@@ -49,6 +49,7 @@
Questions answered |
Marks obtained |
Attempts |
+ Status |
{% for paper in papers %}
@@ -59,6 +60,7 @@
{{ paper.get_answered_str }} |
{{ paper.marks_obtained }} |
{{ paper.answers.count }} |
+ {{ paper.status }} |
{% endfor %}
diff --git a/yaksh/views.py b/yaksh/views.py
index 82a813c..5c81eb8 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -99,6 +99,15 @@ def fetch_questions(request):
return set2
+def _update_marks(answer_paper, state='completed'):
+ answer_paper.update_marks_obtained()
+ answer_paper.update_percent()
+ answer_paper.update_passed()
+ answer_paper.update_status(state)
+ answer_paper.end_time = datetime.datetime.now()
+ answer_paper.save()
+
+
def index(request):
"""The start page.
"""
@@ -243,12 +252,8 @@ def _check_previous_attempt(attempted_papers, already_attempted, attempt_number)
return False, None, next_attempt
else:
previous_attempt = attempted_papers[already_attempted-1]
- previous_attempt_day = previous_attempt.start_time
- today = datetime.datetime.today()
if previous_attempt.status == 'inprogress':
- end_time = previous_attempt.end_time
- quiz_time = previous_attempt.question_paper.quiz.duration*60
- if quiz_time > (today-previous_attempt_day).seconds:
+ if previous_attempt.time_left() > 0:
return True, previous_attempt, next_attempt
else:
return False, previous_attempt, next_attempt
@@ -877,9 +882,6 @@ def question(request, q_id, attempt_num, questionpaper_id, success_msg=None):
if not paper.question_paper.quiz.active:
reason = 'The quiz has been deactivated!'
return complete(request, reason, attempt_num, questionpaper_id)
- elif paper.end_time < datetime.datetime.now():
- reason = 'You have already attempted the quiz'
- return complete(request, reason, attempt_num, questionpaper_id)
time_left = paper.time_left()
if time_left == 0:
return complete(request, attempt_num, questionpaper_id, reason='Your time is up!')
@@ -910,7 +912,7 @@ def show_question(request, q_id, attempt_num, questionpaper_id, success_msg=None
q_paper = QuestionPaper.objects.get(id=questionpaper_id)
paper = AnswerPaper.objects.get(user=request.user, attempt_number=attempt_num,
question_paper=q_paper)
- if not user.is_authenticated() or paper.end_time < datetime.datetime.now():
+ if not user.is_authenticated():
return my_redirect('/exam/login/')
if len(q_id) == 0:
msg = 'Congratulations! You have successfully completed the quiz.'
@@ -933,11 +935,7 @@ def _save_skipped_answer(old_skipped, user_answer, paper, question):
correct=False, skipped=True)
skipped_answer.save()
paper.answers.add(skipped_answer)
-def _time_check(paper):
- if paper.time_left() <= 0:
- return False
- else:
- return True
+
def check(request, q_id, attempt_num=None, questionpaper_id=None):
"""Checks the answers of the user for particular question"""
@@ -945,16 +943,12 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
q_paper = QuestionPaper.objects.get(id=questionpaper_id)
paper = AnswerPaper.objects.get(user=request.user, attempt_number=attempt_num,
question_paper=q_paper)
- is_time_left = _time_check(paper)
- if not is_time_left:
- reason = 'Your time is up!'
- return complete(request, reason, attempt_num, questionpaper_id)
if q_id in paper.questions_answered:
next_q = paper.skip(q_id)
return show_question(request, next_q, attempt_num, questionpaper_id)
- if not user.is_authenticated() or paper.end_time < datetime.datetime.now():
+ if not user.is_authenticated():
return my_redirect('/exam/login/')
question = get_object_or_404(Question, pk=q_id)
@@ -1012,9 +1006,10 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
new_answer.error = result.get('error')
new_answer.save()
- is_time_left = _time_check(paper)
+ _update_marks(paper, 'inprogress')
+ time_left = paper.time_left()
if not result.get('success'): # Should only happen for non-mcq questions.
- if is_time_left == 0:
+ if time_left <= 0:
reason = 'Your time is up!'
return complete(request, reason, attempt_num, questionpaper_id)
if not paper.question_paper.quiz.active:
@@ -1035,7 +1030,7 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
return my_render_to_response('yaksh/question.html', context,
context_instance=ci)
else:
- if is_time_left <= 0:
+ if time_left <= 0:
reason = 'Your time is up!'
return complete(request, reason, attempt_num, questionpaper_id)
@@ -1122,14 +1117,6 @@ def quit(request, attempt_num=None, questionpaper_id=None):
context_instance=RequestContext(request))
-def _update_marks(answer_paper):
- answer_paper.update_marks_obtained()
- answer_paper.update_percent()
- answer_paper.update_passed()
- answer_paper.update_status()
- answer_paper.end_time = datetime.datetime.now()
- answer_paper.save()
-
@login_required
def complete(request, reason=None, attempt_num=None, questionpaper_id=None):
"""Show a page to inform user that the quiz has been compeleted."""
--
cgit