def post(self):
		# --------------------------------------------------------------------
		# Retrive and Validate Request
		# --------------------------------------------------------------------
		# Default Values
		current_user = RoadMateUser.get_current_user()

		# --------------------------------------------------------------------
		# Validate Sesson
		# --------------------------------------------------------------------
		# if the current users in not logged in, then we redirect them through
		# a login page.
		if current_user is None:
			self.redirect(users.create_login_url(self.request.url))
			return
		target_user = None

		# --------------------------------------------------------------------
		# Retrieve user from GET Data, return the user
		# --------------------------------------------------------------------
		target_user_id = self.get_request_parameter('user', converter=int, default=None)
		target_user = RoadMateUser.get_by_id(target_user_id)

		# --------------------------------------------------------------------
		# Validate the user and POST Data
		# --------------------------------------------------------------------
		# if the target user does not exist in the datastore, then redirect
		# the user back to an error page.
		if target_user is None:
			self.error(404)
			return

		# if the user is trying to edit someone elses profile page,
		# then present them with an error page (403: Forbidden).
		if target_user != current_user:
			logging.error("User '%s' attempted to modify the profile of"\
				" user '%s'. Redirecting to error page." %
				(current_user.user.email, target_user.user.email))
			self.error(403)
			return

		# --------------------------------------------------------------------
		# Set the changed attribute and save the entity
		# --------------------------------------------------------------------

		if self.request.POST.has_key('editorId') and self.request.POST.has_key('value'):
			 # input text must not be "None" (the default NULL representation)
			 # and must not try to set a private attribute (which all start with '_')
			if not self.request.POST['value'] == "" and not self.request.POST['value'] == "None" and not self.request.POST['editorId'].startswith('_'):
				setattr(target_user, self.request.POST['editorId'], self.request.POST['value'])# update that attribute
				target_user.save() # save the record
				self.response.out.write(escape(getattr(target_user, self.request.POST['editorId']))) # print that value to the page
			else: # input text is "None" or empty string, return "None"
				self.response.out.write("None")
		else: # values are missing
			self.error(403)
Exemple #2
0
    def get(self):
        ## --------------------------------------------------------------------
        # Retrive Session Info and Request Data
        # --------------------------------------------------------------------
        # Session Values
        current_user = RoadMateUser.get_current_user()

        # Request Values
        target_user_id = self.get_request_parameter("user", converter=int, default=None)

        # Datastore Values
        target_user = None
        if target_user_id > 0:
            target_user = RoadMateUser.get_by_id(target_user_id)

            # --------------------------------------------------------------------
            # Validate Session and Request
            # --------------------------------------------------------------------
        if target_user is None:
            if current_user is None:
                self.redirect(users.create_login_url(self.request.url))
                return
            else:
                # if a target user has not be specified, but the user is
                # logged in, then redirect them to their profile page.
                logging.info("No target user specified. Redirecting to" " current user's profile page.")

                self.redirect("/profile?user=%s" % current_user.key().id())
                return
                # --------------------------------------------------------------------
                # Generate Template Values
                # --------------------------------------------------------------------
        template_values = super(ProfilePageHandler, self).generate_template_values(self.request.url)

        # because this page requires the user to be logged in, if they logout
        # we redirect them back to the home page.
        template_values["logout_url"] = users.create_logout_url("/")

        template_values["my_rides"] = list(target_user.rides)
        template_values["target_user"] = target_user  # only used if not current user

        # --------------------------------------------------------------------
        # Render and Serve Template
        # --------------------------------------------------------------------
        page_path = os.path.join(os.path.dirname(__file__), "profile.html")
        self.response.out.write(template.render(page_path, template_values))
Exemple #3
0
	def get(self):
		# --------------------------------------------------------------------
		# Retrive Session Info and GET Data
		# --------------------------------------------------------------------
		# Session Values
		current_user = RoadMateUser.get_current_user()

		# Request Values
		target_user_id = self.get_request_parameter('id', converter=int, default=None)

		# Datastore Values
		target_user = RoadMateUser.get_by_id(target_user_id)

		# --------------------------------------------------------------------
		# Validate Request
		# --------------------------------------------------------------------
		# if the target ride does not exist in the datastore, then redirect
		# the user back to the home page.
		if target_user is None:
			self.error(404)
			return
		# --------------------------------------------------------------------
		# Generate and Store Template Values
		# --------------------------------------------------------------------
		template_values = super(ViewFeedbackPageHandler, self
			).generate_template_values(self.request.url)

		template_values['target_user'] = target_user
		template_values['feedback_list'] = list(target_user.feedback_received)
		template_values['count_positive'] = target_user.feedback_received.filter('value=', 1).count()
		template_values['count_neutral'] = target_user.feedback_received.filter('value=', 0).count()
		template_values['count_negative'] = target_user.feedback_received.filter('value=', -1).count()

		# --------------------------------------------------------------------
		# Render and Serve Template
		# --------------------------------------------------------------------
		page_path = os.path.join(os.path.dirname(__file__), "feedback.html")
		self.response.out.write(template.render(page_path, template_values))
