Exemple #1
0
def create_reminder(by, date, reminder_choice, registration, step, timezone):
    offset = get_reminder_minutes_offset(reminder_choice)
    when = date - dt.timedelta(minutes=offset)

    reminder, created_at = Reminder.objects.get_or_create(
        registration=registration)

    reminder.step = step
    reminder.by = by
    reminder.when = when
    reminder.date = date
    reminder.timezone = timezone
    reminder.save()

    costumer_name = registration.costumer.get_full_name()

    event = Event.objects.filter(reminder=reminder).first()
    if not event:
        event = Event(reminder=reminder)

    event.user = registration.consultant
    event.title = u'Ad Astra Reminder - {}'.format(costumer_name)
    event.description = u'You have one {} with {}'.format(
        reminder.get_step_display(), costumer_name)
    event.start = date
    event.end = date + dt.timedelta(minutes=30)
    event.save()
Exemple #2
0
def save_event(request):
    """ Create a new event """
    print "In Save Event"
    if request.method != "POST":
        print "Save brew received a non post"
        return HttpResponseRedirect(reverse("events_userhome"))

    name = request.POST.get('event_name')
    description = request.POST.get("event_description")
    
    # On empty POST request, return to user home.
    if(name.strip() == "" and description.strip() == ""):
        print "Empty form received"
        return HttpResponseRedirect(reverse("events_userhome"))

    # Create a new event and save it.
    new_event = Event()
    new_event.name = name
    new_event.description = description
    new_event.save()
    print "New Event Created ", new_event.ident
    print type(new_event.ident), str(new_event.ident)
    # Save the user as the host of the new event
    user = request.user.get_profile()
    admin = Host()
    admin.uid = user
    admin.eid = new_event
    admin.save()
    return HttpResponseRedirect(reverse("events.views.event",
                                        args=(new_event.ident,)))
Exemple #3
0
def events_list(request):

    func_return = _init_facebook_app(request)
    if(func_return != False):
        return func_return

    try:
        graph, user, sys_user = _get_facebook_app(request)
        if sys_user is None:
            return HttpResponseRedirect("/facebook/setup/")
    except facebook.GraphAPIError:
        del request.session["access_token"]
        return HttpResponseRedirect("http://apps.facebook.com/"+ settings.FACEBOOK_APP_ID +"/")

    if request.method == 'POST':
        events_ids = request.POST.getlist("object_events")

        for event_id in events_ids:
            event = graph.get_object(event_id)
            image_url = "https://graph.facebook.com/" + event["id"] + "/picture?type=large"

            img_temp = NamedTemporaryFile(delete=True)
            img_temp.write(urllib2.urlopen(image_url).read())
            img_temp.flush()

            user_event = Event(
                title = event["name"],
                from_date = dateutil.parser.parse(event["start_time"]),
                to_date = dateutil.parser.parse(event["end_time"]),
                address = event["location"],
                user = sys_user.username,
                add_user = sys_user,
                category = EventCategory.objects.get(id=1),
                status = 2,
            )

            if "description" in event:
                user_event.description = event["description"]

            user_event.image.save(event["id"] + ".jpg", File(img_temp));
            user_event.slug = SlugifyUniquely( event["name"], user_event.__class__)
            user_event.save()

        if len(events_ids) > 0:
            _add_flash_message(request, "Your events has been added")
        return HttpResponseRedirect( reverse('facebook_events_list') )

    events = graph.get_connections(user["id"], "events")

    for event in events["data"]:
        event["start_time"] = dateutil.parser.parse(event["start_time"])
        event["end_time"] = dateutil.parser.parse(event["end_time"])
        event["picture_url"] = "https://graph.facebook.com/" + event["id"] + "/picture?type=normal"

    return dict(
        user = user,
        events = events,
        message = _get_flash_message(request),
    )
Exemple #4
0
    def handle(self, *args, **options):

        with open('E:/moviews_scrapy/events.json') as f:
            events = json.load(f)

            for event in events:
                event_object = Event()
                event_object.title = event['title']
                event_object.date = event['date']
                event_object.description = event['description']
                event_object.category = event['category']
                event_object.runtime = event['runtime']
                event_object.image_url = event['images'][0]['path']

                event_object.save()

        self.stdout.write(self.style.SUCCESS('Sucessfully Imported Events'))
Exemple #5
0
def add_event(request: HttpRequest, event_form: AddEventForm,creating:bool) -> HttpResponse:
    if not event_form.is_valid():
        messages.add_message(request, messages.ERROR, event_form.non_field_errors())
    else:
        try:
            if creating:
                event = Event(name=event_form.cleaned_data['name'],date=event_form.cleaned_data['date'],description=event_form.cleaned_data['description'])
                event.save()
                messages.add_message(request, messages.SUCCESS, "Event Created")
            else:
                event = event_form.instance
                event.name = event_form.cleaned_data['name']
                event.date = event_form.cleaned_data['date']
                event.description = event_form.cleaned_data['description']
                event.save()
                messages.add_message(request, messages.SUCCESS, "Event Updated")
            return redirect(reverse('console:edit'))
        except Exception:
            # logger.exception('Error while creating/updating a user. creating=' + str(creating) + ', req=' + "\n".join(request.readlines()))
            messages.add_message(request, messages.ERROR, 'Sorry, an error occurred, please alert an admin.')
    return None
    def test_creating_new_event_and_saving_it_to_the_database(self):
        # Test creating a new event object.
        user = User.objects.create(username="******")
        company = Company()
        event = Event()
        event.title = "Test Driven Development with Django"
        event.slug = "test-driven-development-with-django"
        event.description = "Fantastic way to develop web applications with less bugs and stress"
        event.where = "Avenida Mella No.444, Plaza Hispaniola, Suite 101"
        event.company = company
        event.posted_by = user
        event.datetime = timezone.now()

        #check if our event can be safe to the DB
        event.save()

        #check if our event is created 

        all_events_in_database = Event.objects.all()
        self.assertEquals(len(all_events_in_database), 1)
        only_event_in_database = all_events_in_database[0]
        self.assertEquals(only_event_in_database, event)
Exemple #7
0
def create_edit(request):
    request_data = json.loads(request.body)

    pk = request_data.get('id', '')
    role = get_role(request.user)
    send_email = request_data.get('send_email', False)
    reminder = request_data.get('reminder', None)
    by = request_data.get('by', None)
    timezone = request_data.get('timezone', None)
    start = request_data.get('start', '')
    end = request_data.get('end', '')
    title = request_data.get('title', '')
    user_ids = request_data.get('user_ids', [])
    market_ids = request_data.get('market_ids', [])
    description = request_data.get('description', '')
    color = request_data.get('color', '')

    ids_to_create = []

    if pk:
        event = Event.objects.get(pk=pk)
        is_owner = request.user == event.user
    else:
        event = Event()
        event.user = request.user
        is_owner = True

    if is_owner:
        # can delete this property?
        has_change = False
        event.all_day = False
        event.title = title
        event.description = description

        if color and role in ['corporate', 'admin', 'finance']:
            event.color = color

        if start:
            new_start = unaware_to_utc(
                datetime.strptime(start, "%Y-%m-%dT%H:%M:%S.%fZ"))
            if not new_start == event.start:
                has_change = True
            event.start = new_start

        if end:
            new_end = unaware_to_utc(
                datetime.strptime(end, "%Y-%m-%dT%H:%M:%S.%fZ"))
            if not new_end == event.end:
                has_change = True
            event.end = new_end

        if role in ['coordinator', 'admin', 'corporate', 'finance']:
            visibility = int(request_data['visibility'])

            if pk and ((event.visibility == 5 and not visibility == 5) or
                       (visibility == 5 and len(market_ids) == 0)):
                event.markets.clear()

            # only request user and should see anywhere
            if visibility == 2:
                event.is_private = True
                if pk and not (event.visibility == visibility):
                    EventUsers.objects.exclude(user=request.user).filter(
                        event=event).delete()
            # all users
            elif visibility == 4:
                event.is_private = False

            # specify characters and markets
            elif visibility == 5:
                if pk:
                    existing_ids = EventUsers.objects.filter(
                        event=event).values_list('user_id', flat=True)

                    ids_to_create = [
                        i for i in user_ids if i not in existing_ids
                    ]
                    ids_to_delete = [
                        i for i in existing_ids
                        if i not in user_ids and not i == request.user.pk
                    ]

                    EventUsers.objects.filter(
                        event=event, user_id__in=ids_to_delete).delete()
                else:
                    ids_to_create = user_ids

            event.visibility = visibility

        else:
            event.visibility = 2

        event.save()

        if event.visibility == 5 and len(market_ids) > 0:
            event.markets.set(market_ids)

        if has_change and pk:
            EventUsers.objects.filter(event=event).update(sent=False)

        if event.visibility == 5 and len(ids_to_create) > 0:
            entities_to_create = []
            for user_id in ids_to_create:
                entities_to_create.append(
                    EventUsers(event=event, user_id=user_id))

            EventUsers.objects.bulk_create(entities_to_create)

    event_users, created = EventUsers.objects.get_or_create(user=request.user,
                                                            event=event)

    if by and reminder:
        offset = get_reminder_minutes_offset(reminder)
        event_users.sending_date = event.start - dt.timedelta(minutes=offset)
        event_users.timezone = timezone
        event_users.by = by
        event_users.reminder = reminder
        event_users.save()

    if not pk and event.visibility in [4, 5] and send_email:
        query_set = User.objects.prefetch_related(
            'groups', 'consultantprofile', 'consultantprofile__market',
            'consultantprofile__supervisor', 'person').acs_users()

        if event.visibility == 5:
            conditions = []
            q_objects = Q()
            if len(market_ids) > 0:
                conditions.append(
                    Q(consultantprofile__market__pk__in=market_ids))

            if len(ids_to_create) > 0:
                conditions.append(Q(pk__in=ids_to_create))

            for condition in conditions:
                q_objects |= condition

            if len(conditions) > 0:
                query_set = query_set.filter(q_objects)

        mails = query_set.values_list('person__email', flat=True)

        if len(mails) > 0:
            event_start_aware = utc_to_timezone_or_default(
                event.start, timezone)

            context = {
                'by': request.user,
                'event': event,
                'event_start_date': event_start_aware.strftime('%b %d, %Y'),
                'event_start_time': event_start_aware.strftime('%I:%M %p'),
                'timezone': timezone
            }

            email = EmailMessage('New event invitation in your ACS dashboard',
                                 render_to_string(
                                     'events/emails/new_event.html', context),
                                 bcc=mails)
            email.content_subtype = 'html'
            email.send()

    # TODO implement serializer
    response = {
        'id':
        event.id,
        'title':
        event.title,
        'start':
        event.start.isoformat() if event.start else '',
        'end':
        event.end.isoformat() if event.end else '',
        'description':
        event.description,
        'url':
        event.url,
        'allDay':
        event.all_day,
        'userId':
        int(0 if event.user is None else event.user_id),
        'visibility':
        event.visibility,
        'imageUrl': (event.image.url
                     if event.image and hasattr(event.image, 'url') else ''),
        'reminderId':
        event.reminder_id if event.reminder_id else '',
        'eventuser': {
            'by': event_users.by,
            'reminder': event_users.reminder
        }
    }

    return JsonResponse(response)
