示例#1
0
文件: views.py 项目: B-O-P/innovator
def add_member():
    # check whether this team has submitted work. If so, disable it.
    if current_user.team.work:
        flash(
            "You've submitted your work and your team information has been locked. To unlock it, delete your submission.",
            "warning",
        )
        return redirect(url_for("team.member_panel"))

    current_team = current_user.team
    form = TeamMemberForm()
    if form.validate_on_submit():
        Student.create(
            name=form.name.data,
            school_id=form.school_id.data,
            email=form.email.data,
            cell_phone=form.cell_phone.data,
            department=form.department.data,
            team=current_team,
            team_id=current_team.id,
        )
        flash("Member added. You're all set.", "success")
        return redirect(url_for("team.member_panel"))
    else:
        flash_errors(form)
    return render_template("team/edit_member.html", form=form)
示例#2
0
文件: views.py 项目: B-O-P/innovator
def edit_member(student_id):
    # check whether the edited member belongs to this team
    edited_student = Student.get_by_id(student_id)
    if not edited_student.team == current_user.team:
        flash("You're trying to edit a member not belonging to you! Nasty!", "warning")
        return redirect(url_for("team.member_panel"))

    # check whether this team has submitted work. If so, disable it.
    if current_user.team.work:
        flash(
            "You've submitted your work and your team information has been locked. To unlock it, delete your submission.",
            "warning",
        )
        return redirect(url_for("team.member_panel"))

    form = TeamMemberForm()
    if form.validate_on_submit():
        edited_student.update(
            name=form.name.data,
            school_id=form.school_id.data,
            email=form.email.data,
            cell_phone=form.cell_phone.data,
            department=form.department.data,
        )
        flash("Member updated. You're all set.", "success")
        return redirect(url_for("team.member_panel"))
    else:
        flash_errors(form)
    if request.method == "GET":
        form.name.data = edited_student.name
        form.school_id.data = edited_student.school_id
        form.email.data = edited_student.email
        form.cell_phone.data = edited_student.cell_phone
        form.department.data = edited_student.department
    return render_template("team/edit_member.html", form=form)
示例#3
0
文件: views.py 项目: B-O-P/innovator
def edit_event(event_id):
    """
    Edit an event.

    It populates fields with original values on GET method.

    :param int event_id: Edit an event.
    """
    form = EventEditForm()
    edited_event = Event.get_by_id(event_id)
    if form.validate_on_submit():
        edited_event.update(name=form.name.data, description=form.description.data, start_time=form.start.data, end_time=form.end.data)
        flash("Event edited. You're all set.", 'success')
        return redirect(url_for('admin.event_detail', event_id=event_id))
    else:
        flash_errors(form)
    # populate fields when the page is fetched
    if request.method == 'GET':
        form.name.data = edited_event.name
        form.description.data = edited_event.description
        form.start.data = edited_event.start_time
        form.end.data = edited_event.end_time
        form.extra.data = json.dumps(edited_event.extra)
        form.score_detail.data = json.dumps(edited_event.score_detail)
    return render_template('admin/edit_event.html', form=form, event_id=event_id)
示例#4
0
文件: views.py 项目: B-O-P/innovator
def edit_news(news_id):
    """
    Edit an existing piece of news. It also provides a chance to change news image, but if the Image File field is not filled, it just simply doesn't change the image.

    On GET method, it helps fill title, content and summary fields with original values, aiding the edit process.

    Upon handling a new image, it combines the current UNIX format time with the original filename (fileterd by :func:secure_filename) to form a filename used in local storage.

    .. note::
       You need to create static/news_upload manually!

    :param int news_id: Which news to modify.
    """
    form = NewsEditForm()
    delete_form = NewsDeleteForm()
    news_edited = News.get_by_id(news_id)

    if form.validate_on_submit():
        if form.image.has_file():
            filename = secure_filename(str(calendar.timegm(time.gmtime())) + form.image.data.filename)
            upload_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../static/news_upload/')
            form.image.data.save(upload_dir+filename)
            news_edited.update(title=form.title.data, summary=form.summary.data, content=form.content.data, image_path=url_for('static', filename='news_upload/'+filename))
        else:
            news_edited.update(title=form.title.data, summary=form.summary.data, content=form.content.data)
        flash("News edited. You're all set.", 'success')
        return redirect(url_for('admin.news_panel'))
    else:
        flash_errors(form)
    # populate fields when the page is fetched
    if request.method == 'GET':
        form.title.data = news_edited.title
        form.content.data = news_edited.content
        form.summary.data = news_edited.summary
    return render_template('admin/news_edit.html', delete_form=delete_form, news_id=news_id, edit_form=form)
