summaryrefslogtreecommitdiff
path: root/yaksh/views.py
diff options
context:
space:
mode:
authorprathamesh2016-08-29 17:37:23 +0530
committerprathamesh2016-08-29 17:37:23 +0530
commit45cfca69a8af52fb838de48706ed5e4ddc1b1042 (patch)
tree208c485e97f17362d1cc597188337873c070c244 /yaksh/views.py
parent95a910aee400c7706ae8f14a94eb3c9ea9289c91 (diff)
downloadonline_test-45cfca69a8af52fb838de48706ed5e4ddc1b1042.tar.gz
online_test-45cfca69a8af52fb838de48706ed5e4ddc1b1042.tar.bz2
online_test-45cfca69a8af52fb838de48706ed5e4ddc1b1042.zip
Answer saved again after correctly submitted, fixed.
Removed javascript that makes user wait for 2 seconds when the code question is correct. All the other html elements are accessible by user during the wait. This also caused the duplicate save during the wait, as they can skip at that point and the answer is saved again. Added a check that if question is already answered then do not save it. This also resolves the monitor(use data) page problem of showing marks obtained zero even when it is correct. Removed skipped answers from the monitor page.
Diffstat (limited to 'yaksh/views.py')
-rw-r--r--yaksh/views.py23
1 files changed, 11 insertions, 12 deletions
diff --git a/yaksh/views.py b/yaksh/views.py
index 2ee964f..fd47ca5 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -454,6 +454,10 @@ def skip(request, q_id, next_q=None, attempt_num=None, questionpaper_id=None):
paper = get_object_or_404(AnswerPaper, user=request.user, attempt_number=attempt_num,
question_paper=questionpaper_id)
question = get_object_or_404(Question, pk=q_id)
+ if question in paper.questions_answered.all():
+ next_q = paper.next_question(q_id)
+ return show_question(request, next_q, paper)
+
if request.method == 'POST' and question.type == 'code':
user_code = request.POST.get('answer')
new_answer = Answer(question=question, answer=user_code,
@@ -506,7 +510,9 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
correct=False)
new_answer.save()
paper.answers.add(new_answer)
-
+ if not user_answer:
+ msg = "Please submit a valid option or code"
+ return show_question(request, question, paper, msg)
# If we were not skipped, we were asked to check. For any non-mcq
# questions, we obtain the results via XML-RPC with the code executed
# safely in a separate process (the code_server.py) running as nobody.
@@ -527,17 +533,8 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
new_answer.save()
return show_question(request, question, paper, result.get('error'))
else:
- # Display the same question if user_answer is None
- if not user_answer:
- msg = "Please submit a valid option or code"
- return show_question(request, question, paper, msg)
- elif question.type == 'code' and user_answer:
- msg = "Correct Output"
- paper.completed_question(question.id)
- return show_question(request, question, paper, msg)
- else:
- next_q = paper.completed_question(question.id)
- return show_question(request, next_q, paper)
+ next_q = paper.completed_question(question.id)
+ return show_question(request, next_q, paper)
else:
return show_question(request, question, paper)
@@ -560,11 +557,13 @@ def validate_answer(user, user_answer, question, json_data=None):
expected_answer = question.get_test_case(correct=True).options
if user_answer.strip() == expected_answer.strip():
correct = True
+ result['error'] = 'Correct answer'
elif question.type == 'mcc':
expected_answers = []
for opt in question.get_test_cases(correct=True):
expected_answers.append(opt.options)
if set(user_answer) == set(expected_answers):
+ result['error'] = 'Correct answer'
correct = True
elif question.type == 'code':
user_dir = get_user_dir(user)