예제 #1
0
def saveResult():
    gameResult = request.args.get('gameResult')

    player1 = Player.query.filter_by(player_id = session['player_id']).first()
    player2 = Player.query.filter_by(player_id = request.args.get('player2_id')).first()


    if gameResult == "win":
        result = Result(player1.getId(), player2.getId())
        point = setRankPoint(player1, player2)
    else:
        result = Result(player2.getId(), player1.getId())
        point = setRankPoint(player2, player1)

    result.suggestResult = session['player_id']
    result.setPoint(point)
    db.session.add(result)
    db.session.commit()

    return redirect(url_for('index'))
예제 #2
0
def question(request,course_name):

        if not request.user.is_authenticated():  # если пользователь не зарегистрирован переход на страницу логин
            return redirect("/auth/login/")

        course = get_object_or_404(Course, slug=course_name)
        context = {}
        context.update(csrf(request))
        context = {
                    "course"     :  course,
                  }
        if request.POST.get("question_cur", "") and request.user.is_authenticated() and not request.POST.get("add_new_result", ""):  # если метод POST, и мы проходим курс
            question_cur_id = int(request.POST.get("question_cur", ""))
            question_next_id = Question.get_next_question_id(course, question_cur_id)
            result_id = int(request.POST.get("result", ""))
            answer_in_question_len = Answer.answers_in_question(question_cur_id).count()
            list_answers_right_id = []
            for answer in Answer.objects.filter(question=question_cur_id, is_correct=True):
                list_answers_right_id.append(answer.id)

            if len(request.POST.getlist("answer_id_list")) == 0:
                error_message = " Надо отметить как минимум  один ответ"

            if len(request.POST.getlist("answer_id_list")) == answer_in_question_len:
                error_message = " Все ответы не могут быть прравильные"

            if "error_message" in locals():
                question_next_id = question_cur_id
                context["error_message"]= error_message
            else:
                if len(request.POST.getlist("answer_id_list")) == len(list_answers_right_id):
                    for answer_id in request.POST.getlist("answer_id_list"):
                        if list_answers_right_id.count(int(answer_id)) >= 1:
                            correct_answer = True
                        else:
                            correct_answer = False
                            break
                else:
                    correct_answer = False

                UsersAnswer(
                            users=auth.get_user(request),
                            course=course,
                            question=Question.objects.get(id=question_cur_id),
                            result=Result.objects.get(id=result_id),
                            right=correct_answer
                            ).save()

            if Question.get_next_question_id(course, question_cur_id) == None:  # проверка на то что вопрос последний . None если последний.
                                                                                # сохраняем результат и переходим на страницу результатов

                all_users_answers_count = UsersAnswer.objects.filter(result=result_id,
                                                               users=auth.get_user(request),
                                                               ).count()

                correct_users_answer_count = UsersAnswer.objects.filter(result=result_id,
                                                                  users=auth.get_user(request),
                                                                  right=True).count()


                result_value =int((correct_users_answer_count / all_users_answers_count) * 100)
                result_end = Result.objects.get(id=result_id)
                result_end.is_complete = True
                result_end.resultValue = result_value
                result_end.save()

                context["main_menu"]     =  "result"
                context["output_result"] =  True
                context["result_value"]  =  result_value

                return render(request, 'result.html', context)

        else: # если метод не POST (пришли по внешней ссылке) или перешли со страници описания курса
            if Course.questions_course(course).count() == 0:   #  В кусе нет вопросов
                context["questions_asked"]  =  True
                return render(request, 'testing.html', context)
            else:  # Вопросы в курсе есть

                try:     # если на вопросы курса отвечали , но не закончили тест
                    result_obj = Result.objects.get(users=auth.get_user(request), course=course,is_complete=False)
                    list_question_saved = UsersAnswer.objects.filter(users=auth.get_user(request), course=course,result=result_obj.id )
                    question_cur_id = list_question_saved.aggregate(Max('question'))["question__max"]
                    question_next_id = Question.get_next_question_id(course, question_cur_id)
                    result_id=result_obj.id

                except:  # тест не проходили или прошли и закончили
                    question_cur_id = 0
                    print("Проверка начыло")
                    question_next_id = Question.get_next_question_id(course, question_cur_id)
                    Result_new = Result(users=auth.get_user(request), course=course, is_complete=False)
                    Result_new.save()
                    result_id=int(Result_new.id)
                    print("Проверка конец")


        context["result"]          =   result_id
        context["answer_list"]     =   Answer.answers_in_question(question_next_id)
        context["question_cur_id"] =   question_next_id
        context["question"]        =   Question.objects.get(id=question_next_id)

        return render(request, 'testing.html', context)
예제 #3
0
def do_examination(examination_id=0):
    examination = Examination.query.get_or_404(examination_id)
    result = g.user.results.filter_by(examination_id=examination.id).first()
    uid = 'u-%d-e-%d' % (g.user.id, examination.id)

    if result and result.is_finished():
        session.pop(uid, None)
        return redirect(url_for('result.show', result_id=result.id))

    start_time = None
    if uid in session:
        start_time = session[uid]
        if datetime.datetime.now() > session[uid] + datetime.timedelta(minutes=examination.limited_time, seconds=30):
            session.pop(uid, None)
            result = g.user.results.filter_by(examination_id=examination.id).first()
            if result:
                if result.is_doing():
                    result.status =  RESULT.STATUS_FINISHED
                    db.session.add(result)
                    db.session.commit()
                return redirect(url_for('result.show', result_id=result.id))
            else:
                flash('Error !', category='danger')
                return redirect(url_for('index'))
    else:
        result = Result(g.user, examination, 0)
        db.session.add(result)
        db.session.commit()
        session[uid] = datetime.datetime.now()

    form = DoExaminationForm(obj=examination)
    counter = 0
    for sub_form in form.questions:
        sub_form.answers.choices = [(str(answer.id), answer.content) for answer in examination.questions[counter].answers]
        sub_form.question_id.data = examination.questions[counter].id
        sub_form.answers.label.text = examination.questions[counter].content
        counter += 1

    correct = 0
    if form.validate_on_submit():
        for entry in form.questions.data:
            if examination.questions.filter_by(id=int(entry['question_id'])).first().correct_id == int(entry['answers']):
                correct += 1
    else:
        for entry in form.questions.data:
            if entry['answers'].isdigit() and examination.questions.filter_by(id=int(entry['question_id'])).first().correct_id == int(entry['answers']):
                correct += 1

    result = Result.query.filter_by(user_id=g.user.id, examination_id=examination.id).first()
    if result and request.method == 'POST':
        result.score = correct
        result.status = RESULT.STATUS_FINISHED
        db.session.add(result)
        db.session.commit()

        return redirect(url_for('result.show', result_id=result.id))

    remain = examination.limited_time * 60
    if start_time:
        remain = examination.limited_time - (datetime.datetime.now() - start_time).seconds

    return render_template('examination/do_examination.html', form=form, examination=examination, remain=remain)