diff options
author | prathamesh | 2016-08-29 17:37:23 +0530 |
---|---|---|
committer | prathamesh | 2016-08-29 17:37:23 +0530 |
commit | 45cfca69a8af52fb838de48706ed5e4ddc1b1042 (patch) | |
tree | 208c485e97f17362d1cc597188337873c070c244 /yaksh | |
parent | 95a910aee400c7706ae8f14a94eb3c9ea9289c91 (diff) | |
download | online_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')
-rw-r--r-- | yaksh/templates/yaksh/question.html | 21 | ||||
-rw-r--r-- | yaksh/templates/yaksh/user_data.html | 10 | ||||
-rw-r--r-- | yaksh/views.py | 23 |
3 files changed, 25 insertions, 29 deletions
diff --git a/yaksh/templates/yaksh/question.html b/yaksh/templates/yaksh/question.html index 73d851a..9a0f899 100644 --- a/yaksh/templates/yaksh/question.html +++ b/yaksh/templates/yaksh/question.html @@ -85,19 +85,6 @@ function call_skip(url) form.action = url form.submit(); } - {% if error_message == 'Correct Output'%} - {% if paper.questions_left %} - window.setTimeout(function() - { - location.href="{{ URL_ROOT }}/exam/{{ paper.current_question.id }}/check/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/" - }, 2000); - {% else %} - window.setTimeout(function() - { - location.href="{{ URL_ROOT }}/exam/{{ question.id }}/check/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/" - }, 2000); - {% endif %} - {% endif %} </script> {% endblock script %} @@ -165,11 +152,17 @@ function call_skip(url) <input type=hidden name="question_id" id="question_id" value={{ question.id }}></input> {% if question.type == "mcq" %} + {% if error_message %} + <p>{{ error_message }}</p> + {% endif %} {% for test_case in test_cases %} <input name="answer" type="radio" value="{{ test_case.options }}" />{{ test_case.options }} <br/> {% endfor %} {% endif %} {% if question.type == "mcc" %} + {% if error_message %} + <p>{{ error_message }}</p> + {% endif %} {% for test_case in test_cases %} <input name="answer" type="checkbox" value="{{ test_case.options }}"> {{ test_case.options }} <br> @@ -188,7 +181,7 @@ function call_skip(url) {% endif %} - {% if question.type == "mcq" or question.type == "mcc "%} + {% if question.type == "mcq" or question.type == "mcc"%} <br><button class="btn" type="submit" name="check" id="check">Submit Answer</button> {% elif question.type == "upload" %} <br><button class="btn" type="submit" name="check" id="check" onClick="return validate();">Upload</button> diff --git a/yaksh/templates/yaksh/user_data.html b/yaksh/templates/yaksh/user_data.html index 04544f9..2e7db50 100644 --- a/yaksh/templates/yaksh/user_data.html +++ b/yaksh/templates/yaksh/user_data.html @@ -56,11 +56,15 @@ User IP address: {{ paper.user_ip }} </p> <p>Student answer: {{ answers.0 }}</p> {% else %}{# non-mcq questions #} -<pre> -{% for answer in answers %}################################################################################ +{% for answer in answers %} +{% if not answer.skipped %} +<pre> +############################################################################### {{ answer.answer.strip }} # Autocheck: {{ answer.error }} -{% endfor %}</pre> +</pre> +{% endif %} +{% endfor %} {% endif %} {% with answers|last as answer %} <p><em>Marks: {{answer.marks}} </em> </p> 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) |