示例#5
0
文件: views.py 项目: B-O-P/innovator
def reviewer_register():
    form = ReviewerRegisterForm(request.form)
    if form.validate_on_submit():
        created_user = User.create(username=form.username.data, email=form.email.data, password=form.password.data, user_group=2, active=True)
        Reviewer.create(name=form.reviewer_name.data, user=created_user, user_id=created_user.id, department=form.reviewer_department.data)
        flash('Reviewer created successfully', 'success')
        return redirect(url_for('admin.reviewer_manage_panel'))
    else:
        flash_errors(form)
    return render_template('admin/reviewer_register.html', form=form)
示例#6
0
文件: views.py 项目: B-O-P/innovator
def change_email():
    user = current_user
    form = EmailChangeForm(user=user)
    if form.validate_on_submit():
       user.update(email=form.new_email.data)
       flash("Email Changed. You're all set.", 'success')
       return redirect(url_for('user.panel'))
    else:
        flash_errors(form)

    return render_template('users/change_email.html', form=form)
示例#7
0
文件: views.py 项目: B-O-P/innovator
def change_password():
    user = current_user
    form = PasswordChangeForm(user=user)
    if form.validate_on_submit():
       user.update_password(form.new_password.data)
       flash("Password changed successfully.", 'success')
       return redirect(url_for('user.panel'))
    else:
        flash_errors(form)

    return render_template('users/change_password.html', form=form)
示例#8
0
文件: views.py 项目: B-O-P/innovator
def register():
    """
    Register new team. It creates a new User entry and a new Team entry, then links the two.
    """
    # User.create(username='******', email='*****@*****.**', password='******', user_group=1, active=True)
    form = RegisterForm(request.form, csrf_enabled=False)
    if form.validate_on_submit():
        created_user = User.create(username=form.username.data, email=form.email.data, password=form.password.data, user_group=3, active=True)
        Team.create(name=form.team_name.data, user=created_user, user_id=created_user.id)
        flash('Thank you for registering. You can now log in.', 'success')
        return redirect(url_for('public.home'))
    else:
        flash_errors(form)
    return render_template('public/register.html', form=form)
示例#9
0
文件: views.py 项目: B-O-P/innovator
def create_event():
    """
    Create a new event.
    """
    form = EventEditForm()
    if form.validate_on_submit():
        extra_info = json.loads(form.extra.data)
        score_detail = json.loads(form.score_detail.data)
        Event.create(name=form.name.data, extra=extra_info, description=form.description.data, start_time=form.start.data, end_time=form.end.data, score_detail=score_detail)
        flash("Event successfully created. You're all set.", 'success')
        return redirect(url_for('admin.event_panel'))
    else:
        flash_errors(form)
    return render_template('admin/create_event.html', form=form)
示例#10
0
文件: views.py 项目: B-O-P/innovator
def home():
    """
    Home page. It also accepts POST methods for login. After a successful login, it redirects user to the page he was heading for, or to user panel if the user wasn't going anywhere.

    .. note::
       It handles login form in any view, not only from home page. So when writing a new public view, there is no need to handle login form in its definition.
    """
    form = LoginForm(request.form)
    # Handle logging in
    if request.method == 'POST':
        if form.validate_on_submit():
            login_user(form.user)
            flash('You are logged in.', 'success')
            redirect_url = request.args.get('next') or url_for('user.panel')
            return redirect(redirect_url)
        else:
            flash_errors(form)
    return render_template('public/home.html', form=form)
示例#11
0
文件: views.py 项目: B-O-P/innovator
def compose_news():
    """
    Compose a new piece of news. It behaves almost the same as news edit page.
    """
    form = NewsComposeForm()
    if form.validate_on_submit():
        if form.image.has_file():
            filename = secure_filename(str(calendar.timegm(time.gmtime())) + form.image.data.filename)
            upload_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../static/news_upload/')
            form.image.data.save(upload_dir+filename)
            News.create(title=form.title.data, summary=form.summary.data, content=form.content.data, image_path=url_for('static', filename='news_upload/'+filename))
        else:
            News.create(title=form.title.data, summary=form.summary.data, content=form.content.data, image_path=url_for('static', filename='reisen.png'))
        flash("News posted. You're all set.", 'success')
        return redirect(url_for('admin.news_panel'))
    else:
        flash_errors(form)
    return render_template('admin/news_compose.html', compose_form=form)
