def play_quiz(qid=None): form = Play() if not current_user.is_authenticated: flash('Please Login for playing Quiz..') return redirect('/login') if request.method == "POST": if form.validate(): if question := Quiz.get_question(form.qid.data): if Quiz.attempt_question(current_user, form.ans.data, question): session['score'] += 10 return redirect('/play') else: return redirect('/final_score') return render_template('404.html') else: errors = [] errors.append(form.qid.errors) errors.append(form.ans.errors) errors.append(form.current_score.errors) errors.append(form.correct_ans.errors) if qid: return redirect('/play/') return str(errors)
def quiz_dashboard(qid=None): if not current_user.is_authenticated: flash('Login is Required for this action!') return redirect('/', 302) if not current_user.is_admin: flash('You need to be an Admin for Performing this action!') return redirect('/', 302) template = "_question.html" req_path = request.path.split('/')[-1] if qid and len(qid) > 24: return render_template('404.html') if req_path == qid: req_path = request.path.split('/')[-2] if req_path == 'add': form = AddQuestion() if request.method == "POST": if form.validate(): sol = { 1: form.option1.data, 2: form.option2.data, 3: form.option3.data, 4: form.option4.data, } Quiz(question=form.question.data, options=[ form.option1.data, form.option2.data, form.option3.data, form.option4.data, ], answer=sol.get(form.solution.data)).save_quiz() flash('Question Saved Successfully!') return redirect('/admin/dashboard/Quiz/edit') return render_template('add' + template, form=form) elif req_path == 'edit': if not qid: questions = Quiz.get_questions(userID=None, show_history=True, is_admin=True, limit=1000) for question in questions: question._id = str(question._id) return render_template('display_questions.html', questions=questions) form = EditQuestion() question = Quiz.get_question(qid) if request.method == "POST": if form.validate_on_submit(): if question: question.question = form.question.data question.options = [ form.option1.data, form.option2.data, form.option3.data, form.option4.data ] sol = { 1: form.option1.data, 2: form.option2.data, 3: form.option3.data, 4: form.option4.data, } question.answer = sol.get(form.solution.data) question.update_quiz_info() # print('Quiz updated!') flash('Question Edited Successfully!') return redirect('/admin/dashboard/Quiz/edit') else: flash('Unable to find Question in DB') return redirect('/') else: flash("Couldn't Validate form..") # print(form.validate_on_submit()) return render_template('edit' + template, form=form) if question: form.solution.default = question.options.index(question.answer) + 1 form.process() form.question.data = question.question form.option1.data = question.options[0] form.option2.data = question.options[1] form.option3.data = question.options[2] form.option4.data = question.options[3] # form.process() return render_template('edit' + template, form=form) elif req_path == 'delete' or qid: if request.method == "POST" and qid: # print(help(Quiz.DB.CURSOR.delete_one)) Quiz.DB.CURSOR.Quiz.delete_one({'_id': ObjectId(qid)}) flash('Question Deleted!') return redirect('/admin/dashboard/Quiz/delete') if not qid: questions = Quiz.get_questions(userID=None, show_history=True, is_admin=True, limit=1000) for question in questions: question._id = str(question._id) return render_template('display_questions.html', questions=questions) return render_template('delete_question.html') else: return render_template('404.html')