def event_apply(profile, event): values = {'profile': profile.name, 'event': event.name} participant = Participant.get(g.user, event) if not participant: # If no participant is found create a new participant entry # First collect some information about the new participant user = g.user form = ParticipantForm(obj=user) if form.validate_on_submit(): total_participants = Participant.query.filter_by(event_id=event.id).count() participant = Participant(user=user, event=event) form.populate_obj(participant) participant.save_defaults() participant.status = PARTICIPANT_STATUS.PENDING if event.maximum_participants < total_participants else PARTICIPANT_STATUS.WL db.session.add(participant) db.session.commit() flash(u"Your request to participate has been recorded; you will be notified by the event manager", "success") else: return render_form(form=form, title="Participant Details", submit=u"Participate", cancel_url=url_for('event_view', event=event.name, profile=profile.name), ajax=False) # FIXME: Don't change anything unless this is a POST request elif participant.status == PARTICIPANT_STATUS.WITHDRAWN: participant.status = PARTICIPANT_STATUS.PENDING db.session.commit() flash(u"Your request to participate has been recorded; you will be notified by the event manager", "success") else: flash(u"Your request is pending", "error") return render_redirect(url_for('event_view', **values), code=303)