Beispiel #1
0
def edit_profile(user_id):
    user = User.query.get_or_404(user_id)
    if user.is_admin:
        form = EditAdministratorForm()
    elif user.is_teacher:
        form = EditTeacherForm()
    else:
        form = EditStudenteForm()

    if form.validate_on_submit():
        content = render_template(
            'logs/admin/edit_profile.html',
            username_old=user.username, name_old=user.name,
            username_new=form.name.data, user_new=form.username.data)
        log_user(content)

        user.number = form.username.data
        user.name = form.name.data
        user.remark = form.remark.data
        db.session.commit()

        flash(_('Profile updated.'), 'success')
        redirect_back()

    form.username.data = user.number
    form.name.data = user.name
    form.remark.data = user.remark

    return render_template('admin/edit_profile.html', form=form)
Beispiel #2
0
def review(report_id):
    form = ReviewForm()
    report = Report.query.get_or_404(report_id)

    if current_user.is_student and current_user.id == report.speaker_id:
        abort(403)
    elif current_user.is_teacher and current_user.id != report.teacher_id:
        abort(403)
    else:
        record = report.search_recordtabel(current_user.id)
        if form.validate_on_submit():
            from os import path

            content = render_template('logs/user/reivew.html',
                                      course=report.course_name,
                                      number=report.speaker_number,
                                      name=report.speaker_name,
                                      report=report.name)
            log_user(content=content)

            upper = current_app.config['RECORD_TABLE_UPPER_LIMIT']
            lower = current_app.config['RECORD_TABLE_LOWER_LIMIT']
            if not lower <= form.score.data <= upper:
                flash(
                    _('The score out of range from %(lower)s to %(upper)s.',
                      lower=lower,
                      upper=upper), 'error')
                return redirect_back()

            file = request.files.get('file')
            filename = None
            if file:
                filename = gen_uuid(file.filename)
                file.save(
                    path.join(current_app.config['UPLOAD_PATH'], filename))

            if record is None:
                record = RecordTable(report_id=report.id,
                                     user_id=current_user.id,
                                     score=form.score.data,
                                     remark=form.remark.data,
                                     file=filename)
                db.session.add(record)
            else:
                record.score = form.score.data
                record.remark = form.remark.data
                if file:
                    record.file = filename

            db.session.commit()
            flash(_('Reviewed success.'), 'success')
            return redirect_back()

        if record is not None:
            form.score.data = record.score
            form.remark.data = record.remark

    return render_template('user/review.html', form=form)
Beispiel #3
0
def add_report_batch(course_id):
    from os import path
    from uuid import uuid4

    import pandas as pd

    form = AddReportBatchForm()
    if form.validate_on_submit():
        file = request.files.get('file')
        path = path.join(
            current_app.config['FILE_CACHE_PATH'], safe_filename(file.filename))
        file.save(path)
        df = pd.read_excel(path)

        if not set(df.columns) >= set(['name', 'number', 'remark']):
            flash(
                _("The EXCEL file columns should contain 'name', 'number' and 'remark'."), 'error')
            return redirect_back()

        course = Course.query.get_or_404(course_id)
        for i, row in df.iterrows():
            number = row['number']
            if isinstance(number, (int, float)):
                number = str(int(number))

            user = User.query.filter_by(number=number).one()
            if user:
                if course.grade == user.grade:
                    content = render_template(
                        'logs/admin/add_report.html', course=course.name, grade=course.grade,
                        username=user.number, name=user.name, report=row['name'])
                    log_user(content)

                    report = Report(
                        course_id=course_id,
                        speaker_id=user.id,
                        name=row['name'],
                        remark=row['remark']
                    )
                    db.session.add(report)
                    db.session.commit()
                else:
                    flash(
                        _('The %(speaker)s is not belong to this course.', speaker=user.number), 'error')
            else:
                flash(_("%(number)s is not existed.",
                        number=number), 'error')

        flash_errors(form)
        flash(_('Add Report success.'), 'success')
        return redirect_back()

    return render_template('admin/add_report_batch.html', form=form)
