Esempio n. 1
0
def admin_addset():
    if(current_user.is_admin() == False):
        return "Access Denied"

    form=AddQuestionSetForm()
    if form.validate_on_submit():
        form.validate()
        #check to see if a category has been entered
        existing_category = form.existing_category.data
        new_category = form.new_category.data
        if not (existing_category or new_category):
            flash("Error: No category entered")
            return render_template('admin-addset.html', form=form)
        #Check if existing category data actually is present in database
        if existing_category and not new_category:
            present = Question.query.filter_by(category=form.existing_category.data).first()
            if present is None:
                flash("Error: Could not find existing category. Please try again.")
                return render_template("admin-addset.html", form=form)
        #check if question already exists in the database (questions should be unique)
        present = db.session.query(Question.id).filter_by(question=form.question.data).scalar() is not None
        if present:
            flash("Error: This question already exists. Delete the question if you are wishing to replace it.")
            return render_template("admin-addset.html", form=form)

        #Check if all answers are unique: Can cause issues if not
        answers =[]
        answers.append(form.answer.data)
        if form.fake_ans1.data in answers:
            flash("Error: Answer and fake answers must be unique.")
            return render_template("admin-addset.html", form=form)
        else:
            answers.append(form.fake_ans1.data)
            if form.fake_ans2.data in answers:
                flash("Error: Answer and fake answers must be unique.")
                return render_template("admin-addset.html", form=form)
            else:
                answers.append(form.fake_ans2.data)
                if form.fake_ans3.data in answers:
                    flash("Error: Answer and fake answers must be unique.")
                    return render_template("admin-addset.html", form=form)

        #load in form data and prepare to submit to database       
        question = Question(question=form.question.data)
        if existing_category:
            question.category = form.existing_category.data
        else:
            question.category = form.new_category.data
        db.session.add(question)

        
        #check if answer is already in the answers table. If it isnt add to table. If present retrieve its ID and serve to question answer table
        present = db.session.query(Answer.id).filter_by(answer=form.answer.data).scalar() is not None
        if not present:
            #answer not present -> add to ans table and add relation
            answer = Answer(answer=form.answer.data)
            db.session.add(answer)
            db.session.commit()
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =answer.id, correct=True, num_picked=0)
        else:
            #answer present -> get ID and add relation
            answer =Answer.query.filter_by(answer=form.answer.data).first()
            answer_id =answer.id
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =answer_id, correct=True, num_picked=0)
        db.session.add(questionanswer)
        db.session.commit()
        
        
        #add in incorrect answers to answer table. Need to check an answer isnt already in the table due to table relations.
        #if incorrect ans is already in the database we need to grab its ID and store it.

        #process incorrect ans 1 using above logic.
        present = db.session.query(Answer.id).filter_by(answer=form.fake_ans1.data).scalar() is not None
        if not present:
            incorrect1 = Answer(answer=form.fake_ans1.data)
            db.session.add(incorrect1)
            db.session.commit()
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect1.id, correct=False, num_picked=0)
            db.session.add(questionanswer)
            db.session.commit()
        else:
            incorrect1 = Answer.query.filter_by(answer=form.fake_ans1.data).first()
            incorrect1_id = incorrect1.id
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect1_id, correct=False, num_picked=0)
        db.session.add(questionanswer)
        db.session.commit()

        #process incorrect ans 2 using above logic
        present = db.session.query(Answer.id).filter_by(answer=form.fake_ans2.data).scalar() is not None
        if not present:
            incorrect2 = Answer(answer=form.fake_ans2.data)
            db.session.add(incorrect2)
            db.session.commit()
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect2.id, correct=False, num_picked=0)
            db.session.add(questionanswer)
            db.session.commit()
        else:
            incorrect2 = Answer.query.filter_by(answer=form.fake_ans2.data).first()
            incorrect2_id = incorrect2.id
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect2_id, correct=False, num_picked=0)
        db.session.add(questionanswer)
        db.session.commit()

        #process incorrect ans 3 using above logic
        present = db.session.query(Answer.id).filter_by(answer=form.fake_ans3.data).scalar() is not None
        if not present:
            incorrect3 = Answer(answer=form.fake_ans3.data)
            db.session.add(incorrect3)
            db.session.commit()
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect3.id, correct=False, num_picked=0)
            db.session.add(questionanswer)
            db.session.commit()
        else:
            incorrect3 = Answer.query.filter_by(answer=form.fake_ans3.data).first()
            incorrect3_id = incorrect3.id
            questionanswer = QuestionAnswer(question_id=question.id, answer_id =incorrect3_id, correct=False, num_picked=0)
        db.session.add(questionanswer)
        db.session.commit()
        flash("Question set added!")
        return(redirect(url_for('admin')))
    return(render_template('admin-addset.html', form=form))