示例#1
0
def project_new(event_id):
    form = None
    event = Event.query.filter_by(id=event_id).first_or_404()
    if current_user and current_user.is_authenticated:
        project = Project()
        project.user_id = current_user.id
        project.progress = -1
        form = ProjectForm(obj=project, next=request.args.get('next'))
        form.progress.choices = projectProgressList(event.has_started)
        form.category_id.choices = [(c.id, c.name)
                                    for c in project.categories_all(event)]
        form.category_id.choices.insert(0, (-1, ''))
        if form.validate_on_submit():
            del form.id
            form.populate_obj(project)
            project.event = event
            project.update()
            db.session.add(project)
            db.session.commit()
            flash('Project added.', 'success')
            project_action(project.id, 'create', False)
            cache.clear()
            project_action(project.id, 'star', False)
            return redirect(url_for('public.project', project_id=project.id))
        del form.logo_icon
        del form.logo_color
    return render_template('public/projectnew.html',
                           current_event=event,
                           form=form)
示例#2
0
def project_edit(project_id):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    if not allow_edit:
        flash('You do not have access to edit this project.', 'warning')
        return project_action(project_id, None)
    form = ProjectForm(obj=project, next=request.args.get('next'))
    form.progress.choices = projectProgressList(event.has_started
                                                or event.has_finished)
    form.category_id.choices = [(c.id, c.name)
                                for c in project.categories_all()]
    form.category_id.choices.insert(0, (-1, ''))
    if form.validate_on_submit():
        del form.id
        form.populate_obj(project)
        project.update()
        db.session.add(project)
        db.session.commit()
        cache.clear()
        flash('Project updated.', 'success')
        project_action(project_id, 'update', False)
        return redirect(url_for('public.project', project_id=project.id))
    return render_template('public/projectedit.html',
                           current_event=event,
                           project=project,
                           form=form)
示例#3
0
def project_edit_action(project_id, detail_view=False):
    """ Project editing handler """
    project = Project.query.filter_by(id=project_id).first_or_404()
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (isUserActive(current_user)
                             and current_user.is_admin)
    if not allow_edit:
        flash('You do not have access to edit this project.', 'warning')
        return project_action(project_id, None)
    if not detail_view:
        form = ProjectForm(obj=project, next=request.args.get('next'))
        form.category_id.choices = [(c.id, c.name)
                                    for c in project.categories_all()]
        if len(form.category_id.choices) > 0:
            form.category_id.choices.insert(0, (-1, ''))
        else:
            del form.category_id
    else:
        form = ProjectDetailForm(obj=project, next=request.args.get('next'))
    if form.validate_on_submit():
        del form.id
        form.populate_obj(project)
        project.update()
        db.session.add(project)
        db.session.commit()
        cache.clear()
        flash('Project updated.', 'success')
        project_action(project_id, 'update', False)
        return redirect(url_for('project.project_view', project_id=project.id))
    return render_template('public/projectedit.html',
                           detail_view=detail_view,
                           current_event=project.event,
                           project=project,
                           form=form)
示例#4
0
def event_new():
    if not current_app.config['DRIBDAT_ALLOW_EVENTS']:
        if not current_user.is_admin:
            return redirect(url_for("public.event_start"))
    event = Event()
    form = NewEventForm(obj=event, next=request.args.get('next'))
    if form.validate_on_submit():
        del form.id
        form.populate_obj(event)
        event.starts_at = datetime.combine(
            form.starts_date.data, form.starts_time.data)
        event.ends_at = datetime.combine(
            form.ends_date.data, form.ends_time.data)
        # Load default event content
        event.boilerplate = EVENT_PRESET['quickstart']
        event.community_embed = EVENT_PRESET['codeofconduct']
        event.is_hidden = True
        db.session.add(event)
        db.session.commit()
        flash('A new event has been planned!', 'success')
        if not current_user.is_admin:
            flash(
                'Please contact an administrator to make changes or '
                + 'to promote this event on the home page.',
                'warning')
        cache.clear()
        return redirect(url_for("public.event", event_id=event.id))
    return render_template('public/eventnew.html', form=form)
def project_post(project_id):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    if not allow_edit:
        flash('You do not have access to edit this project.', 'warning')
        return project_action(project_id, None)
    form = ProjectPost(obj=project, next=request.args.get('next'))
    form.progress.choices = projectProgressList(event.has_started
                                                or event.has_finished)
    if not form.note.data:
        form.note.data = "---\n`%s` " % datetime.utcnow().strftime(
            "%d.%m.%Y %H:%M")
    if form.validate_on_submit():
        del form.id
        form.populate_obj(project)
        project.longtext += "\n\n" + form.note.data
        project.update()
        db.session.add(project)
        db.session.commit()
        cache.clear()
        flash('Project updated.', 'success')
        project_action(project_id, 'update', False)
        return redirect(url_for('public.project', project_id=project.id))
    return render_template('public/projectpost.html',
                           current_event=event,
                           project=project,
                           form=form)