events = r.json()

#Vendor.objects.all().delete()
#Event.objects.all().delete()

#Iterate through the events objects and save it if the object isn't
#already in the database.
for event in events['data']:
    if not Event.objects.filter(
            event_id=event['id'].encode('ascii', 'ignore')):
        event_obj = Event()
        event_obj.name = event['name'].encode('ascii', 'ignore')
        event_obj.event_id = event['id'].encode('ascii', 'ignore')
        event_obj.date = parser.parse(event['start_time'].encode(
            'ascii', 'ignore'))
        event_obj.description = event['description'].encode('ascii', 'ignore')
        event_obj.save()

#Scrape through the vendor site and gather a list of vendor names
vendors_page = requests.get('http://offthegridsf.com/vendors')
vendors_file = html.fromstring(vendors_page.text)
vendors = vendors_file.xpath('//a[@class="otg-vendor-name-link"]/text()')
vendors_list = set()

#Parse the vendor list for duplicate items of the form 'x (1)', 'x (20)'
#by stripping the values and adding it to a set which will not allow duplicates.
for vendor in vendors:
    if "(" in vendor:
        index = vendor.index('(')
        vendor = vendor[0:index]
    vendors_list.add(vendor)
Exemple #9
0
def save_event(request):
	print 'Saving event'
	if not request.is_ajax():
		return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Hello, world. Not an AJAX request.'}))
	else:
		print 'Is AJAX'
		import pprint
		print 'Hér kemur hrátt data:'
		pprint.pprint(request.POST['data'])
		print 'Hér kemur JSON útgáfan:'
		data = json.loads(request.POST['data'])
		pprint.pprint(data)

		# Sanitise some of the data and return messages if it fails.

		### TITLE ###
		# The title must be non-zero and no longer than 64 characters (defined in events/models.py).
		print 'Submitted data:'
		t = data['title']
		if t == "":
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Title missing.', }))
		elif len(t) > 64:
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'The title is currently '+str(len(t))+' characters long but the maximum is 64.', }))
		import sys
		print sys.stdout.encoding
		print type(t)
		print '--title: {}'.format(t.encode('UTF-8'))

		### DESCRIPTION ###
		# There are no restrictions on the description field other than being cleaned. It may be blank and arbitrarily long.
		d = data['description']
		# The dates must be supplied and the beginning must precede the end.
		print '--description: {}'.format(d.encode('UTF-8'))

		### DATES ###
		if data['date_time_begin'] == "":
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Beginning date missing.', }))
		try:
			dtb = timezone.make_aware(parser.parse(data['date_time_begin']),timezone.get_default_timezone())
		except:
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Beginning date-time is not a valid datetime.', }))
		print '--begins: {}'.format(dtb)
		if data['date_time_end'] == "":
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'End date missing.', }))
		try:
			dte = timezone.make_aware(parser.parse(data['date_time_end']),timezone.get_default_timezone())
		except:
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'End date-time is not a valid datetime', }))
		if dte <= dtb:
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'The event start time must precede the end.', }))
		print '--ends: {}'.format(dte)

		### TYPE ###
		# The event-type must be supplied.
		et_id = data['event_type']
		print '--type ID: {}'.format(et_id)
		if et_id== "":
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'No event type supplied.', }))

		### EVENT ID ###
		print 'All the data has been submitted. Checking whether event_id has been supplied.'
		try:
			event_id = data['event_id']
			print 'event_id: {}'.format(event_id)
		except:
			return HttpResponse(json.dumps({ 'type': 'error', 'message': 'No event_id submitted.', }))
		if event_id == '':
			# If no event id has been supplied, we'll create a new event.
			print 'Creating event...'
			event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id)
		else:
			# else we update the existing one.
			print 'Updating event...'
			event = Event.objects.get(pk=event_id)
			event.title = t
			event.description = d
			event.date_time_begin = dtb
			event.date_time_end = dte
			event.event_type_id = et_id

		# Now save the event
		try:
			event.clean_fields()
			event.save()
			print 'The event is: ------'
			pprint.pprint(vars(event))
			print '--------------------'
		except:
			return HttpResponse (json.dumps({ 'type': 'error', 'message': 'Could not save event.'}))

		# Now that the event has been taken care of, let's sort out the event roles etc.
		# Flow:
		# For each role:
		for role in Role.objects.all():
			print 'Role ID %s' % role.id
			print 'Role is %s' % role
			try:
				participants_exist = data['role'][role.id]['participants']
			except:
				participants_exist = False
			#print participants_exist
			if participants_exist:
				# If we want eventroles, check whether these need to be created and otherwise update them.

				currentparticipants = [] # This will be populated below if the event exists (and currently has any participants).
				currentgroups = [] # This will be populated below if the event exists (and currently has any participants).
				currentmembers= [] # This will be populated below if the event exists (and currently has any participants).

				# The wantedparticipantIDs is a list of invitations compiled from a
				# drop-down in the interface. the drop-down contains positions,
				# groups, members and the option to make it an open event (inviting
				# all members). To differentiate between the primary keys of
				# positions, groups and members, these are prefixed with the
				# characters 'p', 'g' and 'm', respectively.

				wantedparticipantIDs = data['role'][role.id]['participants']
				print 'Wanted participantsID: {}'.format(wantedparticipantIDs)

				wantedpositions = [Position.objects.get(pk=int(positionid[1:])) for positionid in wantedparticipantIDs if positionid[0]=='p']
				print 'We want event role {} with positions {}'.format(role, wantedpositions)
				wantedgroups = [Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0]=='g']
				print 'We want event role {} with groups {}'.format(role, wantedgroups)
				wantedmembers= [Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0]=='m']
				print 'We want event role {} with members {}'.format(role, wantedmembers)

				# Check whether the event is open.
				is_open = ('a' in wantedparticipantIDs)

				# Workflow:
				#  1. Get or create the EventRole.
				#  2. Remove unwanted invitations.
				#  3. Update the minimum and maximum number of participants.
				#  4. Adding wanted invitations

				try: # check whether the EventRole already exists
					# 1. Get the EventRole, stored in eventrole.
					eventrole = EventRole.objects.get(event_id=event.id,role_id=role.id)
					print 'EventRole "{}" already exists.'.format(eventrole)
				except:
					# Since there is no existing EventRole, we need to:
					#  1. Create an EventRole, and save it as eventrole.
					# and that's it! Adding participants is done below for both
					# existing and recently created EventRoles.
					try:
						print 'event_id: {}'.format(event.id)
						print 'role_id: {}'.format(role.id)
						# TODO: Later feature...
						#eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max']))
						eventrole = EventRole(event_id=event.id,role_id=role.id,is_open=is_open)
						print 'No EventRole exists, creating {}.'.format(eventrole)
					except:
						print 'Could not create eventrole.'
						return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not create eventrole.' }))
					try:
						eventrole.clean_fields()
						eventrole.save()
						print 'eventrole saved: {}.'.format(eventrole)
					except:
						return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save eventrole.' }))

				# 2. Remove unwanted invitations.
				currentpositions = eventrole.invited_positions.all()
				currentgroups = eventrole.invited_groups.all()
				currentmembers= eventrole.invited_members.all()
				print 'currentpositions: {}'.format(currentpositions)
				print 'currentgroups: {}'.format(currentgroups)
				print 'currentmembers: {}'.format(currentmembers)
				print 'EventRole already has these invitations:'
				for position in currentpositions:
					print '>>{} ({})'.format(position, position.id)
					if position not in wantedpositions:
						print '-- ID is {}: We don\'t want {}.'.format(group.id,group)
						try:
							#print 'DEBUG: {}'.format(eventrole.invited_positions)
							pi = PositionInvitation.objects.get(event_role=eventrole,position=position)
							pi.delete()
						except:
							print 'Could not remove position {} from {}'.format(group,currentgroups)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove position '+str(position)+' from '+currentpositions+'.' }))
					else:
						print '++ ID is {}: We keep position {}.'.format(position.id,position)
				for group in currentgroups:
					print '>>{} ({})'.format(group, group.id)
					if group not in wantedgroups:
						print '-- ID is {}: We don\'t want {}.'.format(group.id,group)
						try:
							#print 'DEBUG: {}'.format(eventrole.invited_groups)
							gi = GroupInvitation.objects.get(event_role=eventrole,group=group)
							gi.delete()
						except:
							print 'Could not remove group {} from {}'.format(group,currentgroups)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove group '+str(group)+' from '+currentgroups+'.' }))
					else:
						print '++ ID is {}: We keep group {}.'.format(group.id,group)
				for member in currentmembers:
					print '>>{} ({})'.format(member, member.id)
					if member not in wantedmembers:
						print '-- ID is {}: We don\'t want {}.'.format(member.id,member)
						try:
							#print 'DEBUG: {}'.format(eventrole.invited_members)
							mi = MemberInvitation.objects.get(event_role=eventrole,member=member)
							mi.delete()
						except:
							print 'Could not remove member {} from {}'.format(member,currentmembers)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not remove member '+str(member)+' from '+currentmembers+'.' }))
					else:
						print '++ ID is {}: We keep member {}.'.format(member.id,member)

				# Finally set whether the EventRole is open to all members:
				eventrole.is_open = is_open
				try:
					eventrole.clean_fields()
					eventrole.save()
					print 'eventrole saved: {}.'.format(eventrole)
				except:
					return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update whether the EventRole is open numbers.' }))

				# 3. Update the minimum and maximum number of participants.
				# TODO: Later feature...
				#if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']):
				#	eventrole.minimum = int(data['role'][role.id]['min'])
				#	eventrole.maximum = int(data['role'][role.id]['max'])
				#	try:
				#		eventrole.clean_fields()
				#		eventrole.save()
				#		print 'eventrole saved: {}.'.format(eventrole)
				#	except:
				#		return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update eventrole max/min numbers.' }))

				# 4. Adding wanted invitations
				# Now that we have the eventrole and it has been stripped of its
				# unwanted participatns, let's add the wanted ones.
				# Workflow:
				# For each wanted participant,
				#   if they're not currently invited,
				#     create a {Position,Group,Member}Invitation and attach it to the EventRole

				# For each participant
				print 'Adding invitations:'
				print 'Wanted positions: {}'.format(wantedpositions)
				print 'Wanted groups: {}'.format(wantedgroups)
				print 'Wanted members: {}'.format(wantedmembers)
				for position in wantedpositions:
					print '>>{} ({})'.format(position, position.id)
					if position not in currentpositions:
						print '++ Position {} is not invited: Create PositionInvitation!'.format(position)
						print eventrole
						print position
						pi = PositionInvitation(event_role=eventrole, position=position)
						print '++ PositionInvitation created: '.format(pi)
						try:
							pi.clean_fields()
							pi.save()
							print '++ PositionInvitation saved'
						except:
							print 'ERROR: Could not save PositionInvitation {}'.format(pi)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save PositionInvitation '+pi+'.' }))
					else:
						print '.. Position {} already invited: nothing to do. :-)'.format(position)
				print 'Positions done!'
				for group in wantedgroups:
					print '>>{} ({})'.format(group, group.id)
					if group not in currentgroups:
						print '++ Group {} is not invited: Create GroupInvitation!'.format(group)
						gi = GroupInvitation(event_role=eventrole, group=group)
						print '++ GroupInvitation created: '.format(gi)
						try:
							gi.clean_fields()
							gi.save()
							print '++ GroupInvitation saved'
						except:
							print 'ERROR: Could not save GroupInvitation {}'.format(gi)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save GroupInvitation '+gi+'.' }))
					else:
						print '.. Group {} already invited: nothing to do. :-)'.format(group)
				print 'Groups done!'
				for member in wantedmembers:
					print '>>{} ({})'.format(member, member.id)
					if member not in currentmembers:
						print '++ Member {} is not invited: Create MemberInvitation!'.format(member)
						mi = MemberInvitation(event_role=eventrole, member=member)
						print '++ MemberInvitation created: '.format(mi)
						try:
							mi.clean_fields()
							mi.save()
							print '++ MemberInvitation saved'
						except:
							print 'ERROR: Could not save MemberInvitation {}'.format(mi)
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save MemberInvitation '+mi+'.' }))
					else:
						print '.. Member {} already invited: nothing to do. :-)'.format(member)
				print 'All done!'
			else: #if we don't want the role:
				print 'No role wanted.'
				try: # check if the role exists and must be removed
					eventrole = EventRole.objects.get(event__id=event.id,role__id=role.id)
					print 'Removing eventrole: %s' % eventrole
					eventrole.delete()
				except: # No role wanted. No role exists. All good.
					print 'No role exists. All good.'
			print ' ..... '

		# for current tags:
		#	if tag not in submitted data:
		#		delete eventtag(event=event,tag=tag)
		# for all TagTypes:
		#	for submitted tags:
		#		if tag not currently saved:
		#			create eventtag(event=event,tag=tag)
		print 'Do tags.'
		print TagType.objects.all()

		print 'Iterate over eventtags'
		for tag in event.tags.all():
			try:
				print 'trying'
				tagslist=data['tag_type'][tagtype.id]
				#if tagslist == None:
				#	tagslist=[]
				#else:
				#	tagslist='hi'
				print 'tried'
			except:
				print 'excepting'
				tagslist=[]
				print 'excepted'
			print 'tagslist: '+str(tagslist)
			if str(tag.id) not in tagslist:
				print 'tag id '+str(tag.id)+' is not in '+str(data['tag_type'][tag.tag_type.id])
				print 'delete eventtag(event=event,tag='+str(tag)+')'
				try:
					et=EventTag.objects.get(event=event,tag=tag)
				except:
					print 'Could not get EventTag.'
					return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not get EventTag.' }))
				try:
					et.delete()
				except:
					print 'Could not delete EventTag.'
					return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not delete EventTag '+et+'.' }))
			else:
				print 'tag id '+str(tag.id)+' is in '+str(data['tag_type'][tag.tag_type.id])
				print 'Do nothing...'
		print 'Iterate over tagtypes'
		for tagtype in TagType.objects.all():
			if event.event_type in tagtype.event_type.all():
				print tagtype
				print tagtype.id
				try:
					print 'I am trying'
					tagslist=data['tag_type'][tagtype.id]
					print tagslist
					if tagslist == None:
						tagslist=[]
					print 'I tried'
				except:
					print 'I am excepting'
					tagslist=[]
					print 'I have excepted'
				print 'tagslist: '+str(tagslist)
				for tag_id in tagslist:
					tag=Tag.objects.get(pk=tag_id)
					print tag
					if tag not in event.tags.all():
						print 'tag '+str(tag)+' is not in '+str(event.tags.all())
						print 'create eventtag(event=event,tag='+str(tag)+')'
						try:
							et=EventTag(event=event,tag=tag)
						except:
							print 'Could not create EventTag.'
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not create EventTag.' }))
						try:
							et.clean_fields()
							et.save()
						except:
							print 'Could not save EventTag.'
							return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not save EventTag '+et+'.' }))
					else:
						print 'tag '+str(tag)+' is already in '+str(event.tags.all())
						print 'Nothing to do...'
			else:
				print 'tagtype '+str(tagtype)+' is not valid for this event'

		return HttpResponse(json.dumps({ 'type': 'success', 'event_id': event.id }))