示例#12
0
文件: views.py 项目: B-O-P/innovator
def work_review(work_id):
    current_reviewer = current_user.reviewer
    work = Work.get_by_id(work_id)
    form = WorkReviewForm()
    review = Review.query.filter_by(work_id=work_id, reviewer_id=current_reviewer.id).first()
    if not review:
        flash("You're trying to review a work not assigned to you.", 'warning')
        return redirect(url_for('reviewer.works_review_panel'))

    if form.validate_on_submit():
        review.update(score=form.score.data, comment=form.comment.data)
        flash("Work successfully scored. You're all set.", 'success')
        return redirect(url_for('reviewer.works_review_panel'))
    else:
        flash_errors(form)

    if request.method == 'GET':
        form.score.data = review.score
        form.comment.data = review.comment

    return render_template('reviewer/work_review.html', form=form, work=work)
示例#13
0
文件: views.py 项目: B-O-P/innovator
def work_assign(event_id, work_id):
    current_work = Work.get_by_id(work_id)
    reviewer_list = Reviewer.query.order_by('id').all()
    form = WorksAssignForm()
    form.reviewers.choices = [(r.id, r.name) for r in reviewer_list]
    current_assignment = Review.query.filter_by(work_id=work_id).all()
    if form.validate_on_submit():
        selected_reviewers = form.reviewers.data
        for reviewer_id in selected_reviewers:
            if not Review.query.filter_by(work_id=work_id, reviewer_id=reviewer_id).first():
                Review.create(work_id=work_id, reviewer_id=reviewer_id, work=current_work, reviewer=Reviewer.get_by_id(reviewer_id))
        for review in current_assignment:
            if review.reviewer_id not in selected_reviewers:
                review.delete()
        flash("Work assigned successfully. You're all set.", 'success')
        return redirect(url_for('admin.event_detail', event_id=event_id))
    else:
        flash_errors(form)

    if request.method == 'GET' :
       current_assignment_id = [r.reviewer_id for r in current_assignment]
       form.reviewers.data = current_assignment_id
    return render_template('admin/event_works_assign.html', event_id=event_id, form=form, work=current_work)
示例#14
0
文件: views.py 项目: B-O-P/innovator
def work_upload():
    """
    Work upload/update page for team user. On GET method, it renders work upload template. On POST method, it update/create corresponding work instance and stores the PDF file.

    When storing the file, it combines the current UNIX format time with original filename filtered with :funciton:`secure_filename` to form the filename used for local storage.

    .. note::
       Don't forget to create directory static/work_upload manually!

    Team user required.
    """
    form = WorkSubmitForm()
    current_team = current_user.team
    # append all open events to event select field's choice list
    event_list = Event.query.filter(
        and_(Event.start_time <= dt.datetime.now(), Event.end_time >= dt.datetime.now())
    ).all()
    choice_list = []
    for each_event in event_list:
        choice_list.append((each_event.id, each_event.name))
    form.work_event.choices = choice_list

    # if no event is currently open, flash an error
    if len(choice_list) == 0:
        flash("No event is currently open.", "warning")
        return redirect(url_for("team.work_panel"))

    if form.validate_on_submit():
        filename = secure_filename(str(calendar.timegm(time.gmtime())) + form.work_file.data.filename)
        upload_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../static/work_upload/")
        form.work_file.data.save(upload_dir + filename)
        if current_team.work:
            modified_work = current_team.work
            extra_info = json.loads(form.extra.data)
            modified_work.update(
                title=form.work_title.data,
                file_path=url_for("static", filename="work_upload/" + filename),
                created_at=dt.datetime.now(),
                extra=extra_info,
            )
            if not modified_work.event_id == form.work_event.data:
                flash(
                    "To change event, you must delete your current work and propose a new one. Other changes have been successfully saved.",
                    "warning",
                )
            else:
                flash("Work updated. You're all set.", "success")
        else:
            extra_info = json.loads(form.extra.data)
            Work.create(
                title=form.work_title.data,
                file_path=url_for("static", filename="work_upload/" + filename),
                team=current_team,
                team_id=current_team.id,
                event=Event.get_by_id(form.work_event.data),
                event_id=form.work_event.data,
                extra=extra_info,
            )
            flash("Work uploaded. You're all set.", "success")
        return redirect(url_for("team.work_panel"))
    else:
        flash_errors(form)
    if current_team.work and request.method == "GET":
        form.work_title.data = current_team.work.title
        form.work_event.data = current_team.work.event_id
        form.extra.data = json.dumps(current_team.work.extra)
    return render_template("team/work_upload.html", upload_form=form)