示例#6
0
def project_post(project_id):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    starred = IsProjectStarred(project, current_user)
    allow_post = starred
    # or (not current_user.is_anonymous and current_user.is_admin)
    # allow_post = allow_post and not event.lock_resources
    if not allow_post:
        flash('You do not have access to post to this project.', 'warning')
        return project_action(project_id, None)
    form = ProjectPost(obj=project, next=request.args.get('next'))
    # Evaluate project progress
    stage, all_valid = validateProjectData(project)
    # Process form
    if form.validate_on_submit():
        if form.has_progress.data:
            # Check and update progress
            found_next = False
            if all_valid:
                for a in projectProgressList(True, False):
                    # print(a[0])
                    if found_next:
                        project.progress = a[0]
                        flash('Your project has been promoted!', 'info')
                        break
                    if a[0] == project.progress or \
                        not project.progress or \
                            project.progress < 0:
                        found_next = True
                        # print("Founddd")
            if not all_valid or not found_next:
                flash('Your project did not meet stage requirements.', 'info')

        # Update project data
        del form.id
        del form.has_progress
        form.populate_obj(project)
        project.update()
        db.session.add(project)
        db.session.commit()
        cache.clear()
        project_action(project_id,
                       'update',
                       action='post',
                       text=form.note.data)
        return redirect(
            url_for('project.project_view_posted', project_id=project.id))

    return render_template(
        'public/projectpost.html',
        current_event=event,
        project=project,
        form=form,
        stage=stage,
        all_valid=all_valid,
    )
示例#7
0
def project_new(event_id):
    if not isUserActive(current_user):
        flash(
            "Your account needs to be activated - " +
            " please contact an organizer.", 'warning')
        return redirect(url_for('public.event', event_id=event_id))
    form = None
    event = Event.query.filter_by(id=event_id).first_or_404()
    if event.lock_starting:
        flash('Starting a new project is disabled for this event.', 'error')
        return redirect(url_for('public.event', event_id=event.id))
    if isUserActive(current_user):
        project = Project()
        project.user_id = current_user.id
        form = ProjectNew(obj=project, next=request.args.get('next'))
        form.category_id.choices = [(c.id, c.name)
                                    for c in project.categories_all(event)]
        if len(form.category_id.choices) > 0:
            form.category_id.choices.insert(0, (-1, ''))
        else:
            del form.category_id
        if form.validate_on_submit():
            del form.id
            form.populate_obj(project)
            project.event = event
            if event.has_started:
                project.progress = 5  # Start as team
            else:
                project.progress = -1  # Start as challenge
            project.update()
            db.session.add(project)
            db.session.commit()
            flash('Invite your team to Join this page!', 'success')
            project_action(project.id, 'create', False)
            cache.clear()
            if event.has_started:
                project_action(project.id, 'star', False)  # Join team
            if len(project.autotext_url) > 1:
                return project_autoupdate(project.id)
            else:
                purl = url_for('project.project_view', project_id=project.id)
                return redirect(purl)
    return render_template('public/projectnew.html',
                           active="projectnew",
                           current_event=event,
                           form=form)
示例#8
0
文件: views.py 项目: Alwaz18/dribdat
def project_post(project_id):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    if not allow_edit:
        flash('You do not have access to edit this project.', 'warning')
        return project_action(project_id, None)
    form = ProjectPost(obj=project, next=request.args.get('next'))
    # Populate progress dialog
    form.progress.choices = projectProgressList(event.has_started
                                                or event.has_finished)
    # Populate resource list
    resources = Resource.query.filter_by(is_visible=True).order_by(
        Resource.type_id).all()
    resource_list = [(0, '')]
    resource_list.extend([(r.id, r.of_type + ': ' + r.name)
                          for r in resources])
    form.resource.choices = resource_list
    # Process form
    if form.validate_on_submit():
        del form.id
        if form.resource.data == 0:
            form.resource.data = None
        form.populate_obj(project)
        project.update()
        db.session.add(project)
        db.session.commit()
        cache.clear()
        flash('Thanks for your commit!', 'success')
        project_action(project_id,
                       'update',
                       action='post',
                       text=form.note.data,
                       resource=form.resource.data)
        return redirect(url_for('public.project', project_id=project.id))
    return render_template('public/projectpost.html',
                           current_event=event,
                           project=project,
                           form=form)
