summaryrefslogtreecommitdiff
path: root/yaksh/views.py
diff options
context:
space:
mode:
authorPrabhu Ramachandran2016-07-05 10:00:35 -0400
committerGitHub2016-07-05 10:00:35 -0400
commit15152d232ab81a1ec6af24b10424d85f1c01d170 (patch)
tree283190f3ab51896e75d538296036272e856a1f7d /yaksh/views.py
parentc8dfe62663d715dcf4b571c1f738428165734d2a (diff)
parent9c61c84194e6b52913dfc284765a7b7bd77201ad (diff)
downloadonline_test-15152d232ab81a1ec6af24b10424d85f1c01d170.tar.gz
online_test-15152d232ab81a1ec6af24b10424d85f1c01d170.tar.bz2
online_test-15152d232ab81a1ec6af24b10424d85f1c01d170.zip
Merge pull request #101 from maheshgudi/test_modes
Test modes
Diffstat (limited to 'yaksh/views.py')
-rw-r--r--yaksh/views.py128
1 files changed, 99 insertions, 29 deletions
diff --git a/yaksh/views.py b/yaksh/views.py
index db2f9bf..02b2487 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -125,14 +125,13 @@ def quizlist_user(request):
user = request.user
avail_quizzes = Quiz.objects.get_active_quizzes()
user_answerpapers = AnswerPaper.objects.filter(user=user)
- courses = Course.objects.filter(active=True)
+ courses = Course.objects.filter(active=True, is_trial=False)
context = { 'quizzes': avail_quizzes,
'user': user,
'courses': courses,
'quizzes_taken': user_answerpapers,
}
-
return my_render_to_response("yaksh/quizzes_user.html", context)
@@ -227,7 +226,7 @@ def add_quiz(request, quiz_id=None):
ci = RequestContext(request)
if not is_moderator(user):
raise Http404('You are not allowed to view this page!')
-
+ context = {}
if request.method == "POST":
if quiz_id is None:
form = QuizForm(request.POST, user=user)
@@ -239,18 +238,22 @@ def add_quiz(request, quiz_id=None):
form = QuizForm(request.POST, user=user, instance=quiz)
if form.is_valid():
form.save()
+ context["quiz_id"] = quiz_id
return my_redirect("/exam/manage/")
- return my_render_to_response('yaksh/add_quiz.html',
- {'form': form},
- context_instance=ci)
+
+ context["form"] = form
+ return my_render_to_response('yaksh/add_quiz.html', context,
+ context_instance=ci)
else:
if quiz_id is None:
form = QuizForm(user=user)
else:
quiz = Quiz.objects.get(id=quiz_id)
form = QuizForm(user=user, instance=quiz)
+ context["quiz_id"] = quiz_id
+ context["form"] = form
return my_render_to_response('yaksh/add_quiz.html',
- {'form': form},
+ context,
context_instance=ci)
@@ -262,7 +265,7 @@ def show_all_questionpapers(request, questionpaper_id=None):
raise Http404('You are not allowed to view this page!')
if questionpaper_id is None:
- qu_papers = QuestionPaper.objects.all()
+ qu_papers = QuestionPaper.objects.filter(is_trial=False)
context = {'papers': qu_papers}
return my_render_to_response('yaksh/showquestionpapers.html', context,
context_instance=ci)
@@ -282,8 +285,20 @@ def prof_manage(request):
"""Take credentials of the user with professor/moderator
rights/permissions and log in."""
user = request.user
+ ci = RequestContext(request)
if user.is_authenticated() and is_moderator(user):
- question_papers = QuestionPaper.objects.filter(quiz__course__creator=user)
+ question_papers = QuestionPaper.objects.filter(quiz__course__creator=user,
+ quiz__is_trial=False
+ )
+ trial_quiz = Quiz.objects.filter(course__creator=user, is_trial=True)
+ if request.method == "POST":
+ delete_quiz = request.POST.getlist('delete_quiz')
+ for quiz_id in delete_quiz:
+ quiz = Quiz.objects.get(id=quiz_id)
+ if quiz.course.is_trial == True:
+ quiz.course.delete()
+ else:
+ quiz.delete()
users_per_paper = []
for paper in question_papers:
answer_papers = AnswerPaper.objects.filter(question_paper=paper)
@@ -293,8 +308,10 @@ rights/permissions and log in."""
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}
- return my_render_to_response('manage.html', context)
+ context = {'user': user, 'users_per_paper': users_per_paper,
+ 'trial_quiz': trial_quiz
+ }
+ return my_render_to_response('manage.html', context, context_instance=ci)
return my_redirect('/exam/login/')
@@ -341,11 +358,17 @@ def start(request, questionpaper_id=None, attempt_num=None):
msg = 'Quiz not found, please contact your '\
'instructor/administrator. Please login again thereafter.'
return complete(request, msg, attempt_num, questionpaper_id=None)
- if not quest_paper.quiz.course.is_enrolled(user) :
+ if not quest_paper.quiz.course.is_enrolled(user):
raise Http404('You are not allowed to view this page!')
# prerequisite check and passing criteria
- if quest_paper.quiz.has_prerequisite() and not quest_paper.is_prerequisite_passed(user):
- return quizlist_user(request)
+ if quest_paper.quiz.is_expired():
+ if is_moderator(user):
+ return redirect("/exam/manage")
+ return redirect("/exam/quizzes")
+ if quest_paper.quiz.has_prerequisite() and not quest_paper.is_prerequisite_passed(user):
+ if is_moderator(user):
+ return redirect("/exam/manage")
+ return redirect("/exam/quizzes")
# if any previous attempt
last_attempt = AnswerPaper.objects.get_user_last_attempt(
questionpaper=quest_paper, user=user)
@@ -353,11 +376,15 @@ def start(request, questionpaper_id=None, attempt_num=None):
return show_question(request, last_attempt.current_question(), last_attempt)
# allowed to start
if not quest_paper.can_attempt_now(user):
- return quizlist_user(request)
+ if is_moderator(user):
+ return redirect("/exam/manage")
+ return redirect("/exam/quizzes")
if attempt_num is None:
attempt_number = 1 if not last_attempt else last_attempt.attempt_number +1
context = {'user': user, 'questionpaper': quest_paper,
'attempt_num': attempt_number}
+ if is_moderator(user):
+ context["user"] = "moderator"
return my_render_to_response('yaksh/intro.html', context,
context_instance=ci)
else:
@@ -604,7 +631,7 @@ def courses(request):
ci = RequestContext(request)
if not is_moderator(user):
raise Http404('You are not allowed to view this page')
- courses = Course.objects.filter(creator=user)
+ courses = Course.objects.filter(creator=user, is_trial=False)
return my_render_to_response('yaksh/courses.html', {'courses': courses},
context_instance=ci)
@@ -725,8 +752,10 @@ def monitor(request, questionpaper_id=None):
raise Http404('You are not allowed to view this page!')
if questionpaper_id is None:
- q_paper = QuestionPaper.objects.filter(Q(quiz__course__creator=user)|
- Q(quiz__course__teachers=user)).distinct()
+ q_paper = QuestionPaper.objects.filter(Q(quiz__course__creator=user) |
+ Q(quiz__course__teachers=user),
+ quiz__course__is_trial=False
+ ).distinct()
context = {'papers': [],
'quiz': None,
'quizzes': q_paper}
@@ -734,9 +763,10 @@ def monitor(request, questionpaper_id=None):
context_instance=ci)
# quiz_id is not None.
try:
- q_paper = QuestionPaper.objects.filter(Q(quiz__course__creator=user)|
- Q(quiz__course__teachers=user),
- id=questionpaper_id).distinct()
+ q_paper = QuestionPaper.objects.filter(Q(quiz__course__creator=user) |
+ Q(quiz__course__teachers=user),
+ quiz__course__is_trial=False,
+ id=questionpaper_id).distinct()
except QuestionPaper.DoesNotExist:
papers = []
q_paper = None
@@ -798,7 +828,7 @@ def ajax_questions_filter(request):
@login_required
def show_all_questions(request):
- """Show a list of all the questions currently in the databse."""
+ """Show a list of all the questions currently in the database."""
user = request.user
ci = RequestContext(request)
@@ -834,8 +864,17 @@ def show_all_questions(request):
"{0}_questions.json"'.format(user)
return response
else:
- msg = "Please select atleast one question"
- context['msg'] = msg
+ context['msg'] = "Please select atleast one question to download"
+
+ if request.POST.get('test') == 'test':
+ question_ids = request.POST.getlist("question")
+ if question_ids:
+ trial_paper = test_mode(user, False, question_ids, None)
+ trial_paper.update_total_marks()
+ trial_paper.save()
+ return my_redirect("/exam/start/1/{0}".format(trial_paper.id))
+ else:
+ context["msg"] = "Please select atleast one question to test"
questions = Question.objects.filter(user_id=user.id)
form = QuestionFilterForm(user=user)
@@ -918,14 +957,15 @@ def grade_user(request, quiz_id=None, user_id=None, attempt_number=None):
ci = RequestContext(request)
if not current_user.is_authenticated() or not is_moderator(current_user):
raise Http404('You are not allowed to view this page!')
- course_details = Course.objects.filter(Q(creator=current_user)|
- Q(teachers=current_user)).distinct()
+ course_details = Course.objects.filter(Q(creator=current_user) |
+ Q(teachers=current_user),
+ is_trial=False).distinct()
context = {"course_details": course_details}
if quiz_id is not None:
questionpaper_id = QuestionPaper.objects.filter(quiz_id=quiz_id)\
.values("id")
- user_details = AnswerPaper.objects.get_users_for_questionpaper\
- (questionpaper_id)
+ user_details = AnswerPaper.objects\
+ .get_users_for_questionpaper(questionpaper_id)
context = {"users": user_details, "quiz_id": quiz_id}
if user_id is not None:
@@ -1167,7 +1207,7 @@ def allotted_courses(request):
@login_required
def remove_teachers(request, course_id):
""" remove user from a course """
-
+
user = request.user
if not is_moderator(user):
raise Http404('You are not allowed to view this page!')
@@ -1178,3 +1218,33 @@ def remove_teachers(request, course_id):
teachers = User.objects.filter(id__in=teacher_ids)
course.remove_teachers(*teachers)
return my_redirect('/exam/manage/courses')
+
+
+def test_mode(user, godmode=False, questions_list=None, quiz_id=None):
+ """creates a trial question paper for the moderators"""
+
+ if questions_list is not None:
+ trial_course = Course.objects.create_trial_course(user)
+ trial_quiz = Quiz.objects.create_trial_quiz(trial_course, user)
+ trial_questionpaper = QuestionPaper.objects\
+ .create_trial_paper_to_test_questions\
+ (trial_quiz, questions_list)
+ else:
+ trial_quiz = Quiz.objects.create_trial_from_quiz(quiz_id, user, godmode)
+ trial_questionpaper = QuestionPaper.objects\
+ .create_trial_paper_to_test_quiz\
+ (trial_quiz, quiz_id)
+ return trial_questionpaper
+
+
+@login_required
+def test_quiz(request, mode, quiz_id):
+ """creates a trial quiz for the moderators"""
+ godmode = True if mode == "godmode" else False
+ current_user = request.user
+ quiz = Quiz.objects.get(id=quiz_id)
+ if (quiz.is_expired() or not quiz.active) and not godmode:
+ return my_redirect('/exam/manage')
+
+ trial_questionpaper = test_mode(current_user, godmode, None, quiz_id)
+ return my_redirect("/exam/start/{0}".format(trial_questionpaper.id))