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))