コード例 #1
0
ファイル: admin.py プロジェクト: gerelorant/Talajkviz
    def quiz(self, quiz_id: int, block: int = None, question: int = None):
        quiz = model.Quiz.query.get(quiz_id)
        if quiz is None:
            return abort(404)

        fill = model.FilledQuiz.query\
            .filter_by(user_id=current_user.id)\
            .filter_by(quiz_id=quiz_id).first()

        if fill is None:
            fill = model.FilledQuiz(
                user_id=current_user.id,
                quiz_id=quiz_id)
            model.db.session.add(fill)
            model.db.session.commit()

        if block is None:
            block = fill.current_block
        else:
            finish = request.args.get('finish', False)
            block = quiz.blocks.filter_by(order_number=block).first()
            if finish:
                fill.finished_blocks.append(block)
                model.db.session.commit()

        if block is None:
            block = quiz.blocks.order_by(model.Block.order_number).first()

        if block in fill.finished_blocks:
            answers = fill.answers\
                .join(model.Question)\
                .filter(model.Question.block_id == block.id)\
                .order_by(model.Question.order_number)

            block_points = model.int_or_float(
                sum([ans.points for ans in answers])
            )
            return self.render('answers.html', block=block,
                               answers=answers,
                               block_points=block_points,
                               total=fill.points)

        question = question or 1
        question = block.questions\
            .filter_by(order_number = question)\
            .first()

        if question not in fill.available_questions:
            return abort(403)

        if block == fill.current_block:
            form = QuestionForm.from_model(question, fill)
            return self.render('quiz.html', form=form)
        else:
            answer = fill.answers\
                .filter(model.Answer.question_id == question.id)\
                .first()
            return self. render('answer.html', answer=answer)