Exemple #10
0
def create_event(request):
    if request.method == 'POST':
        event_name = request.POST.get('event_name', None)
        event_image = request.POST.get('event_image', None)
        start_date = request.POST.get('start_date', None)
        end_date = request.POST.get('end_date', None)
        due_date = request.POST.get('due_date', None)
        goal = request.POST.get('goal', None)
        progress = request.POST.get('progress', None)
        event_description = request.POST.get('event_description', None)
        location_street = request.POST.get('location_street', None)
        location_number = request.POST.get('location_number', None)
        location_suburb = request.POST.get('location_suburb', None)
        location_neighborhood = request.POST.get('location_neighborhood', None)
        location_zip_code = request.POST.get('location_zip_code', None)
        location_city = request.POST.get('location_city', None)
        minimum_attendance = request.POST.get('minimum_attendance', None)
        maximum_attendance = request.POST.get('maximum_attendance', None)
        category_name = request.POST.get('category_name', None)
        restriction_name = request.POST.get('restriction_name', None)
        restriction_description = request.POST.get('restriction_description', None)
        tier_name = request.POST.get('tier_name', None)
        tier_price = request.POST.get('tier_price', None)
        tier_description = request.POST.get('tier_description', None)
        if (event_name and
            event_image and
            start_date and
            end_date and
            due_date and
            goal and
            progress and
            event_description and
            location_street and
            location_number and
            location_suburb and
            location_neighborhood and
            location_zip_code and
            location_city and
            minimum_attendance and
            maximum_attendance and
            category_name and
            restriction_name and
            restriction_description and
            tier_name and
            tier_price and
            tier_description):
            event = Event()
            event.name = event_name
            event.event_image = event_image
            event.start_date = start_date
            event.end_date = end_date
            event.due_date = due_date
            event.goal = goal
            event.progress = progress
            event.description = event_description
            event.location_street = location_street
            event.location_number = location_number
            event.location_suburb = location_suburb
            event.location_neighborhood = location_neighborhood
            event.location_zip_code = location_zip_code
            event.location_city = location_city
            event.minimum_attendance = minimum_attendance
            event.maximum_attendance = maximum_attendance
            event.save()
            category = EventCategory()
            category.category_name = category_name
            category.save()
            restriction = Restriction()
            restriction.name = restriction_name
            restriction.description = restriction_description
            restriction.save()
            tier = EventTier()
            tier.event = event
            tier.name = tier_name
            tier.price = tier_price
            tier.description = tier_description
            tier.save()
            return redirect('/events')
    return render(request, 'events/create.html', {})
