Exemplo n.º 1
0
def projectStatus(id):
    if not flask_login.current_user.is_authenticated:
        return redirect(url_for('login'))
    if utils.check_user_lab_admin():
        return redirect(url_for('manageProjects'))
    # user is a student
    try:
        student = database.getStudentByStudentId(
            flask_login.current_user.userId)
        project = None
        isStudentEnrolledInProject = database.isStudentEnrolledInProject(
            id, student.id)
        if not isStudentEnrolledInProject:
            flash("You are not enrolled in the project.", 'danger')
        else:
            project = database.getProjectById(id)

        return render_template(
            'projectStatus.html',
            title="Project Status",
            student=student,
            project=project,
            isStudentEnrolledInProject=isStudentEnrolledInProject)
    except Exception as e:
        app.logger.error('In projectStatus, Error is: {}\n{}'.format(
            e, traceback.format_exc()))
        return redirect(url_for('errorPage'))
Exemplo n.º 2
0
def showProposedProjects():
    try:
        student = None
        admin = None
        if flask_login.current_user.is_authenticated:
            if flask_login.current_user.userType == "student":
                student = database.getStudentByStudentId(flask_login.current_user.userId)
            elif flask_login.current_user.userType == "admin":
                admin = database.getAdminByAdminId(flask_login.current_user.userId)
        lab = None if not utils.check_user_lab() else database.getLabByAcronym(flask_login.current_user.userId)

        search_form = searchProposedProjects()
        # get Labs
        allLabs = database.getAllLabs()
        allLabsChoices = [(str(l.id), l.acronym) for l in allLabs]
        search_form.lab.choices = [('', 'ALL')] + allLabsChoices


        filters = {}
        if request.method == 'GET':
            app.logger.error('GET')
            search_form.lab.data = request.args.get('lab', None)
            search_form.search_text.data = request.args.get('search_text', None)
            filters = {
                'lab': request.args.get('lab', None),
                'search': request.args.get('search_text', None)
            }
        app.logger.info('\nIn proposedProjects, filters are: {}\n'.format(filters))
        proposedProjects = database.getAllProposedProjects(filters)
        return render_template('proposedProjects.html', title="Proposed Projects", search_form=search_form,
                               proposedProjects=proposedProjects, student=student, admin=admin, lab=lab)
    except Exception as e:
        app.logger.error('In proposedProjects, Error is: {}\n{}'.format(e, traceback.format_exc()))
        return redirect(url_for('errorPage'))
Exemplo n.º 3
0
def login():
    if current_user.is_authenticated:
        return redirect(url_for('home'))
    try:
        form = LoginForm()
        if request.method == "POST":
            if form.validate_on_submit():
                userToLogIn = database.getUserByUserId(form.id.data.strip())
                if userToLogIn:
                    if userToLogIn.userType == "admin":
                        user = database.getAdminByAdminId(userToLogIn.userId)
                    elif userToLogIn.userType == "student":
                        user = database.getStudentByStudentId(
                            userToLogIn.userId)
                    elif userToLogIn.userType == "lab":
                        user = database.getLabByAcronym(userToLogIn.userId)
                    else:
                        flash('userType is not recognized for this user.',
                              'danger')
                    if bcrypt.check_password_hash(user.password,
                                                  form.password.data):
                        login_user(userToLogIn)
                        return redirect(url_for('home'))
                    else:
                        app.logger.info(
                            'In Login, {} login was unsuccessful, password incorrect'
                            .format(user.id))
                        flash('Login unsuccessful: password is incorrect.',
                              'danger')
                else:
                    flash('Login unsuccessful: user not registered.', 'danger')
            else:
                app.logger.info(
                    'In Login, form is NOT valid. form.errors:{}'.format(
                        form.errors))
                if 'csrf_token' in form.errors:
                    flash(
                        'Error: csrf token expired, please re-enter your credentials.',
                        'danger')
                else:
                    flash('There was an error, see details below.', 'danger')
        return render_template('login.html', title="Login", form=form)
    except Exception as e:
        app.logger.error('In login, Error is: {}\n{}'.format(
            e, traceback.format_exc()))
        return redirect(url_for('errorPage'))
