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"],
    )
Пример #2
0
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",
    )
Пример #3
0
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(),
    )
Пример #10
0
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(),
    )
Пример #11
0
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(),
    )
Пример #12
0
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(),
    )
Пример #13
0
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,
        )
Пример #14
0
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(),
    )
Пример #15
0
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",
    )
Пример #16
0
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",
    )
Пример #17
0
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(),
    )
Пример #18
0
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",
    )
Пример #19
0
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(),
    )
Пример #20
0
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"],
    )
Пример #21
0
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",
    )
Пример #22
0
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"],
    )
Пример #23
0
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",
        )
Пример #24
0
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,
        )