events_page = 'OffTheGridSF/events'
r = requests.get('https://graph.facebook.com/' + events_page + '?access_token=1705064953059017|e3b4439e3577e83f7f6a095a875f3f74')
events = r.json()

#Vendor.objects.all().delete()
#Event.objects.all().delete()

#Iterate through the events objects and save it if the object isn't 
#already in the database.
for event in events['data']:
	if not Event.objects.filter(event_id=event['id'].encode('ascii','ignore')):
		event_obj = Event()
		event_obj.name = event['name'].encode('ascii','ignore')
		event_obj.event_id = event['id'].encode('ascii','ignore')
		event_obj.date = parser.parse(event['start_time'].encode('ascii','ignore'))
		event_obj.description = event['description'].encode('ascii','ignore')
		event_obj.save()

#Scrape through the vendor site and gather a list of vendor names
vendors_page = requests.get('http://offthegridsf.com/vendors')
vendors_file = html.fromstring(vendors_page.text)
vendors = vendors_file.xpath('//a[@class="otg-vendor-name-link"]/text()')
vendors_list = set()

#Parse the vendor list for duplicate items of the form 'x (1)', 'x (20)'
#by stripping the values and adding it to a set which will not allow duplicates.
for vendor in vendors:
	if "(" in vendor:
		index = vendor.index('(')
		vendor = vendor[0:index]
	vendors_list.add(vendor)
Exemple #12
0
def save_event(request):
    if request.is_ajax() or True:
        print 'Is AJAX'
        # TODO: Add handler for these below. They are required and must be submitted or else the form will not validate. Or perhaps the clean_fields() exception is enough...?
        import pprint
        print 'Hér kemur hrátt data:'
        pprint.pprint(request.POST['data'])
        print 'Hér kemur JSON útgáfan:'
        data = json.loads(request.POST['data'])
        pprint.pprint(data)
        t = data['title']
        d = data['description']
        dtb = timezone.make_aware(parser.parse(data['date_time_begin']),
                                  timezone.get_default_timezone())
        dte = timezone.make_aware(parser.parse(data['date_time_end']),
                                  timezone.get_default_timezone())
        et_id = data['event_type']
        try:
            event_id = data['event_id']
            if event_id == '':
                # If no event id has been supplied, we'll create a new event.
                event = Event(title=t,
                              description=d,
                              date_time_begin=dtb,
                              date_time_end=dte,
                              event_type_id=et_id)
            else:
                # else we update the existing one.
                event = Event.objects.get(pk=event_id)
                event.title = t
                event.description = d
                event.date_time_begin = dtb
                event.date_time_end = dte
                event.event_type_id = et_id
                #return HttpResponse('Event fields updated.')
            # Now save the event
            try:
                event.clean_fields()
                event.save()
                print 'The event is: ------'
                print(vars(event))
                print '--------------------'
            except:
                return HttpResponse("Hello, world. Could not save event.")

            # Now that the event has been taken care of, let's sort out the event roles etc.
            # Flow:
            # For each role:
            for role in Role.objects.all():
                print 'Role ID %s' % role.id
                print 'Role is %s' % role
                try:  #if we want the role:
                    currentparticipants = [
                    ]  # This will be populated below if the event exists (and currently has any participants).
                    currentgroups = [
                    ]  # This will be populated below if the event exists (and currently has any participants).
                    currentmembers = [
                    ]  # This will be populated below if the event exists (and currently has any participants).

                    wantedparticipantIDs = data['role'][
                        role.id]['participants']
                    print 'Wanted participantsID: {}'.format(
                        wantedparticipantIDs)
                    wantedgroups = [
                        Group.objects.get(pk=int(groupid[1:]))
                        for groupid in wantedparticipantIDs
                        if groupid[0] == 'g'
                    ]
                    print 'We want event role {} with groups {}'.format(
                        role, wantedgroups)
                    wantedmembers = [
                        Member.objects.get(pk=int(memberid[1:]))
                        for memberid in wantedparticipantIDs
                        if memberid[0] == 'm'
                    ]
                    print 'We want event role {} with members {}'.format(
                        role, wantedmembers)
                    try:  #check whether the EventRole already exists
                        # In the event that an EventRole already exists, we have to:
                        #  1. Get the EventRole, stored in eventrole.
                        #  2. Remove unwanted participants
                        # Adding wanted participants is shared with EventRoles that
                        # need to be created so we're doing that later on.
                        #  3. Update the minimum and maximum number of participants

                        # 1.
                        eventrole = EventRole.objects.get(event_id=event.id,
                                                          role_id=role.id)
                        print 'EventRole "{}" already exists.'.format(
                            eventrole)

                        # 2.
                        #currentgroups= GroupInvitation.objects.filter(event_role=eventrole)
                        currentgroups = eventrole.invited_groups.all()
                        currentmembers = eventrole.invited_members.all()
                        print 'currentgroups: {}'.format(currentgroups)
                        print 'currentmembers: {}'.format(currentmembers)
                        print 'EventRole already has these invitations:'
                        for group in currentgroups:
                            print '>>{} ({})'.format(group, group.id)
                            #print 'Comare {} with {}'.format(group.id,wantedgroups)
                            if group not in wantedgroups:
                                print '-- ID is {}: We don\'t want {}.'.format(
                                    group.id, group)
                                #gi = GroupInvitation(event_role=eventrole,group=group)
                                #print 'Removing group {} from eventrole {}'.format(group,eventrole)
                                #print 'DEBUG'
                                try:
                                    print 'DEBUG: {}'.format(
                                        eventrole.invited_groups)
                                    gi = GroupInvitation.objects.get(
                                        event_role=eventrole, group=group)
                                    #print gi
                                    gi.delete()
                                    print 'BINGO'
                                except:
                                    print 'Could not remove group {} from {}'.format(
                                        group, currentgroups)
                            else:
                                print '++ ID is {}: We keep {}.'.format(
                                    group.id, group)
                        for member in currentmembers:
                            print '>>{} ({})'.format(member, member.id)
                            if member not in wantedmembers:
                                print '-- ID is {}: We don\'t want {}.'.format(
                                    member.id, member)
                                try:
                                    print 'DEBUG: {}'.format(
                                        eventrole.invited_members)
                                    mi = MemberInvitation.objects.get(
                                        event_role=eventrole, member=member)
                                    #print mi
                                    mi.delete()
                                    print 'BINGO'
                                except:
                                    print 'Could not remove member {} from {}'.format(
                                        member, currentmembers)
                            else:
                                print '++ ID is {}: We keep {}.'.format(
                                    member.id, member)
                        # 3.
                        if eventrole.minimum != int(data['role'][
                                role.id]['min']) or eventrole.maximum != int(
                                    data['role'][role.id]['max']):
                            eventrole.minimum = int(
                                data['role'][role.id]['min'])
                            eventrole.maximum = int(
                                data['role'][role.id]['max'])
                            try:
                                eventrole.clean_fields()
                                eventrole.save()
                                print 'eventrole saved: {}.'.format(eventrole)
                            except:
                                return HttpResponse(
                                    'Hello, world. Could not update eventrole max/min numbers.'
                                )
                    except:  #else
                        # Since there is no existing EventRole, we need to:
                        #  1. Create an EventRole, and save it as eventrole.
                        # and that's it! Adding participants is done below for both
                        # existing and recently created EventRoles.
                        eventrole = EventRole(
                            event_id=event.id,
                            role_id=role.id,
                            minimum=int(data['role'][role.id]['min']),
                            maximum=int(data['role'][role.id]['max']))
                        print 'No EventRole exists, creating {}.'.format(
                            eventrole)
                        try:
                            eventrole.clean_fields()
                            eventrole.save()
                            print 'eventrole saved: {}.'.format(eventrole)
                        except:
                            return HttpResponse(
                                'Hello, world. Could not save eventrole.')

                    # Now that we have the eventrole and it has been stripped of its
                    # unwanted participatns, let's add the wanted ones.
                    # Workflow:
                    # For each wanted participant,
                    #   if they're not currently invited,
                    #     create a GroupInvitation and attach it to the EventRole

                    # For each participant
                    print 'Adding invitations:'
                    print 'Wanted groups: {}'.format(wantedgroups)
                    print 'Wanted members: {}'.format(wantedmembers)
                    for group in wantedgroups:
                        print '>>{} ({})'.format(group, group.id)
                        if group not in currentgroups:
                            print '++ Group {} is not invited: Create GroupInvitation!'.format(
                                group)
                            gi = GroupInvitation(event_role=eventrole,
                                                 group=group)
                            print '++ GroupInvitation created: '.format(gi)
                            try:
                                gi.clean_fields()
                                gi.save()
                                print '++ GroupInvitation saved'
                            except:
                                print 'ERROR: Could not save GroupInvitation {}'.format(
                                    gi)
                        else:
                            print '.. Group {} already invited: nothing to do. :-)'.format(
                                group)
                    print 'Groups done!'
                    for member in wantedmembers:
                        print '>>{} ({})'.format(member, member.id)
                        if member not in currentmembers:
                            print '++ Member {} is not invited: Create MemberInvitation!'.format(
                                member)
                            mi = MemberInvitation(event_role=eventrole,
                                                  member=member)
                            print '++ MemberInvitation created: '.format(mi)
                            try:
                                mi.clean_fields()
                                mi.save()
                                print '++ MemberInvitation saved'
                            except:
                                print 'ERROR: Could not save MemberInvitation {}'.format(
                                    mi)
                        else:
                            print '.. Member {} already invited: nothing to do. :-)'.format(
                                member)
                    print 'All done!'
                except:  #if we don't want the role:
                    print 'No role wanted.'
                    try:  # check if the role exists and must be removed
                        eventrole = EventRole.objects.get(event__id=event.id,
                                                          role__id=role.id)
                        print 'Removing eventrole: %s' % eventrole
                        eventrole.delete()
                    except:  # No role wanted. No role exists. All good.
                        print 'No role exists. All good.'
                print ' ..... '
        except:
            return HttpResponse("Hello, world. Could not create event.")
        return HttpResponse(event.id)
    else:
        return HttpResponse("Hello, world. Not AJAX request.")
    def create_event(self, event_dict):
        e = Event(id=event_dict.get('eventId'))
        e.title = u"{0} {1}".format(event_dict.get('title', '').strip(), event_dict.get('subTitle', '').strip())
        e.description = event_dict.get('description', '')

        start = arrow.get(event_dict.get('startDay')).naive
        start = timezone.make_aware(start, timezone.get_default_timezone())
        end = arrow.get(event_dict.get('endDay')).naive
        end = timezone.make_aware(end, timezone.get_default_timezone())
        time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines()
        if time_string:
            time_string = time_string[0]
            time = time_string.replace('midnight', '12:00').replace(
                'close', '4:00').replace('closing', '4:00').replace(';', ':')
            time = re.sub('[^0-9:]', ' ', time)
            time = time.split()
            if time:
                start_time = time[0]
                if ":" not in start_time:
                    start_time += ":00"
                start_time = parse_time(start_time)
                start = start.replace(hour=start_time.hour, minute=start_time.minute)
                if start_time.hour < 4:
                    start += timezone.timedelta(days=1)
                else:
                    start += timezone.timedelta(hours=12)

                if any(separator in time_string for separator in ['to', 'and', '&']) and len(time) > 1:
                    print time_string
                    print time
                    print e.id
                    end_time = time[1]
                    if ':' not in end_time:
                        end_time += ":00"
                    end_time = parse_time(end_time)
                    end = end.replace(hour=end_time.hour, minute=end_time.minute)
                    if end_time.hour < 6:
                        end += timezone.timedelta(days=1)
                    else:
                        end += timezone.timedelta(hours=12)

                    if 'and' in time_string or '&' in time_string:
                        end += timezone.timedelta(hours=1, minutes=30)
                else:
                    end = start + timezone.timedelta(hours=1, minutes=30)

        e.start = start
        e.end = end

        if event_dict.get('media'):
            e.photo = u"images/{0}".format(event_dict.get('media')[0]['fileName'])

        e.save()

        leaders = {}
        for performer in event_dict.get('performers'):
            if performer.get('personTypeId') == 69:
                leaders.setdefault(e.id, []).append(performer.get('personId'))
            else:
                gig, _ = GigPlayed.objects.get_or_create(
                    artist_id=performer.get('personId'),
                    event_id=e.id,
                    role_id=performer.get('personTypeId'),
                    sort_order=performer.get('sortOrder') or ""
                )

        for event_id, artists in leaders.iteritems():
            for artist_id in artists:
                # In some rare cases, artist is only listed as leader, without an instrument
                # so we create a new GigPlayed object with that role
                try:
                    gig = GigPlayed.objects.get(event_id=event_id, artist_id=artist_id)
                    gig.is_leader = True
                    gig.save()
                except GigPlayed.DoesNotExist:
                    gig = GigPlayed.objects.create(
                        artist_id=artist_id,
                        event_id=event_id,
                        role_id=69,
                        is_leader=True,
                        sort_order=-1
                    )

        return e
