Esempio n. 1
0
    def get(self, username):
        events = []
        old_events = []
        user_to_view = None
        user_is_me = False

        #decode username from params
        username = username.replace("%20", " ")
        self.FirstInit()
        logging.info("username: " + username)
        user_to_view = models.get_user_by_username(username)
        if user_to_view:
            events = user_to_view.get_events(False)

            user = models.get_current_user()
            if user and user_to_view.user_id() == user.user_id():
                user_is_me = True
                old_events = user_to_view.get_events(
                    True
                )  # Security - don't let people see each other's histories

        template_values = {
            'user_to_view': user_to_view,
            'events': events,
            'old_events': old_events,
            'user_is_me': user_is_me
        }
        self.AddUserInfo(template_values)
        path = os.path.join(os.path.dirname(__file__), 'templates/user.htm')
        self.response.out.write(template.render(path, template_values))
Esempio n. 2
0
def add_category_handler(catalog_id):
    """Adds a category to a catalog
    Parameters:
    - catalog_id: integer id of catalog to which category belongs
    
    Returns:
    - HTTP response
    """
    user = models.get_current_user()
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not catalog_entity.user_can_edit(user):
        raise Unauthorized

    if flask.request.method == 'GET':
        # Render add category form
        return flask.render_template('addcategory.html',
                                     user=user,
                                     catalog=catalog_entity,
                                     category=None)

    elif flask.request.method == 'POST':
        # Handle new category submission from form
        new_category = models.Category(
            name=flask.request.form.get('name'),
            description=flask.request.form.get('description'),
            catalog=catalog_entity.key)
        new_category.put()
        models.wait_for(new_category)
        return flask.redirect('/catalog/%d' % catalog_entity.key.id())
Esempio n. 3
0
    def post(self):
        send_to_username = self.request.get('username')
        target_user = models.get_user_by_username(send_to_username)

        # how to send an email?
        user = models.get_current_user()
        if (user):
            message = mail.EmailMessage(
                sender=user.email,
                subject="Message via WorkWithMe from " + user.username)

            message.to = target_user.email  #"Albert Johnson <*****@*****.**>"
            message.body = self.request.get('message')

            m = models.CMessage(parent=user,
                                user_to=target_user,
                                content=message.body)
            m.put()

            message.send()

            logging.info("sender: " + message.sender)
            logging.info("subject: " + message.subject)
            logging.info("to: " + message.to)
            logging.info("body: " + message.body)

            self.response.out.write("OK")
        else:
            self.response.out.write("User Not Logged In")
