Exemplo n.º 1
0
def design_questionpaper(request):
    user = request.user
    ci = RequestContext(request)

    if not user.is_authenticated() or not is_moderator(user):
        raise Http404("You are not allowed to view this page!")

    if request.method == "POST":
        fixed_questions = request.POST.getlist("fixed")
        random_questions = request.POST.getlist("random")
        random_number = request.POST.getlist("number")
        is_shuffle = request.POST.get("shuffle_questions", False)
        if is_shuffle == "on":
            is_shuffle = True

        question_paper = QuestionPaper(shuffle_questions=is_shuffle)
        quiz = Quiz.objects.order_by("-id")[0]
        tot_marks = 0
        question_paper.quiz = quiz
        question_paper.total_marks = tot_marks
        question_paper.save()
        if fixed_questions:
            fixed_questions_ids = ",".join(fixed_questions)
            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:
            for random_question, num in zip(random_questions, random_number):
                qid = random_question.split(",")[0]
                question = Question.objects.get(id=int(qid))
                marks = question.points
                question_set = QuestionSet(marks=marks, num_questions=num)
                question_set.save()
                for question_id in random_question.split(","):
                    question_set.questions.add(question_id)
                    question_paper.random_questions.add(question_set)
        question_paper.update_total_marks()
        question_paper.save()
        return redirect("/manage/showquiz")
    else:
        form = RandomQuestionForm()
        context = {"form": form}
        return render_to_response("design_questionpaper.html", context, context_instance=ci)
Exemplo n.º 2
0
def automatic_questionpaper(request, questionpaper_id=None):
    """Generate automatic question paper for a particular quiz"""

    user = request.user
    ci = RequestContext(request)
    if not user.is_authenticated() or not is_moderator(user):
        raise Http404("You are not allowed to view this page!")

    if questionpaper_id is None:
        if request.method == "POST":
            if request.POST.get("save") == "save":
                quiz = Quiz.objects.order_by("-id")[0]
                quest_paper = QuestionPaper()
                questions = request.POST.getlist("questions")
                tot_marks = 0
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    tot_marks += q.points
                quest_paper.quiz = quiz
                quest_paper.total_marks = tot_marks
                quest_paper.save()
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    quest_paper.fixed_questions.add(q)
                return redirect("/manage/showquiz")
            else:
                no_questions = int(request.POST.get("num_questions"))
                fetched_questions = fetch_questions(request)
                n = len(fetched_questions)
                msg = ""
                if no_questions < n:
                    i = n - no_questions
                    for i in range(0, i):
                        fetched_questions.pop()
                elif no_questions > n:
                    msg = "The given Criteria does not satisfy the number\
                    of Questions..."
                context = {"data": {"questions": fetched_questions, "msg": msg}}
                return render_to_response("automatic_questionpaper.html", context, context_instance=ci)
        else:
            context = {"data": {}}
            return render_to_response("automatic_questionpaper.html", context, context_instance=ci)
    else:
        if request.method == "POST":
            if request.POST.get("save") == "save":
                quest_paper = QuestionPaper.objects.get(id=questionpaper_id)
                questions = request.POST.getlist("questions")
                tot_marks = quest_paper.total_marks
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    tot_marks += q.points
                quest_paper.total_marks = tot_marks
                quest_paper.save()
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    quest_paper.questions.add(q)
                return redirect("/manage/showquiz")
            else:
                no_questions = int(request.POST.get("num_questions"))
                fetched_questions = fetch_questions(request)
                n = len(fetched_questions)
                msg = ""
                if no_questions < n:
                    i = n - no_questions
                    for i in range(0, i):
                        fetched_questions.pop()
                elif no_questions > n:
                    msg = "The given Criteria does not satisfy the number of \
                                                                Questions..."
                context = {"data": {"questions": fetched_questions, "msg": msg}}
                return render_to_response("automatic_questionpaper.html", context, context_instance=ci)
        else:
            context = {"data": {}}
            return render_to_response("automatic_questionpaper.html", context, context_instance=ci)
Exemplo n.º 3
0
def manual_questionpaper(request, questionpaper_id=None):
    user = request.user
    ci = RequestContext(request)
    if not user.is_authenticated() or not is_moderator(user):
        raise Http404("You are not allowed to view this page!")

    if questionpaper_id is None:
        if request.method == "POST":
            if request.POST.get("save") == "save":
                questions = request.POST.getlist("questions")
                quest_paper = QuestionPaper()
                quiz = Quiz.objects.order_by("-id")[0]
                tot_marks = 0
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    tot_marks += q.points
                quest_paper.quiz = quiz
                quest_paper.total_marks = tot_marks
                quest_paper.save()
                for i in questions:
                    q = Question.objects.get(id=i)
                    quest_paper.questions.add(q)
                return redirect("/manage/showquiz")
            else:
                fetched_questions = fetch_questions(request)
                n = len(fetched_questions)
                msg = ""
                if n == 0:
                    msg = "No matching Question found..."
                context = {"data": {"questions": fetched_questions, "msg": msg}}
                return render_to_response("manual_questionpaper.html", context, context_instance=ci)
        else:
            context = {"data": {"tags": tags}}
            return render_to_response("manual_questionpaper.html", context, context_instance=ci)

    else:
        if request.method == "POST":
            if request.POST.get("save") == "save":
                quest_paper = QuestionPaper.objects.get(id=questionpaper_id)
                questions = request.POST.getlist("questions")
                tot_marks = quest_paper.total_marks
                for quest in questions:
                    q = Question.objects.get(id=quest)
                    tot_marks += q.points
                    quest_paper.total_marks = tot_marks
                    quest_paper.save()
                    for i in questions:
                        q = Question.objects.get(id=i)
                        quest_paper.questions.add(q)
                        return redirect("/manage/showquiz")
            else:
                fetched_questions = fetch_questions(request)
                n = len(fetched_questions)
                msg = ""
                if n == 0:
                    msg = "No matching Question found..."
                tags = Tag.objects.all()
                context = {"data": {"questions": fetched_questions, "msg": msg}}
                return render_to_response("manual_questionpaper.html", context, context_instance=ci)
        else:
            context = {"data": {}}
            return render_to_response("manual_questionpaper.html", context, context_instance=ci)