Exemplo n.º 4
0
def home():
    if not current_user.is_authenticated:
        return redirect(url_for('login'))
    if current_user.userType == "admin":
        return redirect(url_for('labOverview'))
    if current_user.userType == "lab":
        return redirect(url_for('labOverview'))
    # user is a student
    try:
        student = database.getStudentByStudentId(current_user.userId)
        projects = student.projects
        return render_template('studentHome.html',
                               title="Home",
                               student=student,
                               projects=projects)
    except Exception as e:
        app.logger.error('In home, Error is: {}\n{}'.format(
            e, traceback.format_exc()))
        return redirect(url_for('errorPage'))
Exemplo n.º 5
0
def index():
    try:
        # proposedProjects = database.getLimitedProposedProjects(5)
        labs = database.getAllLabs()
        student = None
        admin = None
        lab = None
        if current_user.is_authenticated:
            if current_user.userType == "student":
                student = database.getStudentByStudentId(current_user.userId)
            elif current_user.userType == "admin":
                admin = database.getAdminByAdminId(current_user.userId)
            elif current_user.userType == "lab":
                lab = database.getLabByAcronym(current_user.userId)
        return render_template('index.html',
                               labs=labs,
                               student=student,
                               admin=admin,
                               lab=lab)
        # return render_template('index.html', proposedProjects=proposedProjects, student=student, admin=admin)
    except Exception as e:
        app.logger.error('In index page, Error is: {}\n{}'.format(
            e, traceback.format_exc()))
        return redirect(url_for('errorPage'))
Exemplo n.º 6
0
def editAccount():
    if not utils.check_user_student():
        return redirect(url_for('login'))
    try:
        student = database.getStudentByStudentId(
            flask_login.current_user.userId)
        form = EditAccountForm()

        if request.method == 'POST':
            form.email.data = form.email.data.strip()
            if form.validate_on_submit():
                if student.studentId != form.studentId.data:
                    userWithSameId = database.getUserByUserId(
                        form.studentId.data)
                    if userWithSameId:
                        flash('There is already a user with the same ID!',
                              'danger')
                        return redirect(url_for('editAccount'))
                if student.email != form.email.data:
                    studentWithSameEmail = database.getStudentByEmail(
                        form.email.data)
                    if studentWithSameEmail:
                        flash('This email is already used by another student!',
                              'danger')
                        return redirect(url_for('editAccount'))

                profilePic = student.profilePic
                if form.profilePic.data:
                    # delete old profile image
                    utils.delete_profile_image(profilePic)
                    # save new profile image
                    profilePic = utils.save_form_image(form.profilePic.data,
                                                       "profile")
                hashed_password = bcrypt.generate_password_hash(
                    form.password.data).decode('utf-8')

                database.updateStudent(
                    student.id, {
                        "studentId": form.studentId.data,
                        "password": hashed_password,
                        "firstNameHeb": form.firstNameHeb.data,
                        "lastNameHeb": form.lastNameHeb.data,
                        "firstNameEng": form.firstNameEng.data.capitalize(),
                        "lastNameEng": form.lastNameEng.data.capitalize(),
                        "academicStatus": form.academicStatus.data,
                        "faculty": form.faculty.data,
                        "cellPhone": form.cellPhone.data,
                        "email": form.email.data,
                        "profilePic": profilePic
                    })
                # update userId in current session
                flask_login.current_user.userId = form.studentId.data
                app.logger.info(
                    'In Edit Account, commiting student changes. updated student will be: {}'
                    .format(student))
                flash('Your account was updated successfully!', 'success')
                return redirect(url_for('home'))
            else:
                app.logger.info(
                    'In Edit Account, form is NOT valid. form.errors:{}'.
                    format(form.errors))
                if 'csrf_token' in form.errors:
                    flash(
                        'Error: csrf token expired, please re-enter your credentials.',
                        'danger')
                else:
                    flash('There was an error, see details below.', 'danger')
        elif request.method == 'GET':
            form.studentId.data = student.studentId
            form.firstNameHeb.data = student.firstNameHeb
            form.lastNameHeb.data = student.lastNameHeb
            form.firstNameEng.data = student.firstNameEng
            form.lastNameEng.data = student.lastNameEng
            form.academicStatus.data = student.academicStatus
            form.faculty.data = student.faculty
            form.cellPhone.data = student.cellPhone
            form.email.data = student.email

        return render_template('editAccount.html',
                               title="Edit Account",
                               form=form,
                               student=student)
    except Exception as e:
        app.logger.error('In editAccount, Error is: {}\n{}'.format(
            e, traceback.format_exc()))
        return redirect(url_for('errorPage'))