Exemple #4
0
	def post(self):
		# --------------------------------------------------------------------
		# Retrive Session Info and Request Data
		# --------------------------------------------------------------------
		# Session Values
		current_user = RoadMateUser.get_current_user()

		# Request Values
  		ride_id = self.get_request_parameter('ride', converter=int, default=None)
  		target_user_id = self.get_request_parameter('on', converter=int, default=None)

  		# Retrieve the instances
  		ride = Ride.get_by_id(ride_id)
   		target_user = RoadMateUser.get_by_id(target_user_id)
   		feedback_form = FeedbackForm()
		target_user_role = '' # empty by default


		# --------------------------------------------------------------------
		# Validate Session and Request
		# --------------------------------------------------------------------
		# if the current users in not logged in, then we redirect them through
		# a login page.
  		if current_user is None:
			self.redirect(users.create_login_url(self.request.url))
			return
		# if the target user is not valid then error
		if target_user is None or ride is None:
			self.error(403) # forbidden
			return
		#if the current user has already placed feedback on the recipient for this ride
		if ride.feedbackmessages.filter('author =', current_user).filter('recipient =', target_user).count() >= 1:
			self.redirect("/feedback?id=%s" % target_user.key().id()) # redirect to the recipient's feedback page
			return


		# if the target user is not the driver, and the current user is not a passenger
		# or vice versa, then error
		if ride.is_passenger(current_user) and (target_user == ride.owner):
			target_user_role = 'passenger'
		elif ride.is_passenger(target_user) and (current_user == ride.owner):
			target_user_role = 'driver'
		else: # then the relationship is not valid
			self.error(403) # forbidden
			return


## not working
##		# --------------------------------------------------------------------
##		# Retrive POST Data
##		# and create a new instance of the form to validate the data
##		# --------------------------------------------------------------------
##		feedback_data = { 'author': current_user, 'ride':ride, 'recipient':target_user, 'role': target_user_role}
##
##		feedback_form = FeedbackForm(
##			data=self.request.POST,
##			initial=feedback_data
##		) # create the form to validate
##		print(feedback_form['ride'].data)
##
##		# --------------------------------------------------------------------
##		# Validate POST Data
##		# --------------------------------------------------------------------
##		# if there are errors in the form, then re-serve the page with the
##		# error values highlighted.
##		if not feedback_form.is_valid():
##			# ----------------------------------------------------------------
##			# Generate Template Values
##			# ----------------------------------------------------------------
##			template_values = BaseRequestHandler.generate_template_values(self,
##				self.request.url)
##
##			# because this page requires the user to be logged in, if they
##			# logout we redirect them back to the home page.
##			template_values['logout_url'] = users.create_logout_url("/")
##
##			# --------------------------------------------------------------------
##			# Set up the page 'passenger' or 'driver' display
##			# --------------------------------------------------------------------
##			target_user_role = 'driver' # by default
##			if ride.is_passenger(target_user):
##				target_user_role = 'passenger'
##
##			# --------------------------------------------------------------------
##			# Generate Template Values
##			# --------------------------------------------------------------------
##			template_values = super(CreateFeedbackPageHandler, self
##				).generate_template_values(self.request.url)
##
##			# because this page requires the user to be logged in, if they logout
##			# we redirect them back to the home page.
##			template_values['logout_url'] = users.create_logout_url("/")
##			template_values['owner'] = current_user
##			template_values['target_user'] = target_user
##			template_values['ride'] = ride
##			template_values['feedback_form'] = feedback_form
##			template_values['target_user_role'] = target_user_role
##
##			# ----------------------------------------------------------------
##			# Render and Serve Template
##			# ----------------------------------------------------------------
##			print(feedback_form.errors)
##			page_path = os.path.join(os.path.dirname(__file__), "feedback_create.html")
##			self.response.out.write(template.render(page_path, template_values))
##			return

		feedback_message = FeedbackMessage(
						 ride=ride,
						 author=current_user,
						 recipient=target_user,
						 role=target_user_role,
				   		 value=int(self.request.POST['value']),
				   		 text=escape(self.request.POST['text'])
						 ) # not validated

		feedback_message.put() # save the new Message
		self.redirect("/feedback?id=%s" % target_user.key().id()) # redirect to the recipient's profile page or feedback page
Exemple #5
0
	def get(self):
		# --------------------------------------------------------------------
		# Retrive Session Info and Request Data
		# --------------------------------------------------------------------
		# Session Values
		current_user = RoadMateUser.get_current_user()

		# Request Values
  		ride_id = self.get_request_parameter('ride', converter=int, default=None)
  		target_user_id = self.get_request_parameter('on', converter=int, default=None)

  		# Retrieve the instances
  		ride = Ride.get_by_id(ride_id)
   		target_user = RoadMateUser.get_by_id(target_user_id)
	  	feedback_form = FeedbackForm()
		target_user_role = '' # empty by default


		# --------------------------------------------------------------------
		# Validate Session and Request
		# --------------------------------------------------------------------
		# if the current users in not logged in, then we redirect them through
		# a login page.
  		if current_user is None:
			self.redirect(users.create_login_url(self.request.url))
			return
		# if the target user is not valid then error
		if target_user is None or ride is None:
			self.error(403) # forbidden
			return

		# if the target user is not the driver, and the current user is not a passenger
		# or vice versa, then error
		if ride.is_passenger(current_user) and (target_user == ride.owner):
			target_user_role = 'driver'
		elif ride.is_passenger(target_user) and (current_user == ride.owner):
			target_user_role = 'passenger'
		else: # then the relationship is not valid
			self.error(403) # forbidden
			return

		# --------------------------------------------------------------------
		# Generate Template Values
		# --------------------------------------------------------------------
		template_values = super(CreateFeedbackPageHandler, self
			).generate_template_values(self.request.url)

		# because this page requires the user to be logged in, if they logout
		# we redirect them back to the home page.
		template_values['logout_url'] = users.create_logout_url("/")
		template_values['owner'] = current_user
		template_values['target_user'] = target_user
		template_values['ride'] = ride
		template_values['feedback_form'] = feedback_form
		template_values['target_user_role'] = target_user_role

		# --------------------------------------------------------------------
		# Render and Serve Template
		# --------------------------------------------------------------------
		page_path = os.path.join(os.path.dirname(__file__), "feedback_create.html")
		self.response.out.write(template.render(page_path, template_values))