示例#9
0
def project_boost(project_id):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event

    allow_post = not current_user.is_anonymous and current_user.is_admin
    if not allow_post:
        flash('You do not have access to boost this project.', 'warning')
        return project_action(project_id, None)

    form = ProjectBoost(obj=project, next=request.args.get('next'))
    # TODO: load from a YAML file or from the Presets config
    form.boost_type.choices = [
        '---',
        'Awesome sauce',
        'Data wizards',
        'Glorious purpose',
        'Top tutorial',
        'Super committers',
    ]

    # Process form
    if form.validate_on_submit():
        # Update project data
        cache.clear()
        project_action(project_id,
                       'boost',
                       action=form.boost_type.data,
                       text=form.note.data)
        flash('Thanks for your boost!', 'success')
        return project_view(project.id)

    return render_template(
        'public/projectboost.html',
        current_event=event,
        project=project,
        form=form,
    )
示例#10
0
文件: views.py 项目: Alwaz18/dribdat
def project_new(event_id):
    form = None
    event = Event.query.filter_by(id=event_id).first_or_404()
    if event.lock_starting:
        flash('Starting a new project is disabled for this event.', 'error')
        return redirect(url_for('public.event', event_id=event.id))
    if current_user and current_user.is_authenticated:
        project = Project()
        project.user_id = current_user.id
        form = ProjectNew(obj=project, next=request.args.get('next'))
        form.category_id.choices = [(c.id, c.name)
                                    for c in project.categories_all(event)]
        form.category_id.choices.insert(0, (-1, ''))
        if form.validate_on_submit():
            del form.id
            form.populate_obj(project)
            project.event = event
            if event.has_started:
                project.progress = 0
            else:
                project.progress = -1  # Start as challenge
            project.update()
            db.session.add(project)
            db.session.commit()
            flash('New challenge added.', 'success')
            project_action(project.id, 'create', False)
            cache.clear()
            project_action(project.id, 'star', False)
            if len(project.autotext_url) > 1:
                return project_autoupdate(project.id)
            else:
                return redirect(
                    url_for('public.project', project_id=project.id))
    return render_template('public/projectnew.html',
                           current_event=event,
                           form=form)
示例#11
0
文件: project.py 项目: loleg/dribdat
def project_new(event_id):
    if not isUserActive(current_user):
        flash(
            "Your account needs to be activated - " +
            " please contact an organizer.", 'warning')
        return redirect(url_for('public.event', event_id=event_id))
    form = None
    event = Event.query.filter_by(id=event_id).first_or_404()
    if event.lock_starting:
        flash('Starting a new project is disabled for this event.', 'error')
        return redirect(url_for('public.event', event_id=event.id))
    if not isUserActive(current_user):
        flash('Your user account is not permitted to start projects.', 'error')
        return redirect(url_for('public.event', event_id=event.id))
    # Collect resource tips
    suggestions = []
    if not event.lock_resources:
        suggestions = getSuggestionsForStage(0)
    # Project form
    project = Project()
    project.user_id = current_user.id
    form = ProjectNew(obj=project, next=request.args.get('next'))
    form.category_id.choices = [(c.id, c.name)
                                for c in project.categories_all(event)]
    if len(form.category_id.choices) > 0:
        form.category_id.choices.insert(0, (-1, ''))
    else:
        del form.category_id
    if form.validate_on_submit():
        tpl_id = None
        if form.template.data:
            tpl_id = form.template.data
        del form.id
        del form.template
        form.populate_obj(project)
        if tpl_id:
            template = Project.query.get(tpl_id)
            project.longtext = template.longtext
            project.image_url = template.image_url
            project.source_url = template.source_url
            project.webpage_url = template.webpage_url
            project.download_url = template.download_url
        # Check event state
        project.event = event
        if event.has_started:
            project.progress = 5  # Start as team
        else:
            project.progress = -1  # Start as challenge
        # Update the project
        project.update()
        db.session.add(project)
        db.session.commit()
        flash('Now invite your team to Join this page!', 'success')
        project_action(project.id, 'create', False)
        cache.clear()
        if event.has_started:
            project_action(project.id, 'star', False)  # Join team
        if len(project.autotext_url) > 1:
            return project_autoupdate(project.id)
        else:
            purl = url_for('project.project_view', project_id=project.id)
            return redirect(purl)
    return render_template('public/projectnew.html',
                           current_event=event,
                           form=form,
                           suggestions=suggestions,
                           active="projects")