def get_member_for_trip(trip_key, email_address):
	standardized_email_address = standardize_email_address(email_address)
	tripMember = memcache.get("trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address, namespace='Member')
	if tripMember:
		logging.info('Memcache: Retrieved Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address)
	if not tripMember:
		key = db.Key.from_path('Trip', trip_key.id(), 'Member', standardized_email_address)
		tripMember = db.get(key)
		if tripMember:
			logging.info('Datastore: Retrieved Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address)
			tripMember.cache_set()
		else:
			# Consider: I'm not sure that creating a new member is the way to do this!!!
			# Consider: Changing this to returning null and then check for side effects.
			#
			# Let me explain what happen in this bug here instead of issue tracker (because I'm on a plane)
			#
			# I added [email protected] and added a transaction for him.
			# Then Scott deleted [email protected] and added [email protected]
			# This left an orphan transaction for the email address [email protected]
			# The leaderboard_handler then got the display name for [email protected] for that transaction
			# Scott was the person logged in at the time.
			# When this code ran it 
			
			logging.info('New: Created Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address)
			tripEntity = trip.get_trip(trip_key.id())
			tripMember = tripEntity.create_member(standardized_email_address)
	return tripMember	
	def post(self):
		userPreference = userprefs.get_userprefs()
		try:
			idSelected = self.request.get('current-trip-select')
			if idSelected != 0:
				newCurrentTrip = trip.get_trip(int(idSelected))
				userPreference.current_trip = newCurrentTrip
				userPreference.put()
		except:
			# User entered a value that wasn't legal.  Ignore for now.
			logging.warning("Error: Trip not set")
		self.redirect('/options')
	def post(self):
		currentUserprefs = userprefs.get_userprefs()
		current_trip_name = self.request.get('trip_name')
		if len(current_trip_name) == 0:
			current_trip_name = 'Empty trip name'
		trip_key_id = int(self.request.get('trip_key_id', default_value=0))
		if trip_key_id != 0:
			current_trip = trip.get_trip(trip_key_id)
			current_trip.trip_name = current_trip_name
			current_trip.delete_non_creator_members()
		else:
			current_trip = trip.Trip(trip_name = current_trip_name)
		current_trip.put()
		currentUserprefs.current_trip = current_trip
		currentUserprefs.put()
		
		# Update the creator Member data
		creatorMember = member.get_member_for_trip(current_trip.key(), current_trip.created_by_user.email())
		creatorMember.display_name = self.request.get('creator_display_name')
		creatorMember.email_address = member.standardize_email_address(self.request.get('creator_email_address', default_value=''))
		creatorMember.phone_number = member.standardize_phone_number(self.request.get('creator_phone_number'))
		creatorMember.put()
		
		displayNameValues=self.request.get_all('display_name')
		emailAddressValues=self.request.get_all('email_address')
		phoneNumberValues=self.request.get_all('phone_number')
		for i in range(len(displayNameValues)):
			try:
				if len(emailAddressValues[i]) == 0:
					continue
				# Make the key name the email address
				standardized_email_address = member.standardize_email_address(emailAddressValues[i])
				newMember = member.get_member_for_trip(current_trip.key(), standardized_email_address)
				newMember.display_name = displayNameValues[i]
				newMember.email_address = standardized_email_address
				newMember.phone_number = member.standardize_phone_number(phoneNumberValues[i])
				newMember.put();
				# logging.info("Successfully added member.")
				# logging.info("i=" + str(i) + "  displayName = " + displayNameValues[i])
				# logging.info("i=" + str(i) + "  emailAddressValues = " + emailAddressValues[i].lower())
				# logging.info("i=" + str(i) + "  phoneNumberValues = " + phoneNumberValues[i])
			except:
				logging.info("Error: Did not add member at index " + str(i) + ".")
		
		
		# TODO: Clean up the transactions!!!!
		# If an email address got removed then the transactions for the deleted email must go!
		# That is one solution to this problem.
		
		self.redirect('/options')
	def get(self):
		self.response.headers['Content-Type'] = 'text/html'
		user = users.get_current_user()
		# Set default values for the template data (that will be used if this is a new trip)
		creator_name = user.nickname()
		creator_email = member.standardize_email_address(user.email())
		creator_phone = ""
		trip_name = ""
		trip_key_id = 0
		trip_members = []
		can_delete = False
		# Determine if this is an edit or a new trip
		tripId = self.request.get('id')
		if tripId and int(tripId) != 0: # Shouldn't ever send 0, but just in case my other code glitches :)
			editTrip = trip.get_trip(int(tripId))
			if editTrip.is_a_member():
				# OK you are indeed in the requested trip id, you may edit.  Just checking.
				# Fill in fields with existing data
				trip_name = editTrip.trip_name
				trip_key_id = editTrip.key().id()
				can_delete = editTrip.created_by_user == user
				tripCreatorMember = member.get_member_for_trip(editTrip.key(), member.standardize_email_address(editTrip.created_by_user.email()))
				creator_name = tripCreatorMember.display_name
				creator_email = tripCreatorMember.email_address
				creator_phone = tripCreatorMember.phone_number
				
				
				allMembers = editTrip.get_all_members()
				for aMember in allMembers:
					if aMember.email_address != member.standardize_email_address(editTrip.created_by_user.email()):
						trip_members.append(aMember)
			else:
				self.response.out.write("You do not appear to have access to modify Trip id " + tripId)
				return

		values = {'creator_name': creator_name, 'creator_email': creator_email, 'creator_phone': creator_phone,
				  'trip_name': trip_name, 'trip_key_id': trip_key_id,
				  'trip_members': trip_members,
				  'can_delete': can_delete}
		self.response.out.write(template.render('templates/trip.html', values))
示例#5
0
def edit_trip(trip_id):

    if not auth.is_logged_in(session):
        return redirect_to_login(STRINGS['SIGNED_OUT'])
    if not trip.belongs_to(trip_id, session['user_id']):
        return redirect_to_home(STRINGS['NOT_AUTHORIZED'])

    city_name = trip.get_city(trip_id)['city']
    app.logger.debug("city_name: %s" % city_name)
    attraction_id = trip.get_attraction_id(city_name)
    now = dt.datetime.now().date(
    )  # Thanks https://stackoverflow.com/a/3279015/5434744
    trip_ref = trip.get_trip(trip_id)
    trip_start = trip_ref['start_date']
    trip_in_past = now > trip_start

    return render_template("trips/edit_trip.html",
                           session=session,
                           trip=trip_ref,
                           attractions=attraction_id,
                           trip_in_past=trip_in_past,
                           activities=trip.get_activities(trip_id))