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)
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)
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)
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)
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, )
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)
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)
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, )
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)
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")