summaryrefslogtreecommitdiff
path: root/testapp/exam
diff options
context:
space:
mode:
authorprathamesh2014-08-11 13:00:33 +0530
committerprathamesh2014-08-11 13:00:33 +0530
commite44bd4577bf839148c0824a9d3cc84a789f25b95 (patch)
treec4d1aa3e2b46aa1cff89693f0ab1606dfd85e07f /testapp/exam
parent5f232eeec1588d6c99167dd1fb1a309e15398325 (diff)
downloadonline_test-e44bd4577bf839148c0824a9d3cc84a789f25b95.tar.gz
online_test-e44bd4577bf839148c0824a9d3cc84a789f25b95.tar.bz2
online_test-e44bd4577bf839148c0824a9d3cc84a789f25b95.zip
redirect to dashboard after exam.
After exam is over or time-out the user is redirected to the result page. The user is not logged out. Current time is checked with the quiz end time, so that the user cannot reattempt the quiz.
Diffstat (limited to 'testapp/exam')
-rw-r--r--testapp/exam/views.py35
1 files changed, 19 insertions, 16 deletions
diff --git a/testapp/exam/views.py b/testapp/exam/views.py
index 7c9af6c..aeb93ca 100644
--- a/testapp/exam/views.py
+++ b/testapp/exam/views.py
@@ -22,6 +22,7 @@ from exam.forms import UserRegisterForm, UserLoginForm, QuizForm,\
from exam.xmlrpc_clients import code_server
from settings import URL_ROOT
+
# The directory where user data can be saved.
OUTPUT_DIR = abspath(join(dirname(__file__), 'output'))
@@ -142,7 +143,6 @@ def quizlist_user(request):
pre_requisites = []
context = {}
-
if 'cannot_attempt' in request.GET:
context['cannot_attempt'] = True
@@ -155,7 +155,7 @@ def quizlist_user(request):
for answer_paper in user_answerpapers:
for quiz in avail_quizzes:
if answer_paper.question_paper.id == quiz.id and \
- answer_paper.end_time != answer_paper.start_time:
+ answer_paper.end_time != answer_paper.start_time:
avail_quizzes.remove(quiz)
quizzes_taken.append(answer_paper)
@@ -181,11 +181,11 @@ def intro(request, questionpaper_id):
return my_render_to_response('exam/intro.html', context,
context_instance=ci)
else:
- context = {'user': user, 'cannot_attempt':True}
+ context = {'user': user, 'cannot_attempt': True}
return my_redirect("/exam/quizzes/?cannot_attempt=True")
except:
- context = {'user': user, 'cannot_attempt':True}
+ context = {'user': user, 'cannot_attempt': True}
return my_redirect("/exam/quizzes/?cannot_attempt=True")
context = {'user': user, 'paper_id': questionpaper_id}
ci = RequestContext(request)
@@ -389,7 +389,7 @@ def add_quiz(request, quiz_id=None):
form.initial['active'] = d.active
form.initial['pass_criteria'] = d.pass_criteria
form.initial['language'] = d.language
- form.initial['prerequisite'] = d.prerequisite_id
+ form.initial['prerequisite'] = d.prerequisite_id
return my_render_to_response('exam/add_quiz.html',
{'form': form},
context_instance=ci)
@@ -607,10 +607,11 @@ rights/permissions and log in."""
users_failed = AnswerPaper.objects.filter(question_paper=paper, passed=False).count()
temp = paper, answer_papers, users_passed, users_failed
users_per_paper.append(temp)
- context = {'user': user, 'users_per_paper':users_per_paper}
+ context = {'user': user, 'users_per_paper': users_per_paper}
return my_render_to_response('manage.html', context)
return my_redirect('/exam/login/')
+
def user_login(request):
"""Take the credentials of the user and log the user in."""
@@ -691,6 +692,9 @@ def question(request, q_id, questionpaper_id, success_msg=None):
if not paper.question_paper.quiz.active:
reason = 'The quiz has been deactivated!'
return complete(request, reason, questionpaper_id)
+ elif paper.end_time < datetime.datetime.now():
+ reason = 'You have already attempted the quiz'
+ return complete(request, reason, questionpaper_id)
time_left = paper.time_left()
if time_left == 0:
return complete(request, reason='Your time is up!')
@@ -722,11 +726,11 @@ def check(request, q_id, questionpaper_id=None):
"""Checks the answers of the user for particular question"""
user = request.user
- if not user.is_authenticated():
- return my_redirect('/exam/login/')
- question = get_object_or_404(Question, pk=q_id)
q_paper = QuestionPaper.objects.get(id=questionpaper_id)
paper = AnswerPaper.objects.get(user=request.user, question_paper=q_paper)
+ if not user.is_authenticated() or paper.end_time < datetime.datetime.now():
+ return my_redirect('/exam/login/')
+ question = get_object_or_404(Question, pk=q_id)
snippet_code = request.POST.get('snippet')
skip = request.POST.get('skip', None)
success_msg = False
@@ -816,7 +820,7 @@ def validate_answer(user, user_answer, question):
success, message = code_server.run_code(user_answer, question.test,
user_dir, question.language)
if success:
- correct = True
+ correct = True
return correct, success, message
@@ -842,6 +846,7 @@ def complete(request, reason=None, questionpaper_id=None):
paper.update_marks_obtained()
paper.update_percent()
paper.update_passed()
+ paper.end_time = datetime.datetime.now()
paper.save()
obt_marks = paper.marks_obtained
tot_marks = paper.question_paper.total_marks
@@ -850,12 +855,10 @@ def complete(request, reason=None, questionpaper_id=None):
you answered all the questions correctly.\
You have been logged out successfully,\
Thank You !"}
- logout(request)
return my_render_to_response('exam/complete.html', context)
else:
message = reason or "You are successfully logged out"
context = {'message': message}
- logout(request)
return my_render_to_response('exam/complete.html', context)
no = False
message = reason or 'The quiz has been completed. Thank you.'
@@ -866,7 +869,7 @@ def complete(request, reason=None, questionpaper_id=None):
if not no:
# Logout the user and quit with the message given.
answer_paper = AnswerPaper.objects.get(id=answerpaper_id)
- answer_paper.endtime = datetime.datetime.now()
+ answer_paper.end_time = datetime.datetime.now()
answer_paper.save()
return my_redirect('/exam/quizzes/')
else:
@@ -1118,8 +1121,8 @@ def ajax_questionpaper(request, query):
question_list = fixed_question_list + random_question_list
questions = list(Question.objects.filter(type=question_type,
points=marks_selected))
- questions = [ question for question in questions \
- if not str(question.id) in question_list ]
+ questions = [question for question in questions \
+ if not str(question.id) in question_list]
return my_render_to_response('exam/ajax_questions.html',
{'questions': questions})
@@ -1147,7 +1150,7 @@ def design_questionpaper(request):
question_paper.save()
if fixed_questions:
fixed_questions_ids = ",".join(fixed_questions)
- fixed_questions_ids_list = fixed_questions_ids.split(',')
+ fixed_questions_ids_list = fixed_questions_ids.split(',')
for question_id in fixed_questions_ids_list:
question_paper.fixed_questions.add(question_id)
if random_questions: