示例#1
0
def login_view(request):
    try:
        user = User.objects.get(fb_id=request.POST['id'])
        if user.check_access_token(request.POST['access_token']):
            user.backend = 'mongoengine.django.auth.MongoEngineBackend'
            login(request, user)
            request.session.set_expiry(60 * 60 * 24 * 30) # 1 month timeout
            return HttpResponse(model_encode(user), mimetype="application/json")
        else:
            return HttpResponse('login failed')
    except DoesNotExist:
		data = parser.parse(request.POST.urlencode())
		if not data.get('email'):
			data['email'] = str(data['id']) + '@facebook.com'
		if not data.get('username'):
			data['username'] = data['email']
		if not data.get('bio'):
			data['bio'] = ''
		user = User(
			username = data['email'],
			name = data['name'],
			first_name = data['first_name'],
			last_name = data['last_name'],
			fb_id = data['id'],
			fb_access_token = data['access_token'],
			fb_link = data['link'],
			fb_username = data['username'],
			bio = data['bio'],
			email = data['email'],
			timezone = data['timezone'],
			locale = data['locale'],
			gender = data['gender']
		)
		imgdata = urllib2.urlopen('https://graph.facebook.com/'+str(data['id'])+'/picture?type=large')
		image_type,width,height = getImageInfo(imgdata)
		user.picture_width = width
		user.picture_height = height
		user.save()
		if data.get('hometown'):
			user.add_property('location', data['hometown'], 650)
		if data.get('location'):
			user.add_property('location', data['location'], 750)
		for i in range(len(data['work'])):
			work_score = 200 * 3/(min(i,4)+1)
			user.add_property('work', data['work'][i], work_score)
		for i in range(len(data['education'])):
			user.add_property('school', data['education'][i], 680*(4+i)/4)
		for i in range(len(data['inspirational_people'])):
			user.add_property('inspirational_person', data['inspirational_people'][i], 200)
		user.set_default_featured_properties()
		return HttpResponse(model_encode(user), mimetype="application/json")
示例#2
0
def user_availability_create(request):
	#try:
	data = parser.parse(request.POST.urlencode())
	user = get_current_user(request)
	if data.get('availability'):
		availability_raw = data['availability']['']
	else:
		availability_raw = []
	availability = []
	if not isinstance(availability_raw, list):
		availability_raw = [availability_raw]
	for available_raw_item in availability_raw:
		avail_data = string.split(available_raw_item, '_')
		if avail_data[1] == 'morning':
			time_array = [16, 18, 20, 22]
		elif avail_data[1] == 'afternoon':
			time_array = [24, 26, 28, 30]
		elif avail_data[1] == 'night':
			time_array = [32, 34, 36, 38]
		elif avail_data[1] == 'late-night':
			time_array = [40, 42, 44]
		elif avail_data[1] == 'night-owl':
			time_array = [46, 48, 50]
		for time in time_array:
			availability.append({
				'day': int(avail_data[0]),
				'start_time': int(time),
				'end_time': int(time) + 2
			})

	availability_array = []
	for available_slot in availability:
		newSlot = available_slot
		newSlot['start_time'] -= user.timezone * 2
		newSlot['end_time'] -= user.timezone * 2
		if newSlot['start_time'] < 0:
			newSlot['day'] = newSlot['day'] - 1
			newSlot['start_time'] = 48 + newSlot['start_time']
		if newSlot['end_time'] < 0:
			newSlot['end_time'] = 48 + newSlot['end_time']
		if newSlot['start_time'] > 47:
			newSlot['start_time'] = newSlot['start_time'] - 48
			newSlot['day'] = newSlot['day'] + 1
		if newSlot['end_time'] > 47:
			newSlot['end_time'] = newSlot['end_time'] - 48
		if newSlot['day'] < 0:
			newSlot['day'] = 7 + newSlot['day']
		if newSlot['day'] > 6:
			newSlot['day'] = newSlot['day'] - 7
		avail_document = UserAvailability(
			day = newSlot['day'],
			start_time = newSlot['start_time'],
			end_time = newSlot['end_time']
		)
		availability_array.append(avail_document)
	user.availability = availability_array
	user.save()
	return HttpResponse(model_encode(user.availability_tz()), mimetype="application/json")
