def account(): """Accout of User Returns: Rendering page -- If user want to change profile pic or name or email. it will do it. """ form = UpdateAccountForm() if form.validate_on_submit(): if form.picture.data: picture_file = save_picture(form.picture.data) current_user.image_file = picture_file current_user.username = form.username.data current_user.email = form.email.data db.session.commit() flash("Your account has been updated!", "success") return redirect(url_for("users.account")) form.username.data = current_user.username form.email.data = current_user.email image_file = profile_path() return render_template( "users/account.html", title="Account", css_files=["css/base.css", "css/users/accounts.css"], image_file=image_file, form=form, js_files=["js/users/account.js"], )
def add_unit(course_id): """Add unit to given course id Args: course_id (int): Returns: url page: If form is validate than add unit and show mesage of successfully added else render template of units. """ _course = Course.query.filter(Course.id == course_id).first() form = UnitForm(_course) if form.validate_on_submit(): unit = Unit(chapter_no=form.chapter_no.data, name=form.name.data, course=_course) db.session.add(unit) db.session.commit() flash("New unit added successfully!", "success") return redirect(url_for("courses.all_units", course_id=course_id)) return render_template( "questions/unit_form.html", form=form, css_file="css/base.css", css_file2="css/questions/courses_form.css", js_file="js/questions/add_unit.js", image_file=profile_path(), title="Add Units", )
def paper_generate_request(course_id): """Generate paper request Args: course_id (Int): Course ID of registered course Returns: HTML: Go to marks distribution page and then generate page. """ if request.method == "POST": data = request.get_json() if data: data = json_url.dumps(data) return redirect( url_for("papers.mark_distribution_form", course_id=course_id, data=data)) flash("Form can't be empty!") return render_template( "papers/generate_request.html", js_file="js/papers/generate_request.js", css_file="css/papers/generate_request.css", css_file2="css/base.css", image_file=profile_path(), )
def add_unit(course_id): """Add unit to course Args: course_id (int): ID of course Returns: HTML: Go to question of units template """ _course = Course.query.filter(Course.id == course_id).first() form = UnitForm(_course) if form.validate_on_submit(): unit = Unit(chapter_no=form.chapter_no.data, name=form.name.data, course=_course) db.session.add(unit) db.session.commit() flash("New unit added successfully!", "success") return redirect(url_for("courses.all_units", course_id=course_id)) return render_template( "course/unit_form.html", course_id=course_id, form=form, css_files=["css/base.css", "css/course/courses_form.css"], js_files=["js/course/add_unit.js"], image_file=profile_path(), title="Add Units", )
def contact_us(): """Render Contact us page Returns: HTML-- To collect Info from user for suggestion or bug or any comment about web-app. """ form = ContactUs() if form.validate_on_submit(): data = dict( name=form.name.data, email=form.email.data, mobile=form.mobile.data, subject=form.subject.data, message=form.message.data, ) send_contact_us_email(**data) send_contact_us_receipt_email(**data) flash( "Your Message has recorded successfully! We will reach out soon.", "success") return redirect(url_for("main.contact_us")) return render_template( "main/contact-us/contact_us_form.html", title="Contact Us", form=form, css_files=["css/contact_us/main.css", "css/contact_us/util.css"], image_file=profile_path(), )
def all_papers(course_id): main_page = request.args.get("page", 1, type=int) _papers = Paper.query.filter_by(course_id=course_id).paginate( page=main_page, per_page=10) return render_template( "papers/papers.html", papers=_papers, image_file=profile_path(), css_files=["css/papers/all_papers.css"], )
def all_questions(course_id, unit_id, qtype): """Rendering Question page Arguments: course_id {Object} -- Id for course qtype {Subjective/mcq} -- Specification about question is subjective or MCQ type Returns: HTML Function -- According to chosen type of question render page """ main_page = request.args.get("page", 1, type=int) _courses = Course.query.filter(Course.teacher == current_user).all() _questions = Question.query.filter( and_( Question.unit_id == unit_id, Question.question_type == QuestionTypeEnum.from_string(qtype), )).paginate(page=main_page, per_page=10) common_args = dict( courses=_courses, course_id=course_id, unit_id=unit_id, qtype=qtype, image_file=profile_path(), ) if qtype == "mcq": return render_template( "questions/mcq_questions.html", questions=_questions, css_files=[ "css/base.css", "css/questions/mcqs.css", "css/sideNav.css", "css/questions/questions.css", "css/questions/mcq_form.css", "css/questions/question_form.css", ], js_files=["js/questions/update_mcq_question.js", "js/sideNav.js"], title="Objective Questions", **common_args, ) else: return render_template( "questions/questions.html", questions=_questions, css_files=[ "css/base.css", "css/questions/questions.css", "css/sideNav.css", "css/questions/question_form.css", ], js_files=[ "js/questions/update_question.js", "js/sideNav.js", ], title="Subjective Questions", **common_args, )
def help_page(): """Render help page Returns: HTML - It will redirect to help page. """ return render_template( "main/help.html", title="Help", css_files=["css/main/help.css"], image_file=profile_path(), )
def about_us(): """Render about us page Returns: HTML -- It will redirect to about us page. """ return render_template( "main/about.html", title="About Us", css_files=["css/main/about.css"], image_file=profile_path(), )
def policy_page(): """Go to privacy policy page Returns: HTML: render to privacy and policy page """ return render_template( "main/privacy-policy.html", title="Privacy Policy", css_files=["css/main/privacy_policy.css"], image_file=profile_path(), )
def terms_of_service_page(): """Go to terms and service page Returns: HTML: Render to terms and service page """ return render_template( "main/terms-of-service.html", title="Terms Of Service", css_files=["css/main/terms_of_service.css"], image_file=profile_path(), )
def policy_page(): """Render template of policy page Returns: HTML: Go to privacy policy HTML page """ return render_template( "main/privacy-policy.html", title="Privacy Policy", css_file="css/main/privacy_policy.css", image_file=profile_path(), )
def update_question(course_id, unit_id, qtype, question_id): """For updating question Returns: Render template -- for updating questions if that question is exist then update it by id.And update marks , difficulty and IMP flag accorging to input. And do changes in database accordingly. """ common_args = dict( course_id=course_id, unit_id=unit_id, qtype=qtype, image_file=profile_path(), ) _question = db.session.query(Question).filter_by(id=question_id).first() if _question is None: flash(f"Question:{question_id} Does not exist", "Failure") return redirect_to_all_questions(course_id, unit_id, qtype) data = _question.to_dict() data.update(_question.question) if qtype == "mcq": form = MCQQuestionForm(**data) if form.validate_on_submit(): _question.question = dict( question=form.question.data, option1=form.option1.data, option2=form.option2.data, option3=form.option3.data, option4=form.option4.data, ) update_question_in_db(form, _question, qtype) flash(f"Question:{question_id} updated successfully!", "success") return redirect_to_all_questions(course_id, unit_id, qtype) return render_template( "questions/mcq_question_form.html", form=form, css_files=["css/questions/question_form.css"], js_files=["js/questions/question_form.js"], **common_args, ) else: form = QuestionForm(**data) if form.validate_on_submit(): _question.question = dict(question=form.question.data) update_question_in_db(form, _question, qtype) flash(f"Question:{question_id} updated successfully!", "success") return redirect_to_all_questions(course_id, unit_id, qtype) return render_template( "questions/question_form.html", form=form, css_files=["css/questions/question_form.css"], js_files=["js/questions/question_form.js"], **common_args, )
def home(): """Render Home page Returns: HTML -- It will render home page. """ return render_template( "papers/home.html", css_file="css/base.css", css_file2="css/home.css", title="Home", image_file=profile_path(), )
def all_courses(): """Show listed down course of user Returns: HTML function -- Redirect to courses pages where listed down all courses. """ _courses = Course.query.filter(Course.teacher == current_user).all() return render_template( "course/courses.html", courses=_courses, css_files=["css/base.css", "css/course/courses.css"], js_files=["js/course/remove_course.js"], image_file=profile_path(), title="Courses", )
def confirm_paper_template(course_id): if request.method == "POST": if request.get_json(): return redirect( url_for("papers.generate_paper", course_id=course_id)) flash("Form can't be empty!") paper_template = json_url.loads(session["paper_template"]) return render_template( "papers/confirm_paper_template.html", course_id=course_id, paper_template=paper_template, css_files=["css/papers/confirm_paper_template.css"], js_files=["js/papers/confirm_paper_template.js"], image_file=profile_path(), title="Mark Distribution", )
def home(): """Render Home page Returns: HTML -- It will render home page. """ main_page = request.args.get("page", 1, type=int) _courses = Course.query.filter(Course.teacher == current_user).all() course_ids = [course.id for course in _courses] _papers = Paper.query.filter(Paper.course_id.in_(course_ids)).paginate( page=main_page, per_page=10) return render_template( "papers/home.html", css_files=["css/base.css", "css/papers/home.css"], papers=_papers, title="Home", image_file=profile_path(), )
def all_units(course_id): """Render to unit page of given course_id Args: course_id (int): ID of given course Returns: HTML """ _course = Course.query.filter(Course.id == course_id).first() _units = Unit.query.filter(Unit.course == _course).all() return render_template( "questions/units.html", image_file=profile_path(), units=_units, title="Units", css_file="css/base.css", css_file2="css/questions/courses.css", )
def paper_generate_request(course_id): """ generate paper from json data """ if request.method == "POST": data = request.get_json() if data: session["total_marks"] = json_url.dumps(data["total_marks"]) session["no_of_subquestions"] = json_url.dumps(data["questions"]) return redirect( url_for( "papers.mark_distribution_form", course_id=course_id, )) flash("Form can't be empty!") return render_template( "papers/generate_request.html", js_files=["js/papers/generate_request.js"], css_files=["css/papers/generate_request.css", "css/base.css"], image_file=profile_path(), )
def all_units(course_id): """Give all units list of course with given course ID Args: course_id (int): Course ID of Course Returns: HTML: returns question page for course """ _course = Course.query.filter(Course.id == course_id).first() _units = Unit.query.filter(Unit.course == _course).all() return render_template( "course/units.html", course_id=course_id, image_file=profile_path(), units=_units, title="Units", css_files=["css/base.css", "css/course/courses.css"], js_files=["js/course/remove_course.js"], )
def add_course(): """Rendering to add course page Returns: HTML function -- For adding new course to user's account. After submitting new course redirect to courses page.Else show form which shows add course feild. """ form = CourseForm() if form.validate_on_submit(): _course = Course(name=form.course.data, teacher=current_user) db.session.add(_course) db.session.commit() flash("New course added successfully!", "success") return redirect(url_for("courses.all_courses")) return render_template( "course/course_form.html", form=form, css_files=["css/base.css", "css/course/courses_form.css"], js_files=["js/course/add_course.js"], image_file=profile_path(), title="Add Courses", )
def confirm_generated_paper(paper_id): form = ExaminerEmailForm() if form.validate_on_submit(): if form.generate.data == "YES": paper = Paper.query.filter_by(id=paper_id).first() email_pdf(form.examiner_email.data, current_user.email, paper) flash( "An email has been sent to you and examiner with generated pdf as an attachment." ) return redirect(url_for("papers.home")) db.session.query(Question).filter_by(id=paper_id).delete( synchronize_session="fetch") db.session.commit() flash("Paper generation aborted successfully!") return redirect(url_for("papers.home")) return render_template( "papers/confirm_generated_paper.html", css_files=["css/papers/generate_paper.css"], paper_id=paper_id, form=form, image_file=profile_path(), js_files=["js/papers/confirm_generated_paper.js"], )
def add_question(course_id, unit_id, qtype): """Adding question Arguments: course_id {Object} -- Course ID which uniquley defined. qtype {Subjective/MCQ} -- What is the type of question ? subjective or MCQ Returns: HTML function -- If the course instructor is not user than it will throw error 403 then according to type of question eg : if type is MCQ then difficulty, mark, options, IMP flag and if type is subjective then difficulty,mark,IMP flag added with question to the database and will add to UI and listdown on screen. """ _courses = Course.query.filter(Course.teacher == current_user).all() if qtype == "mcq": form = MCQQuestionForm() if form.validate_on_submit(): _question = MCQQuestion( question=form.question.data, mark=form.mark.data, difficulty=DifficultyLevel(form.difficulty.data), cognitive_level=CognitiveLevel(form.cognitive_level.data), imp=form.imp.data, option1=form.option1.data, option2=form.option2.data, option3=form.option3.data, option4=form.option4.data, unit_id=unit_id, ) db.session.add(_question) db.session.commit() flash("New question added successfully!", "success") return redirect( url_for( "questions.all_questions", qtype="mcq", course_id=course_id, unit_id=unit_id, )) return render_template( "questions/mcq_question_form.html", form=form, courses=_courses, course_id=course_id, unit_id=unit_id, qtype=qtype, css_file="css/base.css", css_file2="css/questions/mcq_form.css", css_file3="css/questions/sideNav.css", css_file4="css/questions/question_form.css", js_file="js/questions/mcq_question_form.js", js_file2="js/sideNav.js", image_file=profile_path(), title="Add Objective Question", ) else: form = QuestionForm() if form.validate_on_submit(): _question = Question( question=form.question.data, mark=form.mark.data, difficulty=DifficultyLevel(form.difficulty.data), cognitive_level=CognitiveLevel(form.cognitive_level.data), imp=form.imp.data, unit_id=unit_id, ) db.session.add(_question) db.session.commit() flash("New question added successfully!", "success") return redirect( url_for( "questions.all_questions", qtype="sub", course_id=course_id, unit_id=unit_id, )) return render_template( "questions/question_form.html", form=form, courses=_courses, course_id=course_id, unit_id=unit_id, qtype=qtype, css_file="css/base.css", css_file2="css/questions/question_form.css", css_file3="css/questions/sideNav.css", js_file="js/questions/question_form.js", js_file2="js/sideNav.js", image_file=profile_path(), title="Add Subjective Question", )
def add_question(course_id, unit_id, qtype): """Adding question Arguments: course_id {Object} -- Course ID which uniquely defined. question_type {Subjective/MCQ} -- What is the type of question ? subjective or MCQ Returns: HTML function -- If the course instructor is not user than it will throw error 403 then according to type of question eg : if type is MCQ then difficulty, mark, options, IMP flag and if type is subjective then difficulty,mark,IMP flag added with question to the database and will add to UI and list down on screen. """ _courses = Course.query.filter(Course.teacher == current_user).all() common_args = dict( courses=_courses, course_id=course_id, unit_id=unit_id, qtype=qtype, image_file=profile_path(), ) if qtype == "mcq": form = MCQQuestionForm() if form.validate_on_submit(): question = dict( question=form.question.data, option1=form.option1.data, option2=form.option2.data, option3=form.option3.data, option4=form.option4.data, ) flash("New question added successfully!", "success") add_question_to_db(form, question, unit_id, qtype) return redirect_to_all_questions(course_id, unit_id, qtype) return render_template( "questions/mcq_question_form.html", form=form, css_files=[ "css/base.css", "css/questions/mcq_form.css", "css/sideNav.css", "css/questions/question_form.css", ], js_files=["js/questions/mcq_question_form.js", "js/sideNav.js"], title="Add Objective Question", **common_args, ) else: form = QuestionForm() if form.validate_on_submit(): question = dict(question=form.question.data) flash("New question added successfully!", "success") add_question_to_db(form, question, unit_id, qtype) return redirect_to_all_questions(course_id, unit_id, qtype) return render_template( "questions/question_form.html", form=form, css_files=[ "css/base.css", "css/questions/question_form.css", "css/sideNav.css", ], js_files=["js/questions/question_form.js", "js/sideNav.js"], title="Add Subjective Question", **common_args, )