Esempio n. 4
0
def edit_item_handler(catalog_id, item_id):
    """Edits an item in a catalog
    Parameters:
    - catalog_id: integer id of catalog to which item belongs
    - item_id: integer id of item to edit
    
    Returns:
    - HTTP response
    """
    user = models.get_current_user()
    catalog_id = int(catalog_id)
    catalog_entity = models.Catalog.get_by_id(catalog_id)
    item_id = int(item_id)
    item_entity = models.get_item_by_id(catalog_id, item_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not (item_entity):
        raise BadRequest('Could not find item with id %d!' % item_id)
    if not catalog_entity.user_can_edit(user):
        raise Unauthorized

    if flask.request.method == 'GET':
        # Render edit item form
        categories = models.get_categories(catalog_id)
        return flask.render_template('edititem.html',
                                     user=user,
                                     catalog=catalog_entity,
                                     categories=categories,
                                     category_id=item_entity.category.id(),
                                     item=item_entity)

    elif flask.request.method == 'POST':
        # Handle item edit from form
        picture_obj = flask.request.files.get('picture')
        picture_url = uploadfile.save_file(picture_obj)

        try:
            price = float(flask.request.form.get('price'))
        except:
            price = 0.00

        # Update entity
        item_entity.name = flask.request.form.get('name')
        item_entity.description = flask.request.form.get('description')
        item_entity.price = price
        item_entity.picture = picture_url

        # Allow possibility of item without category
        category_id = flask.request.form.get('category_id')
        if category_id:
            category_id = int(category_id)
        category_entity = models.get_category_by_id(catalog_id, category_id)
        if category_entity:
            item_entity.category = category_entity.key

        item_entity.put()
        models.wait_for(item_entity)
        return flask.redirect('/catalog/%d' % catalog_entity.key.id())
Esempio n. 5
0
def delete_category_handler(catalog_id, category_id):
    """Deletes a category in a catalog
    Parameters:
    - catalog_id: integer id of catalog to which category belongs
    - category_id: integer id of category to delete
    
    Returns:
    - HTTP response redirecting to catalog page
    """
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)
    category_id = int(category_id)
    category_entity = models.get_category_by_id(catalog_id, category_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not (category_entity):
        raise BadRequest('Could not find category with id %d!' % category_id)
    if not catalog_entity.user_can_edit(models.get_current_user()):
        raise Unauthorized

    models.delete_category(catalog_id, category_id)

    models.wait_for(category_entity)
    return flask.redirect('/catalog/%d' % catalog_entity.key.id())
Esempio n. 6
0
def add_catalog_handler():
    """Adds a catalog
    Returns:
    - HTTP response
    """
    user = models.get_current_user()

    if flask.request.method == 'GET':
        # Render add catalog form
        return flask.render_template('addcatalog.html',
                                     user=user,
                                     catalog=None)

    elif flask.request.method == 'POST':
        # Handle new catalog submission from form
        try:
            cover_picture_obj = flask.request.files.get('cover_picture')
            cover_picture_url = uploadfile.save_file(cover_picture_obj)

            new_catalog = models.Catalog(
                name=flask.request.form.get('name'),
                description=flask.request.form.get('description'),
                cover_picture=cover_picture_url,
                owner=user.key)
            new_catalog.put()
            models.wait_for(new_catalog)
            return flask.redirect('/catalog/%d' % new_catalog.key.id())
        except IOError:
            return ('Failed to add new catalog', 401)
Esempio n. 7
0
def render_admin_template(self, end_point, template_values):
	user = models.get_current_user(self)
	template_values['user'] = user
	if not user:
		template_values['title'] = "log in now please"
		render_response(self, render_template(self, "adminviews/notpermitted.html", template_values))
	else:
		render_response(self, render_template(self, end_point, template_values))
Esempio n. 8
0
    def post(self):
        n = self.request.get('who_name')
        if len(n) == 0:
            self.response.out.write('Please enter your name')
            return

        user = models.get_current_user()

        event = models.Event(parent=user)

        if user:
            event.user = user
            old_event = models.Event.all().ancestor(user).filter(
                "when_end >=", datetime.now(tz)).get()
            if old_event:
                old_event.when_end = datetime.now(tz)
                old_event.put()

        logging.info("incoming date_start: " + self.request.get('when_start'))
        date_start = fixDate(self.request.get('when_start'))
        date_end = fixDate(self.request.get('when_end'))

        if date_end < date_start:
            date_end = date_end + timedelta(days=1)

        event.who_name = self.request.get('who_name')
        event.what = self.request.get('what')
        event.when_start = date_start
        event.when_end = date_end
        event.skill = self.request.get('skill')
        event.skill_neighbor = self.request.get('skill_neighbor')

        lat = 0
        lon = 0
        if self.request.get('loc_geopt_lat') and self.request.get(
                'loc_geopt_lng'):
            lat = round(float(self.request.get('loc_geopt_lat')), 6)
            lon = round(float(self.request.get('loc_geopt_lng')), 6)
            event.lat = lat
            event.lon = lon

        place = models.get_place(lat, lon, self.request.get('where_name'))

        event.place = place
        event.place_name = self.request.get('where_name')
        event.where_addr = self.request.get('where_addr')
        event.where_detail = self.request.get('where_detail')

        logging.info("Computing Geoboxes for the Event")
        event.init_geoboxes()
        logging.info("OK")
        logging.info("Depositing Event into DB")
        event.put()
        logging.info("OK")

        logging.info("Sending OK Response")
        self.response.out.write('OK')
        logging.info("OK")
Esempio n. 9
0
    def get(self):
        self.FirstInit()
        template_values = {}

        lat = self.request.get('lat')
        old_event = None
        temp_place = None
        user = models.get_current_user()
        if user:
            if not user.username:
                self.redirect('/profile')
                return
            old_event = models.Event.all().filter(
                "user ="******"-when_end").get()

        if old_event == None:
            old_event = models.Event()
            temp_place = models.Place()
            temp_place.put()
            old_event.place = temp_place.key()

        if len(lat) > 0:

            old_event.place.place_name = self.request.get('name')
            old_event.place.lat = float(lat)
            old_event.place.lon = float(self.request.get('lon'))

            old_event.lat = float(lat)
            old_event.lon = float(self.request.get('lon'))
            old_event.where_addr = self.request.get('addr')

        if old_event.who_name == "None" or old_event.who_name == None:
            old_event.who_name = ""
        if old_event.what == "None" or old_event.what == None:
            old_event.what = ""
        if old_event.skill == "None" or old_event.skill == None:
            old_event.skill = ""
        if old_event.skill_neighbor == "None" or old_event.skill_neighbor == None:
            old_event.skill_neighbor = ""
        if old_event.where_detail == "None" or old_event.where_detail == None:
            old_event.where_detail = ""

        logging.info("----> %s " % old_event.what)

        if old_event:
            template_values.update({"old_event": old_event})

        self.AddUserInfo(template_values)
        path = os.path.join(os.path.dirname(__file__),
                            'templates/add_event2.htm')
        self.response.out.write(template.render(path, template_values))

        if temp_place:
            temp_place.delete()
Esempio n. 10
0
def logout_handler():
    """Logs a user out by clearing the session"""
    user = models.get_current_user()
    if not user:
        logging.info('Already logged out!')
        return flask.redirect(flask.url_for('main_page_handler'))

    # Reset the user's session.
    flask.session.clear()

    flask.flash('Logged out!')
    return flask.redirect(flask.url_for('main_page_handler'))
Esempio n. 11
0
    def get(self):
        self.FirstInit()
        template_values = {}

        user = models.get_current_user()
        if (user):
            my_events = user.get_events(False)
            template_values.update({"my_events": my_events})

        self.AddUserInfo(template_values)
        path = os.path.join(os.path.dirname(__file__), 'templates/browse2.htm')
        self.response.out.write(template.render(path, template_values))
Esempio n. 12
0
    def post(self):
        user = models.get_current_user()
        un = self.request.get("username")

        existing_user = models.get_user_by_username(un)
        if existing_user and (existing_user.user_id() != user.user_id()):
            self.response.out.write('A user with this username already exists')
            return

        user.username = un
        user.put()

        output = simplejson.dumps([user.username, "UpdateComplete"])

        self.response.out.write(output)
Esempio n. 13
0
    def post(self, username, action):
        if action == "closeout":
            user = models.get_current_user()
            target_user = models.get_user_by_username(username)
            if user.user_id() != target_user.user_id():
                self.response.out.write("You ain't got no right!")
                return False

            if user:
                events = models.Event.all().ancestor(target_user).filter(
                    "when_end >=", datetime.now(tz)).fetch(50)
                for event in events:
                    event.when_end = datetime.now(tz)
                    event.put()
        self.redirect("/user/" + username)
Esempio n. 14
0
def catalog_view_handler(catalog_id):
    """Renders a catalog page
     Parameters:
    - catalog_id: integer id of catalog to be rendered
    
    Returns:
    - HTTP response
    """
    user = models.get_current_user()
    catalog_id = int(catalog_id)
    catalog = models.get_catalog_by_id(catalog_id)
    if not catalog:
        raise BadRequest('Could not find catalog with id %d!' % catalog_id)
    categories = models.get_categories(catalog_id)
    return flask.render_template('catalog.html',
                                 user=user,
                                 catalog=catalog,
                                 categories=categories)
Esempio n. 15
0
def delete_catalog_handler(catalog_id):
    """Deletes a catalog
    Parameters:
    - catalog_id: integer id of catalog to delete
    
    Returns:
    - HTTP response redirecting to index
    """
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)

    # Check parameteres
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d!' % catalog_id)
    if not catalog_entity.user_can_edit(models.get_current_user()):
        raise Unauthorized

    models.delete_catalog(catalog_id)

    return flask.redirect('/')