示例#3
0
def chats_upcoming(request):
	try:
		cuser = get_current_user(request)
		chats = Chat.objects(
			Q(user_from=cuser) | Q(user_to=cuser)
		).order_by('-start_datetime').limit(3)
		return HttpResponse(model_encode(chats), mimetype="application/json")
	except DoesNotExist:
		return HttpResponse([])
	def render_with_layout(self, layout, page, pageVars, options, request):
		backboneTemplates = self.get_backbone_templates(options['withBackboneTemplates'])
		c = {
			'innerBlock': pyRenderer.render_path('app/templates/'+page+'.mustache', pageVars),
			'javascriptBlock': javascript,
			'STATIC_URL': settings.STATIC_URL
		}
		c.update(csrf(request))
		try:
			user = get_current_user(request)
			user.availability = user.availability_tz()
			if user:
				c['currentUser'] = model_encode(user)
		except Exception:
			c['currentUser'] = '******'
		return pyRenderer.render_path('app/templates/'+layout+'.mustache', c) + backboneTemplates
示例#5
0
def requests_create(request):
	try:
		data = parser.parse(request.POST.urlencode())
		if not data.get('times'):
			return HttpResponse('Missing times')
		if not data.get('user_id'):
			return HttpResponse('Missing User Id')
		if not data.get('message'):
			return HttpResponse('Missing message')

		times = data['times']['']

		returnArray = []
		
		user = get_current_user(request)
		user2 = User.objects(id=data['user_id'])[0]

		for time in times:
			r = ChatRequest(
				request_from = user,
				request_to = user2,
				start_datetime = datetime.datetime.utcfromtimestamp(time/1000),
				end_datetime = datetime.datetime.utcfromtimestamp(time/1000) + datetime.timedelta(minutes=30),
				message = request.POST['message']
			)
			r.save()
			returnArray.append(r)

		user.requests_out = user.requests_out + returnArray;
		user2.requests_in = user.requests_in + returnArray;

		user.save()
		user2.save()

		return HttpResponse(model_encode(returnArray))
	except DoesNotExist:
		return HttpResponse('Users not found')
示例#6
0
def feed(request):
	try:
		users = User.objects
		return HttpResponse(model_encode(users), mimetype="application/json")
	except DoesNotExist:
		return HttpResponse('Cannot get your feed. Sorry!')
示例#7
0
def user_open_schedule(request,uid):
	#try:
	returnArray = []

	user = User.objects(id=uid)[0]
	current_user = get_current_user(request)
	
	today = datetime.datetime.utcnow()

	# Get all chats schedule by both users. Throw out times that overlap
	chats_this_week = []
	chats_this_week.extend(user.chats_this_week())
	chats_this_week.extend(current_user.chats_this_week())

	# Get current users outgoing requests. Do not allow double requests at
	# a time
	c_user_out_requests = current_user.outgoing_requests_this_week()

	# Get current users incoming requests. Add as meta data so users do not
	# double book.
	c_user_in_requests = current_user.incoming_requests_this_week()

	# Get target users incoming requests. Add as meta data to show how
	# competitive a certain time spot is.
	user_in_requests = user.incoming_requests_this_week()

	# Get target users outgoing requests. Do not allow users to stack
	# these as it may lead to a confusing cycle.
	user_out_requests = user.outgoing_requests_this_week()

	# Get next 7 days availability times as datetime UTC objects
	user_availability = user.availability_this_week()

	# Move through all the users' usually available slots and find the
	# times that will actually work this week.	

	for available_slot in user_availability:

		addMeta = True
		
		additionalMetaData = {
			'time': available_slot,
			'time_slot_competition': 0,
			'request_overlap': []
		}

		for chat in chats_this_week:
			if chat.start_datetime == available_slot:
				addMeta = False 

		for chat_request in c_user_out_requests:
			if chat_request.start_datetime == available_slot:
				addMeta = False

		for chat_request in user_out_requests:
			if chat_request.start_datetime == available_slot:
				addMeta = False

		for chat_request in c_user_in_requests:
			if chat_request.start_datetime == available_slot:
				additionalMetaData['request_overlap'].append(chat_request)

		for chat_request in user_in_requests:
			if chat_request.start_datetime == available_slot:
				additionalMetaData['time_slot_competition'] += 1
		
		if addMeta:
			returnArray.append(additionalMetaData)

	return HttpResponse(model_encode(returnArray))