Exemple #14
0
def events_list(request):

    func_return = _init_facebook_app(request)
    if (func_return != False):
        return func_return

    try:
        graph, user, sys_user = _get_facebook_app(request)
        if sys_user is None:
            return HttpResponseRedirect("/facebook/setup/")
    except facebook.GraphAPIError:
        del request.session["access_token"]
        return HttpResponseRedirect("http://apps.facebook.com/" +
                                    settings.FACEBOOK_APP_ID + "/")

    if request.method == 'POST':
        events_ids = request.POST.getlist("object_events")

        for event_id in events_ids:
            event = graph.get_object(event_id)
            image_url = "https://graph.facebook.com/" + event[
                "id"] + "/picture?type=large"

            img_temp = NamedTemporaryFile(delete=True)
            img_temp.write(urllib2.urlopen(image_url).read())
            img_temp.flush()

            user_event = Event(
                title=event["name"],
                from_date=dateutil.parser.parse(event["start_time"]),
                to_date=dateutil.parser.parse(event["end_time"]),
                address=event["location"],
                user=sys_user.username,
                add_user=sys_user,
                category=EventCategory.objects.get(id=1),
                status=2,
            )

            if "description" in event:
                user_event.description = event["description"]

            user_event.image.save(event["id"] + ".jpg", File(img_temp))
            user_event.slug = SlugifyUniquely(event["name"],
                                              user_event.__class__)
            user_event.save()

        if len(events_ids) > 0:
            _add_flash_message(request, "Your events has been added")
        return HttpResponseRedirect(reverse('facebook_events_list'))

    events = graph.get_connections(user["id"], "events")

    for event in events["data"]:
        event["start_time"] = dateutil.parser.parse(event["start_time"])
        event["end_time"] = dateutil.parser.parse(event["end_time"])
        event["picture_url"] = "https://graph.facebook.com/" + event[
            "id"] + "/picture?type=normal"

    return dict(
        user=user,
        events=events,
        message=_get_flash_message(request),
    )