Beispiel #4
0
def register_batch():
    from os import path
    from uuid import uuid4

    import pandas as pd

    form = RegisterBatchForm()
    if form.validate_on_submit():
        file = request.files.get('file')
        path = path.join(
            current_app.config['FILE_CACHE_PATH'], safe_filename(file.filename))
        file.save(path)
        df = pd.read_excel(path)

        if not set(df.columns) >= set(['number', 'name', 'role', 'remark', 'password']):
            flash(
                _("The EXCEL file columns should contain 'number', 'name', 'role', 'remark' and 'password'."), 'error')
            return redirect_back()

        for i, row in df.iterrows():
            content = render_template(
                'logs/admin/register_user.html',
                username=row['number'], name=row['name'])
            log_user(content)

            if not User.query.filter_by(number=row['number']).one_or_none():
                if row['role'] not in ['Teacher', 'Student']:
                    flash(_("%(number)s role should be 'Student' or 'Teacher'.",
                            number=row['number']), 'error')
                else:
                    user = User(
                        number=row['number'],
                        name=row['name'],
                        remark=row['remark']
                    )
                    user.set_password(row['password'])
                    user.set_role(row['role'])
                    db.session.add(user)

                    try:
                        db.session.commit()
                    except:
                        db.session.rollback()
            else:
                flash(_("%(number)s is already existed.",
                        number=row['number']), 'error')

        flash_errors(form)
        flash(_('Register success.'), 'success')
        return redirect_back()

    return render_template('admin/register_batch.html', form=form)
Beispiel #5
0
def change_password():
    form = ChangePasswordForm()
    if form.validate_on_submit():
        log_user(
            content=render_template('logs/user/settings/change_password.html'))

        current_user.set_password(form.password.data)
        db.session.commit()

        flash(_('Password updated.'), 'success')
        redirect_back()

    return render_template('user/settings/change_password.html', form=form)
Beispiel #6
0
def add_course():
    form = AddCourseTeacherForm()
    if current_user.is_admin:
        form = AddCourseAdministratorForm()

    if form.validate_on_submit():
        content = render_template(
            'logs/admin/add_course.html', grade=form.grade.data, name=form.name.data)
        log_user(content)

        if current_user.is_teacher:
            teacher_id = current_user.id
        else:
            teacher_id = form.teacher.data

        course = Course(
            teacher_id=form.teacher.data,
            name=form.name.data,
            grade=form.grade.data,
            remark=form.remark.data
        )
        db.session.add(course)
        db.session.commit()

        flash(_('Add course success.'), 'success')
        return redirect_back()

    return render_template('admin/add_course.html', form=form)
Beispiel #7
0
def add_report(course_id):
    form = AddReportForm()
    if current_user.is_teacher:
        course = Course.query.get_or_404(course_id)
        if course.teacher_id != current_user.id:
            abort(403)

    if form.validate_on_submit():
        course = Course.query.get_or_404(course_id)
        user = User.query.filter_by(number=form.speaker.data).one()
        if course.grade == user.grade:
            content = render_template(
                'logs/admin/add_report.html', course=course.name, grade=course.grade,
                username=user.number, name=user.name, report=form.name.data)
            log_user(content)

            report = Report(
                course_id=course_id,
                speaker_id=user.id,
                name=form.name.data,
                remark=form.remark.data
            )
            db.session.add(report)
            db.session.commit()

            flash(_('Add Report success.'), 'success')
        else:
            flash(_('The speaker is not belong to this course.'), 'error')

        return redirect_back()

    return render_template('admin/add_report.html', form=form)
Beispiel #8
0
def change_password(user_id):
    user = User.query.get_or_404(user_id)
    form = ChangePasswordForm()
    if form.validate_on_submit():
        if user.validate_password(form.old_password.data):
            content = render_template(
                'logs/admin/change_password.html',
                username=user.username, name=user.name)
            log_user(content)

            user.set_password(form.password.data)
            db.session.commit()

            flash(_('Password updated.'), 'success')
            redirect_back()
        else:
            flash(_('Old password is incorrect.'), 'warning')

    return render_template('admin/change_password.html', form=form)