Esempio n. 16
0
    def get(self, username):
        user_to_view = None
        user_is_me = False

        user_to_view = models.get_user_by_username(username)
        if user_to_view:
            events = user_to_view.get_events(False)
            old_events = user_to_view.get_events(True)

            user = models.get_current_user()
            if user and user_to_view.user_id() == user.user_id():
                user_is_me = True

        template_values = {
            'user_to_view': user_to_view,
            'user_is_me': user_is_me
        }
        self.AddUserInfo(template_values)
        path = os.path.join(os.path.dirname(__file__),
                            'templates/conversation.htm')
        self.response.out.write(template.render(path, template_values))
Esempio n. 17
0
def edit_catalog_handler(catalog_id):
    """Edits a catalog
    Parameters:
    - catalog_id: integer id of catalog to edit
    
    Returns:
    - HTTP response
    """
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)
    user = models.get_current_user()

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d!' % catalog_id)
    if not catalog_entity.user_can_edit(user):
        raise Unauthorized

    if flask.request.method == 'GET':
        # Render edit catalog form
        return flask.render_template('editcatalog.html',
                                     user=user,
                                     catalog=catalog_entity)

    elif flask.request.method == 'POST':
        # Handle catalog edit from form
        try:
            cover_picture_obj = flask.request.files.get('cover_picture')
            cover_picture_url = uploadfile.save_file(cover_picture_obj)
            # TODO: delete old picture
            catalog_entity.cover_picture = uploadfile.save_file(
                cover_picture_url)
            catalog_entity.name = flask.request.form.get('name')
            catalog_entity.description = flask.request.form.get('description')

            catalog_entity.put()
            models.wait_for(catalog_entity)
            return flask.redirect('/catalog/%d' % catalog_entity.key.id())
        except IOError:
            return ('Failed to edit catalog', 401)