Exemple #15
0
def save_event(request):
    print 'Saving event'
    if not request.is_ajax():
        return HttpResponse(
            json.dumps({
                'type': 'error',
                'message': 'Hello, world. Not an AJAX request.'
            }))
    else:
        print 'Is AJAX'
        import pprint
        print 'Hér kemur hrátt data:'
        pprint.pprint(request.POST['data'])
        print 'Hér kemur JSON útgáfan:'
        data = json.loads(request.POST['data'])
        pprint.pprint(data)

        # Sanitise some of the data and return messages if it fails.

        ### TITLE ###
        # The title must be non-zero and no longer than 64 characters (defined in events/models.py).
        print 'Submitted data:'
        t = data['title']
        if t == "":
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'Title missing.',
                }))
        elif len(t) > 64:
            return HttpResponse(
                json.dumps({
                    'type':
                    'error',
                    'message':
                    'The title is currently ' + str(len(t)) +
                    ' characters long but the maximum is 64.',
                }))
        import sys
        print sys.stdout.encoding
        print type(t)
        print '--title: {}'.format(t.encode('UTF-8'))

        ### DESCRIPTION ###
        # There are no restrictions on the description field other than being cleaned. It may be blank and arbitrarily long.
        d = data['description']
        # The dates must be supplied and the beginning must precede the end.
        print '--description: {}'.format(d.encode('UTF-8'))

        ### DATES ###
        if data['date_time_begin'] == "":
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'Beginning date missing.',
                }))
        try:
            dtb = timezone.make_aware(parser.parse(data['date_time_begin']),
                                      timezone.get_default_timezone())
        except:
            return HttpResponse(
                json.dumps({
                    'type':
                    'error',
                    'message':
                    'Beginning date-time is not a valid datetime.',
                }))
        print '--begins: {}'.format(dtb)
        if data['date_time_end'] == "":
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'End date missing.',
                }))
        try:
            dte = timezone.make_aware(parser.parse(data['date_time_end']),
                                      timezone.get_default_timezone())
        except:
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'End date-time is not a valid datetime',
                }))
        if dte <= dtb:
            return HttpResponse(
                json.dumps({
                    'type':
                    'error',
                    'message':
                    'The event start time must precede the end.',
                }))
        print '--ends: {}'.format(dte)

        ### TYPE ###
        # The event-type must be supplied.
        et_id = data['event_type']
        print '--type ID: {}'.format(et_id)
        if et_id == "":
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'No event type supplied.',
                }))

        ### EVENT ID ###
        print 'All the data has been submitted. Checking whether event_id has been supplied.'
        try:
            event_id = data['event_id']
            print 'event_id: {}'.format(event_id)
        except:
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'No event_id submitted.',
                }))
        if event_id == '':
            # If no event id has been supplied, we'll create a new event.
            print 'Creating event...'
            event = Event(title=t,
                          description=d,
                          date_time_begin=dtb,
                          date_time_end=dte,
                          event_type_id=et_id)
        else:
            # else we update the existing one.
            print 'Updating event...'
            event = Event.objects.get(pk=event_id)
            event.title = t
            event.description = d
            event.date_time_begin = dtb
            event.date_time_end = dte
            event.event_type_id = et_id

        # Now save the event
        try:
            event.clean_fields()
            event.save()
            print 'The event is: ------'
            pprint.pprint(vars(event))
            print '--------------------'
        except:
            return HttpResponse(
                json.dumps({
                    'type': 'error',
                    'message': 'Could not save event.'
                }))

        # Now that the event has been taken care of, let's sort out the event roles etc.
        # Flow:
        # For each role:
        for role in Role.objects.all():
            print 'Role ID %s' % role.id
            print 'Role is %s' % role
            try:
                participants_exist = data['role'][role.id]['participants']
            except:
                participants_exist = False
            #print participants_exist
            if participants_exist:
                # If we want eventroles, check whether these need to be created and otherwise update them.

                currentparticipants = [
                ]  # This will be populated below if the event exists (and currently has any participants).
                currentgroups = [
                ]  # This will be populated below if the event exists (and currently has any participants).
                currentmembers = [
                ]  # This will be populated below if the event exists (and currently has any participants).

                # The wantedparticipantIDs is a list of invitations compiled from a
                # drop-down in the interface. the drop-down contains positions,
                # groups, members and the option to make it an open event (inviting
                # all members). To differentiate between the primary keys of
                # positions, groups and members, these are prefixed with the
                # characters 'p', 'g' and 'm', respectively.

                wantedparticipantIDs = data['role'][role.id]['participants']
                print 'Wanted participantsID: {}'.format(wantedparticipantIDs)

                wantedpositions = [
                    Position.objects.get(pk=int(positionid[1:]))
                    for positionid in wantedparticipantIDs
                    if positionid[0] == 'p'
                ]
                print 'We want event role {} with positions {}'.format(
                    role, wantedpositions)
                wantedgroups = [
                    Group.objects.get(pk=int(groupid[1:]))
                    for groupid in wantedparticipantIDs if groupid[0] == 'g'
                ]
                print 'We want event role {} with groups {}'.format(
                    role, wantedgroups)
                wantedmembers = [
                    Member.objects.get(pk=int(memberid[1:]))
                    for memberid in wantedparticipantIDs if memberid[0] == 'm'
                ]
                print 'We want event role {} with members {}'.format(
                    role, wantedmembers)

                # Check whether the event is open.
                is_open = ('a' in wantedparticipantIDs)

                # Workflow:
                #  1. Get or create the EventRole.
                #  2. Remove unwanted invitations.
                #  3. Update the minimum and maximum number of participants.
                #  4. Adding wanted invitations

                try:  # check whether the EventRole already exists
                    # 1. Get the EventRole, stored in eventrole.
                    eventrole = EventRole.objects.get(event_id=event.id,
                                                      role_id=role.id)
                    print 'EventRole "{}" already exists.'.format(eventrole)
                except:
                    # Since there is no existing EventRole, we need to:
                    #  1. Create an EventRole, and save it as eventrole.
                    # and that's it! Adding participants is done below for both
                    # existing and recently created EventRoles.
                    try:
                        print 'event_id: {}'.format(event.id)
                        print 'role_id: {}'.format(role.id)
                        # TODO: Later feature...
                        #eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max']))
                        eventrole = EventRole(event_id=event.id,
                                              role_id=role.id,
                                              is_open=is_open)
                        print 'No EventRole exists, creating {}.'.format(
                            eventrole)
                    except:
                        print 'Could not create eventrole.'
                        return HttpResponse(
                            json.dumps({
                                'type': 'error',
                                'message': 'Could not create eventrole.'
                            }))
                    try:
                        eventrole.clean_fields()
                        eventrole.save()
                        print 'eventrole saved: {}.'.format(eventrole)
                    except:
                        return HttpResponse(
                            json.dumps({
                                'type': 'error',
                                'message': 'Could not save eventrole.'
                            }))

                # 2. Remove unwanted invitations.
                currentpositions = eventrole.invited_positions.all()
                currentgroups = eventrole.invited_groups.all()
                currentmembers = eventrole.invited_members.all()
                print 'currentpositions: {}'.format(currentpositions)
                print 'currentgroups: {}'.format(currentgroups)
                print 'currentmembers: {}'.format(currentmembers)
                print 'EventRole already has these invitations:'
                for position in currentpositions:
                    print '>>{} ({})'.format(position, position.id)
                    if position not in wantedpositions:
                        print '-- ID is {}: We don\'t want {}.'.format(
                            group.id, group)
                        try:
                            #print 'DEBUG: {}'.format(eventrole.invited_positions)
                            pi = PositionInvitation.objects.get(
                                event_role=eventrole, position=position)
                            pi.delete()
                        except:
                            print 'Could not remove position {} from {}'.format(
                                group, currentgroups)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not remove position ' +
                                    str(position) + ' from ' +
                                    currentpositions + '.'
                                }))
                    else:
                        print '++ ID is {}: We keep position {}.'.format(
                            position.id, position)
                for group in currentgroups:
                    print '>>{} ({})'.format(group, group.id)
                    if group not in wantedgroups:
                        print '-- ID is {}: We don\'t want {}.'.format(
                            group.id, group)
                        try:
                            #print 'DEBUG: {}'.format(eventrole.invited_groups)
                            gi = GroupInvitation.objects.get(
                                event_role=eventrole, group=group)
                            gi.delete()
                        except:
                            print 'Could not remove group {} from {}'.format(
                                group, currentgroups)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not remove group ' + str(group) +
                                    ' from ' + currentgroups + '.'
                                }))
                    else:
                        print '++ ID is {}: We keep group {}.'.format(
                            group.id, group)
                for member in currentmembers:
                    print '>>{} ({})'.format(member, member.id)
                    if member not in wantedmembers:
                        print '-- ID is {}: We don\'t want {}.'.format(
                            member.id, member)
                        try:
                            #print 'DEBUG: {}'.format(eventrole.invited_members)
                            mi = MemberInvitation.objects.get(
                                event_role=eventrole, member=member)
                            mi.delete()
                        except:
                            print 'Could not remove member {} from {}'.format(
                                member, currentmembers)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not remove member ' + str(member) +
                                    ' from ' + currentmembers + '.'
                                }))
                    else:
                        print '++ ID is {}: We keep member {}.'.format(
                            member.id, member)

                # Finally set whether the EventRole is open to all members:
                eventrole.is_open = is_open
                try:
                    eventrole.clean_fields()
                    eventrole.save()
                    print 'eventrole saved: {}.'.format(eventrole)
                except:
                    return HttpResponse(
                        json.dumps({
                            'type':
                            'error',
                            'message':
                            'Could not update whether the EventRole is open numbers.'
                        }))

                # 3. Update the minimum and maximum number of participants.
                # TODO: Later feature...
                #if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']):
                #	eventrole.minimum = int(data['role'][role.id]['min'])
                #	eventrole.maximum = int(data['role'][role.id]['max'])
                #	try:
                #		eventrole.clean_fields()
                #		eventrole.save()
                #		print 'eventrole saved: {}.'.format(eventrole)
                #	except:
                #		return HttpResponse(json.dumps({ 'type': 'error', 'message': 'Could not update eventrole max/min numbers.' }))

                # 4. Adding wanted invitations
                # Now that we have the eventrole and it has been stripped of its
                # unwanted participatns, let's add the wanted ones.
                # Workflow:
                # For each wanted participant,
                #   if they're not currently invited,
                #     create a {Position,Group,Member}Invitation and attach it to the EventRole

                # For each participant
                print 'Adding invitations:'
                print 'Wanted positions: {}'.format(wantedpositions)
                print 'Wanted groups: {}'.format(wantedgroups)
                print 'Wanted members: {}'.format(wantedmembers)
                for position in wantedpositions:
                    print '>>{} ({})'.format(position, position.id)
                    if position not in currentpositions:
                        print '++ Position {} is not invited: Create PositionInvitation!'.format(
                            position)
                        print eventrole
                        print position
                        pi = PositionInvitation(event_role=eventrole,
                                                position=position)
                        print '++ PositionInvitation created: '.format(pi)
                        try:
                            pi.clean_fields()
                            pi.save()
                            print '++ PositionInvitation saved'
                        except:
                            print 'ERROR: Could not save PositionInvitation {}'.format(
                                pi)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not save PositionInvitation ' + pi +
                                    '.'
                                }))
                    else:
                        print '.. Position {} already invited: nothing to do. :-)'.format(
                            position)
                print 'Positions done!'
                for group in wantedgroups:
                    print '>>{} ({})'.format(group, group.id)
                    if group not in currentgroups:
                        print '++ Group {} is not invited: Create GroupInvitation!'.format(
                            group)
                        gi = GroupInvitation(event_role=eventrole, group=group)
                        print '++ GroupInvitation created: '.format(gi)
                        try:
                            gi.clean_fields()
                            gi.save()
                            print '++ GroupInvitation saved'
                        except:
                            print 'ERROR: Could not save GroupInvitation {}'.format(
                                gi)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not save GroupInvitation ' + gi +
                                    '.'
                                }))
                    else:
                        print '.. Group {} already invited: nothing to do. :-)'.format(
                            group)
                print 'Groups done!'
                for member in wantedmembers:
                    print '>>{} ({})'.format(member, member.id)
                    if member not in currentmembers:
                        print '++ Member {} is not invited: Create MemberInvitation!'.format(
                            member)
                        mi = MemberInvitation(event_role=eventrole,
                                              member=member)
                        print '++ MemberInvitation created: '.format(mi)
                        try:
                            mi.clean_fields()
                            mi.save()
                            print '++ MemberInvitation saved'
                        except:
                            print 'ERROR: Could not save MemberInvitation {}'.format(
                                mi)
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not save MemberInvitation ' + mi +
                                    '.'
                                }))
                    else:
                        print '.. Member {} already invited: nothing to do. :-)'.format(
                            member)
                print 'All done!'
            else:  #if we don't want the role:
                print 'No role wanted.'
                try:  # check if the role exists and must be removed
                    eventrole = EventRole.objects.get(event__id=event.id,
                                                      role__id=role.id)
                    print 'Removing eventrole: %s' % eventrole
                    eventrole.delete()
                except:  # No role wanted. No role exists. All good.
                    print 'No role exists. All good.'
            print ' ..... '

        # for current tags:
        #	if tag not in submitted data:
        #		delete eventtag(event=event,tag=tag)
        # for all TagTypes:
        #	for submitted tags:
        #		if tag not currently saved:
        #			create eventtag(event=event,tag=tag)
        print 'Do tags.'
        print TagType.objects.all()

        print 'Iterate over eventtags'
        for tag in event.tags.all():
            try:
                print 'trying'
                tagslist = data['tag_type'][tagtype.id]
                #if tagslist == None:
                #	tagslist=[]
                #else:
                #	tagslist='hi'
                print 'tried'
            except:
                print 'excepting'
                tagslist = []
                print 'excepted'
            print 'tagslist: ' + str(tagslist)
            if str(tag.id) not in tagslist:
                print 'tag id ' + str(tag.id) + ' is not in ' + str(
                    data['tag_type'][tag.tag_type.id])
                print 'delete eventtag(event=event,tag=' + str(tag) + ')'
                try:
                    et = EventTag.objects.get(event=event, tag=tag)
                except:
                    print 'Could not get EventTag.'
                    return HttpResponse(
                        json.dumps({
                            'type': 'error',
                            'message': 'Could not get EventTag.'
                        }))
                try:
                    et.delete()
                except:
                    print 'Could not delete EventTag.'
                    return HttpResponse(
                        json.dumps({
                            'type':
                            'error',
                            'message':
                            'Could not delete EventTag ' + et + '.'
                        }))
            else:
                print 'tag id ' + str(tag.id) + ' is in ' + str(
                    data['tag_type'][tag.tag_type.id])
                print 'Do nothing...'
        print 'Iterate over tagtypes'
        for tagtype in TagType.objects.all():
            if event.event_type in tagtype.event_type.all():
                print tagtype
                print tagtype.id
                try:
                    print 'I am trying'
                    tagslist = data['tag_type'][tagtype.id]
                    print tagslist
                    if tagslist == None:
                        tagslist = []
                    print 'I tried'
                except:
                    print 'I am excepting'
                    tagslist = []
                    print 'I have excepted'
                print 'tagslist: ' + str(tagslist)
                for tag_id in tagslist:
                    tag = Tag.objects.get(pk=tag_id)
                    print tag
                    if tag not in event.tags.all():
                        print 'tag ' + str(tag) + ' is not in ' + str(
                            event.tags.all())
                        print 'create eventtag(event=event,tag=' + str(
                            tag) + ')'
                        try:
                            et = EventTag(event=event, tag=tag)
                        except:
                            print 'Could not create EventTag.'
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not create EventTag.'
                                }))
                        try:
                            et.clean_fields()
                            et.save()
                        except:
                            print 'Could not save EventTag.'
                            return HttpResponse(
                                json.dumps({
                                    'type':
                                    'error',
                                    'message':
                                    'Could not save EventTag ' + et + '.'
                                }))
                    else:
                        print 'tag ' + str(tag) + ' is already in ' + str(
                            event.tags.all())
                        print 'Nothing to do...'
            else:
                print 'tagtype ' + str(
                    tagtype) + ' is not valid for this event'

        return HttpResponse(
            json.dumps({
                'type': 'success',
                'event_id': event.id
            }))
    def create_event(self, event_dict):
        e = Event(id=event_dict.get('eventId'))
        e.title = u"{0} {1}".format(
            event_dict.get('title', '').strip(),
            event_dict.get('subTitle', '').strip())
        e.description = event_dict.get('description', '')

        start = arrow.get(event_dict.get('startDay')).naive
        start = timezone.make_aware(start, timezone.get_default_timezone())
        end = arrow.get(event_dict.get('endDay')).naive
        end = timezone.make_aware(end, timezone.get_default_timezone())
        time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines()
        if time_string:
            time_string = time_string[0]
            time = time_string.replace('midnight', '12:00').replace(
                'close', '4:00').replace('closing', '4:00').replace(';', ':')
            time = re.sub('[^0-9:]', ' ', time)
            time = time.split()
            if time:
                start_time = time[0]
                if ":" not in start_time:
                    start_time += ":00"
                start_time = parse_time(start_time)
                start = start.replace(hour=start_time.hour,
                                      minute=start_time.minute)
                if start_time.hour < 4:
                    start += timezone.timedelta(days=1)
                else:
                    start += timezone.timedelta(hours=12)

                if any(separator in time_string
                       for separator in ['to', 'and', '&']) and len(time) > 1:
                    print time_string
                    print time
                    print e.id
                    end_time = time[1]
                    if ':' not in end_time:
                        end_time += ":00"
                    end_time = parse_time(end_time)
                    end = end.replace(hour=end_time.hour,
                                      minute=end_time.minute)
                    if end_time.hour < 6:
                        end += timezone.timedelta(days=1)
                    else:
                        end += timezone.timedelta(hours=12)

                    if 'and' in time_string or '&' in time_string:
                        end += timezone.timedelta(hours=1, minutes=30)
                else:
                    end = start + timezone.timedelta(hours=1, minutes=30)

        e.start = start
        e.end = end

        if event_dict.get('media'):
            e.photo = u"images/{0}".format(
                event_dict.get('media')[0]['fileName'])

        e.save()

        leaders = {}
        for performer in event_dict.get('performers'):
            if performer.get('personTypeId') == 69:
                leaders.setdefault(e.id, []).append(performer.get('personId'))
            else:
                gig, _ = GigPlayed.objects.get_or_create(
                    artist_id=performer.get('personId'),
                    event_id=e.id,
                    role_id=performer.get('personTypeId'),
                    sort_order=performer.get('sortOrder') or "")

        for event_id, artists in leaders.iteritems():
            for artist_id in artists:
                # In some rare cases, artist is only listed as leader, without an instrument
                # so we create a new GigPlayed object with that role
                try:
                    gig = GigPlayed.objects.get(event_id=event_id,
                                                artist_id=artist_id)
                    gig.is_leader = True
                    gig.save()
                except GigPlayed.DoesNotExist:
                    gig = GigPlayed.objects.create(artist_id=artist_id,
                                                   event_id=event_id,
                                                   role_id=69,
                                                   is_leader=True,
                                                   sort_order=-1)

        return e