Beispiel #9
0
def delete_user(user_id):
    user = User.query.get_or_404(user_id)

    content = render_template(
        'logs/admin/delete_user.html', username=user.username, name=user.name)
    log_user(content)

    db.session.delete(user)
    db.session.commit()

    flash(_('User deleted.'), 'info')
    return redirect_back()
Beispiel #10
0
def re_authenticate():
    if login_fresh():
        return redirect(url_for('front.index'))

    form = LoginForm()
    if form.validate_on_submit() and current_user.validate_password(
            form.password.data):
        confirm_login()
        log_user(content=render_template('logs/auth/login.html'))

        return redirect_back()

    return render_template('auth/login.html', form=form)
Beispiel #11
0
def edit_profile():
    if current_user.is_admin:
        form = EditAdministratorForm()
    elif current_user.is_teacher:
        form = EditTeacherForm()
    else:
        form = EditStudenteForm()

    if form.validate_on_submit():
        log_user(
            content=render_template('logs/user/settings/edit_profile.html'))

        current_user.remark = form.remark.data
        db.session.commit()

        flash(_('Profile updated.'), 'success')
        redirect_back()

    form.username.data = current_user.number
    form.name.data = current_user.name
    form.remark.data = current_user.remark

    return render_template('user/settings/edit_profile.html', form=form)
Beispiel #12
0
def set_locale(locale):
    if locale not in current_app.config['LOCALES']:
        abort(404)

    response = make_response(redirect_back())
    response.set_cookie('locale', locale, max_age=60 * 60 * 24 * 7)

    if current_user.is_authenticated:
        current_user.locale = locale
        db.session.commit()

    flash(_('Setting updated.'), 'success')

    return response
Beispiel #13
0
def switch_report_state(report_id):
    report = Report.query.get_or_404(report_id)
    content = render_template(
        'logs/admin/switch_report_state.html',
        grade=report.grade, course=report.course_name, report=report.name)
    log_user(content)

    if current_user.is_teacher and report.teacher_id != current_user.id:
        abort(403)

    report.active = not report.active
    db.session.commit()
    flash(_('Report state switched.'), 'success')
    return redirect_back()
Beispiel #14
0
def delete_report(report_id):
    report = Report.query.get_or_404(report_id)
    content = render_template(
        'logs/admin/delete_report.html',
        grade=report.grade, course=report.course_name, report=report.name)
    log_user(content)

    if current_user.is_teacher:
        if report.teacher_id != current_user.id:
            abort(403)

    db.session.delete(report)
    db.session.commit()

    flash(_('Report deleted.'), 'info')
    return redirect_back()
Beispiel #15
0
def delete_record(record_id):
    record = RecordTable.query.get_or_404(record_id)

    content = render_template(
        'logs/admin/delete_record.html', username=record.reviewer_number,
        name=record.reviewer_name, report=record.report_name)
    log_user(content)

    if current_user.is_teacher:
        if record.teacher_id != current_user.id:
            abort(403)

    db.session.delete(record)
    db.session.commit()

    flash(_('Record Table deleted.'), 'info')
    return redirect_back()
Beispiel #16
0
def switch_course_state(course_id):
    course = Course.query.get_or_404(course_id)

    content = render_template(
        'logs/admin/switch_course_state.html', grade=course.grade, name=course.name)
    log_user(content)

    if current_user.is_teacher and course.teacher_id != current_user.id:
        abort(403)
    course.active = not course.active
    db.session.commit()

    for report in Report.query.filter_by(course_id=course.id).all():
        report.active = not report.active
    db.session.commit()

    flash(_('Course state switched.'), 'success')
    return redirect_back()
Beispiel #17
0
def register_administrator():
    form = RegisterAdministratorForm()
    if form.validate_on_submit():
        content = render_template(
            'logs/admin/register_user.html',
            username=form.username.data, name=form.name.data)
        log_user(content)

        user = User(
            number=form.username.data,
            name=form.name.data,
            remark=form.remark.data
        )
        user.set_password(form.password.data)
        user.set_role('Administrator')
        db.session.add(user)

        flash(_('Register success.'), 'success')
        return redirect_back()

    return render_template('admin/register_user.html', form=form)