Esempio n. 18
0
def edit_category_handler(catalog_id, category_id):
    """Edits a category in a catalog
    Parameters:
    - catalog_id: integer id of catalog to which category belongs
    - category_id: integer id of category to edit
    
    Returns:
    - HTTP response
    """
    user = models.get_current_user()
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)
    category_id = int(category_id)
    category_entity = models.get_category_by_id(catalog_id, category_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not (category_entity):
        raise BadRequest('Could not find category with id %d!' % category_id)
    if not catalog_entity.user_can_edit(user):
        raise Unauthorized

    if flask.request.method == 'GET':
        # Render edit category form
        return flask.render_template('editcategory.html',
                                     user=user,
                                     catalog=catalog_entity,
                                     category=category_entity)

    elif flask.request.method == 'POST':
        # Handle category edit from form
        category_entity.name = flask.request.form.get('name')
        category_entity.description = flask.request.form.get('description')

        category_entity.put()

        models.wait_for(category_entity)
        return flask.redirect('/catalog/%d' % catalog_entity.key.id())
Esempio n. 19
0
    def AddUserInfo(self, template_vars):
        user = models.get_current_user()
        greeting = ""
        if user:
            user_str = ""
            if user.username:
                user_str = " " + user.username
            if user.username == None:
                user.username = ""
                user.put()
            greeting = "<li><a href='%s'> Log Out</a></li>" % (
                users.create_logout_url(self.request.uri))
            template_vars.update({"username": user.username, "user": user})
        else:

            #for name, uri in providers.items():
            #            greeting += ('[<a href="%s">%s</a>]' % (
            #                users.create_login_url(federated_identity=uri), name))
            greeting = "<li><a href='%s'>Log In</a></li>" % users.create_login_url(
                self.request.uri)
            template_vars.update(
                {"login_url": users.create_login_url(self.request.uri)})

        template_vars.update({"greeting": greeting})
Esempio n. 20
0
def delete_item_handler(catalog_id, item_id):
    """Deletes an item in a catalog
    Parameters:
    - catalog_id: integer id of catalog to which item belongs
    - item_id: integer id of item to delete
    
    Returns:
    - HTTP response redirecting to catalog page
    """
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)
    item_id = int(item_id)
    item_entity = models.get_item_by_id(catalog_id, item_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not (item_entity):
        raise BadRequest('Could not find item with id %d!' % item_id)
    if not catalog_entity.user_can_edit(models.get_current_user()):
        raise Unauthorized

    models.delete_item(catalog_id, item_id)
    return flask.redirect('/catalog/%d' % catalog_entity.key.id())
Esempio n. 21
0
def main_page_handler():
    """Renders the main page, a list of the available catalogs"""
    user = models.get_current_user()
    catalogs = models.get_catalogs()
    logging.info(user)
    return flask.render_template('index.html', user=user, catalogs=catalogs)
Esempio n. 22
0
 def FirstInit(self):
     user = models.get_current_user()
     if user and user.username == None:
         self.redirect("/profile")
Esempio n. 23
0
def add_item_handler(catalog_id):
    """Adds an item to a catalog
    Parameters:
    - catalog_id: integer id of catalog to which item belongs
    
    Returns:
    - HTTP response
    """
    user = models.get_current_user()
    catalog_id = int(catalog_id)
    catalog_entity = models.get_catalog_by_id(catalog_id)

    # Check parameters
    if not catalog_entity:
        raise BadRequest('Could not find catalog with id %d' % catalog_id)
    if not catalog_entity.user_can_edit(user):
        raise Unauthorized

    if flask.request.method == 'GET':
        # Render add item form
        # Category_id may be passed in if adding item from category edit page
        category_id = flask.request.args.get('category_id')
        if category_id:
            category_id = int(category_id)

        categories = models.get_categories(catalog_id)
        return flask.render_template('additem.html',
                                     user=user,
                                     catalog=catalog_entity,
                                     category_id=category_id,
                                     categories=categories,
                                     item=None)

    elif flask.request.method == 'POST':
        # Handle new item submission from form
        picture_obj = flask.request.files.get('picture')
        picture_url = uploadfile.save_file(picture_obj)

        try:
            price = float(flask.request.form.get('price'))
        except:
            price = 0.00

        new_item = models.Item(
            name=flask.request.form.get('name'),
            description=flask.request.form.get('description'),
            price=price,
            picture=picture_url,
            owner=user.key,
            catalog=catalog_entity.key)

        # Allow possibility of putting items without category
        category_id = flask.request.form.get('category_id')
        if category_id:
            category_id = int(category_id)
        category_entity = models.get_category_by_id(catalog_id, category_id)
        if category_entity:
            new_item.category = category_entity.key

        new_item.put()
        models.wait_for(new_item)
        return flask.redirect('/catalog/%d' % catalog_entity.key.id())