Exemple #17
0
def save_event(request):
	if request.is_ajax() or True:
		print 'Is AJAX'
		# TODO: Add handler for these below. They are required and must be submitted or else the form will not validate. Or perhaps the clean_fields() exception is enough...?
		import pprint
		print 'Hér kemur hrátt data:'
		pprint.pprint(request.POST['data'])
		print 'Hér kemur JSON útgáfan:'
		data = json.loads(request.POST['data'])
		pprint.pprint(data)
		t = data['title']
		d = data['description']
		dtb = timezone.make_aware(parser.parse(data['date_time_begin']),timezone.get_default_timezone())
		dte = timezone.make_aware(parser.parse(data['date_time_end']),timezone.get_default_timezone())
		et_id = data['event_type']
		try:
			event_id = data['event_id']
			if event_id == '':
			# If no event id has been supplied, we'll create a new event.
				event = Event(title=t, description=d, date_time_begin=dtb, date_time_end=dte, event_type_id=et_id)
			else:
			# else we update the existing one.
				event = Event.objects.get(pk=event_id)
				event.title = t
				event.description = d
				event.date_time_begin = dtb
				event.date_time_end = dte
				event.event_type_id = et_id
				#return HttpResponse('Event fields updated.')
			# Now save the event
			try:
				event.clean_fields()
				event.save()
				print 'The event is: ------'
				print (vars(event))
				print '--------------------'
			except:
				return HttpResponse ("Hello, world. Could not save event.")

			# Now that the event has been taken care of, let's sort out the event roles etc.
			# Flow:
			# For each role:
			for role in Role.objects.all():
				print 'Role ID %s' % role.id
				print 'Role is %s' % role
				try: #if we want the role:
					currentparticipants = [] # This will be populated below if the event exists (and currently has any participants).
					currentgroups = [] # This will be populated below if the event exists (and currently has any participants).
					currentmembers= [] # This will be populated below if the event exists (and currently has any participants).

					wantedparticipantIDs = data['role'][role.id]['participants']
					print 'Wanted participantsID: {}'.format(wantedparticipantIDs)
					wantedgroups = [Group.objects.get(pk=int(groupid[1:])) for groupid in wantedparticipantIDs if groupid[0]=='g']
					print 'We want event role {} with groups {}'.format(role, wantedgroups)
					wantedmembers= [Member.objects.get(pk=int(memberid[1:])) for memberid in wantedparticipantIDs if memberid[0]=='m']
					print 'We want event role {} with members {}'.format(role, wantedmembers)
					try: #check whether the EventRole already exists
						# In the event that an EventRole already exists, we have to:
						#  1. Get the EventRole, stored in eventrole.
						#  2. Remove unwanted participants
						# Adding wanted participants is shared with EventRoles that
						# need to be created so we're doing that later on.
						#  3. Update the minimum and maximum number of participants

						# 1.
						eventrole = EventRole.objects.get(event_id=event.id,role_id=role.id)
						print 'EventRole "{}" already exists.'.format(eventrole)

						# 2.
						#currentgroups= GroupInvitation.objects.filter(event_role=eventrole)
						currentgroups = eventrole.invited_groups.all()
						currentmembers= eventrole.invited_members.all()
						print 'currentgroups: {}'.format(currentgroups)
						print 'currentmembers: {}'.format(currentmembers)
						print 'EventRole already has these invitations:'
						for group in currentgroups:
							print '>>{} ({})'.format(group, group.id)
							#print 'Comare {} with {}'.format(group.id,wantedgroups)
							if group not in wantedgroups:
								print '-- ID is {}: We don\'t want {}.'.format(group.id,group)
								#gi = GroupInvitation(event_role=eventrole,group=group)
								#print 'Removing group {} from eventrole {}'.format(group,eventrole)
								#print 'DEBUG'
								try:
									print 'DEBUG: {}'.format(eventrole.invited_groups)
									gi = GroupInvitation.objects.get(event_role=eventrole,group=group)
									#print gi
									gi.delete()
									print 'BINGO'
								except:
									print 'Could not remove group {} from {}'.format(group,currentgroups)
							else:
								print '++ ID is {}: We keep {}.'.format(group.id,group)
						for member in currentmembers:
							print '>>{} ({})'.format(member, member.id)
							if member not in wantedmembers:
								print '-- ID is {}: We don\'t want {}.'.format(member.id,member)
								try:
									print 'DEBUG: {}'.format(eventrole.invited_members)
									mi = MemberInvitation.objects.get(event_role=eventrole,member=member)
									#print mi
									mi.delete()
									print 'BINGO'
								except:
									print 'Could not remove member {} from {}'.format(member,currentmembers)
							else:
								print '++ ID is {}: We keep {}.'.format(member.id,member)
						# 3.
						if eventrole.minimum != int(data['role'][role.id]['min']) or eventrole.maximum != int(data['role'][role.id]['max']):
							eventrole.minimum = int(data['role'][role.id]['min'])
							eventrole.maximum = int(data['role'][role.id]['max'])
							try:
								eventrole.clean_fields()
								eventrole.save()
								print 'eventrole saved: {}.'.format(eventrole)
							except:
								return HttpResponse('Hello, world. Could not update eventrole max/min numbers.')
					except: #else
						# Since there is no existing EventRole, we need to:
						#  1. Create an EventRole, and save it as eventrole.
						# and that's it! Adding participants is done below for both
						# existing and recently created EventRoles.
						eventrole = EventRole(event_id=event.id,role_id=role.id,minimum=int(data['role'][role.id]['min']), maximum=int(data['role'][role.id]['max']))
						print 'No EventRole exists, creating {}.'.format(eventrole)
						try:
							eventrole.clean_fields()
							eventrole.save()
							print 'eventrole saved: {}.'.format(eventrole)
						except:
							return HttpResponse('Hello, world. Could not save eventrole.')

					# Now that we have the eventrole and it has been stripped of its
					# unwanted participatns, let's add the wanted ones.
					# Workflow:
					# For each wanted participant,
					#   if they're not currently invited,
					#     create a GroupInvitation and attach it to the EventRole

					# For each participant
					print 'Adding invitations:'
					print 'Wanted groups: {}'.format(wantedgroups)
					print 'Wanted members: {}'.format(wantedmembers)
					for group in wantedgroups:
						print '>>{} ({})'.format(group, group.id)
						if group not in currentgroups:
							print '++ Group {} is not invited: Create GroupInvitation!'.format(group)
							gi = GroupInvitation(event_role=eventrole, group=group)
							print '++ GroupInvitation created: '.format(gi)
							try:
								gi.clean_fields()
								gi.save()
								print '++ GroupInvitation saved'
							except:
								print 'ERROR: Could not save GroupInvitation {}'.format(gi)
						else:
							print '.. Group {} already invited: nothing to do. :-)'.format(group)
					print 'Groups done!'
					for member in wantedmembers:
						print '>>{} ({})'.format(member, member.id)
						if member not in currentmembers:
							print '++ Member {} is not invited: Create MemberInvitation!'.format(member)
							mi = MemberInvitation(event_role=eventrole, member=member)
							print '++ MemberInvitation created: '.format(mi)
							try:
								mi.clean_fields()
								mi.save()
								print '++ MemberInvitation saved'
							except:
								print 'ERROR: Could not save MemberInvitation {}'.format(mi)
						else:
							print '.. Member {} already invited: nothing to do. :-)'.format(member)
					print 'All done!'
				except: #if we don't want the role:
					print 'No role wanted.'
					try: # check if the role exists and must be removed
						eventrole = EventRole.objects.get(event__id=event.id,role__id=role.id)
						print 'Removing eventrole: %s' % eventrole
						eventrole.delete()
					except: # No role wanted. No role exists. All good.
						print 'No role exists. All good.'
				print ' ..... '
		except:
			return HttpResponse("Hello, world. Could not create event.")
		return HttpResponse(event.id)
	else:
		return HttpResponse("Hello, world. Not AJAX request.")
