Exemple #1
0
def create_event():
    form = EventForm()

    if form.validate_on_submit():
        event = Event()
        with db.transaction as session:
            event.name = form.name.data
            event.venue = form.venue.data
            event.description = form.description.data
            event.user = current_user
            event.starts_at = times.to_universal(form.starts_at.data, current_user.timezone)
            session.add(event)
        with db.transaction:
            event.contacts_invited_ids_str = form.contacts_invited_ids_str.data
        send_email_invites(event)
        return redirect(url_for('facebook_event', id=event.id))

    else:
        # default starts_at
        td = datetime.timedelta(days=1)
        dt = times.to_local(times.now(), current_user.timezone) + td
        dt = datetime.datetime.combine(dt.date(), datetime.time(20, 00, 00))
        form.starts_at.data = dt

    return render_template('create_event.html', form=form)
Exemple #2
0
def event(id):
    """Public event page."""
    event = Event.fetch_or_404(id)
    this_url = url_for('event', id=event.id)

    if event.facebook_id and current_user.is_authenticated():
        try:
            api = facebook.create_api()
            data = api.get(path='/' + event.facebook_id + '/invited')['data']

            for friend in data:
                contact = current_user.find_facebook_contact(friend['id'])
                if not contact:
                    with db.transaction as session:
                        contact = FacebookContact()
                        contact.user = current_user
                        contact.facebook_id = friend['id']
                        contact.name = friend['name']
                        session.add(contact)
                with db.transaction:
                    event.set_attendance(contact, Attendance.types_mapping[friend['rsvp_status']])

        except (facebook.ConnectionError, facebook.OAuthError):
            return redirect(facebook.create_authorize_url(
                action_url=this_url,
                error_url=this_url
            ))

    if event.google_id and current_user.is_authenticated():
        try:
            api = google.create_api(google.CalendarClient)
            entry = api.GetEventEntry(event.google_id)

            for participant in entry.who:
                contact = current_user.find_email_contact(participant.email)
                if not contact:
                    continue
                with db.transaction:
                    if not participant.attendee_status and participant.rel == 'http://schemas.google.com/g/2005#event.organizer':
                        event.set_attendance(contact, 'going')
                    else:
                        event.set_attendance(contact, Attendance.types_mapping[participant.attendee_status.value])

        except (google.ConnectionError, google.UnauthorizedError) as e:
            return redirect(google.create_authorize_url(
                action_url=this_url,
                error_url=this_url,
                scope='https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
            ))

    return render_template('event.html', event=event)