Exemple #18
0
    def do(self):
        logger.debug("cron job starting for: FB")

        #get the event worker for heltech
        try:
            ew = EventWorker.objects.get(
                page_name="HEL Tech")  #assume one worker for hel tech

        except ObjectDoesNotExist:
            logger.error("No event workers configured, cannot check events!")
            return
        except MultipleObjectsReturned:
            logger.error(
                "Multiple workers found, do not know which one to run yet!")
            return

        graph = facebook.GraphAPI(access_token=ew.page_token, version="2.1")

        #get the page events and the database events
        fb_events = graph.get_connections(id=ew.page_id,
                                          connection_name="events")
        db_events = Event.objects.all()

        for event in fb_events['data']:
            try:
                e = Event.objects.get(eid=event['id'])
            except ObjectDoesNotExist:
                e = Event()

            ep = EventParser(event, ew.parse_speakers)
            ep.parse()

            #exists, lets update the participant count
            ac = graph.get_object(id=event['id'], fields='attending_count')
            e.attending_count = ac['attending_count'] or 0

            # fetch the cover photo
            cover = graph.get_object(id=event['id'], fields=['cover'])

            try:
                e.cover_uri = cover['cover']['source']
            except KeyError:
                e.cover_uri = ""

            # fill in the data
            e.eid = ep.eid
            e.title = ep.title
            e.start_time = ep.start_time
            e.end_time = ep.end_time
            e.programme = ep.programme
            e.description = ep.description
            e.punchline = ep.punchline

            #add the place
            try:
                p = Place.objects.get(name=ep.place)
            except ObjectDoesNotExist:
                p = Place()

            p.name = ep.place
            p.streetaddr = ep.addr

            p.save()
            e.place = p

            e.save()  #that's all for now

            # fill the speakers
            if ew.parse_speakers:
                edt = parser.parse(e.start_time)
                now = datetime.datetime.now(edt.tzinfo)

                if edt >= now or (
                        not Speaker.objects.filter(event__eid=e.eid).exists()):
                    (count, thedict) = speakers = Speaker.objects.filter(
                        event__eid=e.eid).delete()
                    logger.debug("deleted: " + str(count) +
                                 " speakers, details: " + str(thedict))
                    for speaker in ep.speakers:
                        org = None
                        sobj = Speaker()

                        if speaker['org']:
                            try:
                                org = Organisation.objects.get(
                                    name=speaker['org'])
                            except ObjectDoesNotExist:
                                org = Organisation()

                            org.name = speaker['org']
                            org.save()

                        speaker = Speaker(full_name=speaker['name'],
                                          title=speaker['title'],
                                          role=speaker['role'],
                                          organisation=org,
                                          event=e)
                        speaker.save()