Exemplo n.º 1
0
def messages():
    if not session.get("logged_in"):
        return login()

    conversation = Conversation.get_by_id(int(request.form["conversation"]))
    conversation.put()
    recipient = conversation.user1
    if session["user_id"] == recipient:
        recipient = conversation.user2
    print "popopo"
    notification = Notification(user=conversation.user1,
                                body="New Message",
                                ntype="new-message",
                                item=conversation.item,
                                item_category="",
                                noticed=False,
                                link="/view_conversations/" +
                                str(conversation.key.id()))
    notification.put()
    print "pop-" + notification.body + "-pop"

    message = Message(sender=session["user_id"],
                      recipient=recipient,
                      body=request.form["message_body"],
                      conversation=conversation.key.id())
    message.put()

    return "success"
Exemplo n.º 2
0
def clear_notifications():
    if not session.get("logged_in"):
        return "error", 500
    notifications = Notification.query(Notification.user == session["user_id"])
    for notification in notifications:
        notification.key.delete()
    return "success"
Exemplo n.º 3
0
def view_me():

    user = User.get_by_id(session["user_id"])

    if request.method == "POST":
        return render_template("tsktsk.html")
        review = Review(rating=int(request.form["rating"]),
                        reason=request.form["reason"],
                        user=user_id,
                        reviewer=session["user_id"],
                        flagged=False)
        review.put()

        update_user_rating(user_id, int(request.form["rating"]))

    sold_offers = []
    sold_items = Item.query(Item.seller_id == session["user_id"],
                            Item.sold == True)
    for item in sold_items:
        temp_offer = Offer.query(Offer.item == item.key.id()).get()
        sold_offers.append(temp_offer)

    purchased_offers = Offer.query(Offer.confirmed == True,
                                   Offer.bidder == session["user_id"])
    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)
    return render_template("me.html",
                           user=user,
                           sold_offers=sold_offers,
                           purchased_offers=purchased_offers,
                           notifications=notifications)
Exemplo n.º 4
0
    def _get_inline_comments(self, id, desc, body):
        ret = None
        username = util.get_regex_match(body, ">([^>]+) added inline comments")

        # found inline comments
        if not util.should_ignore_username(username):
            short_message = "{} added inline comments to {}.".format(
                username, id)
            long_message = "@{} added inline comments to *{}: {}*.".format(
                username, id, desc)
            soup = BeautifulSoup(body, 'html.parser')
            comment_divs = soup.select("div > strong + div > div > div > div")
            files = {}
            comments = []

            # try to find any actual comments
            for div in comment_divs:
                # filter out those with color - those are old comments
                comments = [
                    comment.text for comment in div.select("p")
                    if 'color' not in comment.parent['style']
                ]

            for comment in comments:
                long_message = "{}\n```{}```".format(long_message, comment)

            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 5
0
    def _get_request_changes(self, id, desc, body):
        ret = None
        username = util.get_regex_match(
            body, ">([^>]+) requested changes to this revision.")

        if not util.should_ignore_username(username):
            short_message = "{} requested changes to {}.".format(username, id)
            long_message = "@{} requested changes to {}: {}.".format(
                username, id, desc)
            ret = Notification(id, desc, short_message, long_message)
        elif 'This revision now requires changes to proceed' in body:
            short_message = "{} requires changes to proceed.".format(id)
            long_message = "*{}: {}* requires changes to proceed.".format(
                id, desc)
            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 6
0
def delete_item(item_id):
    if not session.get("logged_in"):
        return login()

    item_id = int(item_id)

    item = Item.get_by_id(item_id)

    if item.seller_id != session["user_id"]:
        return "oops", 500

    previous_notifications = Notification.query(Notification.item == item_id)

    notification_body = item.name + " removed"
    for prev_not in previous_notifications:

        notification = Notification(user=prev_not.user,
                                    body=notification_body,
                                    ntype="item-removed",
                                    item=item.key.id(),
                                    item_category=item.category,
                                    noticed=False,
                                    link="/browse/" + item.category)
        notification.put()
        prev_not.key.delete()

    offers = Offer.query(Offer.item == item.key.id())

    conversation = Conversation.query(Conversation.item == item_id).get()
    if conversation:
        messages = Message.query(Message.conversation == conversation.key.id())
        for message in messages:
            message.key.delete()
        conversation.key.delete()

    for offer in offers:
        offer.key.delete()

    item_tags = Item_Tag.query(Item_Tag.item == item.key.id())

    for item_tag in item_tags:
        item_tag.key.delete()

    item.key.delete()

    return "success"
Exemplo n.º 7
0
    def _get_ready_to_land(self, id, desc, body):
        ret = None

        if 'This revision is now accepted and ready to land.' in body:
            short_message = "{} is now accepted and ready to land.".format(id)
            long_message = "*{}: {}* is now accepted and ready to land.".format(
                id, desc)
            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 8
0
    def _get_new_revision(self, id, desc, body):
        ret = None
        username = util.get_regex_match(body, ">([^>]+) created this revision")

        if not util.should_ignore_username(username):
            short_message = "{} created a new revision - {}: {}.".format(
                username, id, desc)
            long_message = "@" + short_message
            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 9
0
    def _get_task_move(self, id, desc, body):
        ret = None
        username = util.get_regex_match(body, ">([^>]+) moved this task")
        movement = util.get_regex_match(body, "moved this task ([^\.]+)")

        if not util.should_ignore_username(username):
            short_message = "{} moved {} {}.".format(username, id, movement)
            long_message = "@{} moved *{}: {}* {}.".format(
                username, id, desc, movement)
            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 10
0
def view_conversations():
    if not session.get("logged_in"):
        return login()

    conversations = Conversation.query(
        ndb.OR(Conversation.user1 == session["user_id"], Conversation.user2 ==
               session["user_id"])).order(-Conversation.time)

    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)

    return render_template("conversations.html",
                           conversations=conversations,
                           notifications=notifications)
Exemplo n.º 11
0
def view_conversation(conversation_id):
    if not session.get("logged_in"):
        return login()

    conversation_id = int(conversation_id)
    conversation = Conversation.get_by_id(conversation_id)
    messages = Message.query(Message.conversation == conversation_id).order(
        Message.time)

    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)

    return render_template("view_conversation.html",
                           messages=messages,
                           conversation=conversation,
                           notifications=notifications)
Exemplo n.º 12
0
    def _get_comments(self, id, desc, body):
        ret = None
        username = util.get_regex_match(body, ">([^>]+) added a comment.")

        if not util.should_ignore_username(username):
            short_message = "{} added a comment to {}.".format(username, id)
            long_message = "@{} added a comment to *{}: {}*.".format(
                username, id, desc)
            soup = BeautifulSoup(body, 'html.parser')
            paragraphs = soup.select("div > div > p")
            if len(paragraphs) > 0 and len(paragraphs[0].parent.text) > 0:
                long_message = "{}\n```{}```".format(long_message,
                                                     paragraphs[0].parent.text)

            ret = Notification(id, desc, short_message, long_message)

        return ret
Exemplo n.º 13
0
def browse(category_id):
    if not session.get("logged_in"):
        return login()

    items = Item.query(Item.category == category_id, Item.sold == False)

    for item in items:
        item.item_id = item.key.id()

    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)

    category = Category.get_by_id(category_id)

    return render_template("browse.html",
                           items=items,
                           category=category,
                           category_id=category_id,
                           notifications=notifications)
Exemplo n.º 14
0
def my_items():
    if not session.get("logged_in"):
        return login()

    items = Item.query(Item.seller_id == session.get("user_id"),
                       Item.sold == False)

    for item in items:
        item.item_id = item.key.id()

    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)

    offers = Offer.query(Offer.bidder == session['user_id'],
                         Offer.confirmed == False)

    return render_template("my_items.html",
                           items=items,
                           notifications=notifications,
                           offers=offers)
Exemplo n.º 15
0
def home():
    if not session.get("logged_in"):
        return login()

    the_categories = Category.query()
    # categories=[]
    # num_categories=0
    # for category in the_categories :
    #     categories.append(category)
    #     num_categories+=1

    # dividers=[2,4,3]
    # category_lists=[]
    # count=2
    # index=0
    # current_list=[]
    # left_over=False
    # for category in categories :
    #     left_over=True
    #     current_list.append(category)
    #     count-=1
    #     if count==0 :
    #         category_lists.append((current_list,100.0/len(current_list)))
    #         current_list=[]
    #         index+=1
    #         count=dividers[index]
    #         left_over=False

    # if left_over :
    #     category_lists.append((current_list,100.0/len(current_list)))

    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)
    # return render_template("home2.html",
    #                         category_lists=category_lists,
    #                         notifications=notifications)
    return render_template("home.html",
                           categories=the_categories,
                           notifications=notifications)
Exemplo n.º 16
0
def offers(offer_id):
    if not session.get("logged_in"):
        return login()

    if request.method == "GET":
        return "oops", 404
    offer_id = int(offer_id)
    offer = Offer.get_by_id(offer_id)
    if not offer:
        return page_was_not_found("Offer has been removed")
    item = Item.get_by_id(offer.item)

    if request.form["reason"] == "accept":
        if item.seller_id != session["user_id"]:
            return "uninformative error", 404

        offer.accepted = True
        offer.put()

        previous_notification = Notification.query(
            Notification.user == offer.bidder,
            Notification.item == item.key.id(),
            Notification.ntype == "accepted-offer").get()
        if previous_notification:
            previous_notification.key.delete()
        notification_body = session["first_name"] + " " + session[
            "last_name"] + " has accepted your offer for their " + item.name + " posting."
        notification = Notification(user=offer.bidder,
                                    body=notification_body,
                                    ntype="accepted-offer",
                                    item=item.key.id(),
                                    item_category=item.category,
                                    noticed=False,
                                    link="/browse_item/" + str(item.key.id()))
        notification.put()

        conversation = Conversation(user1=session["user_id"],
                                    user2=offer.bidder,
                                    subject="Arranging Sale",
                                    item=item.key.id(),
                                    item_name=item.name,
                                    read1=True,
                                    read2=True)

        conversation.put()

        return "success"

    if request.form["reason"] == "reject":
        if item.seller_id != session["user_id"]:
            return "uninformative error", 404

        offer.accepted = True
        offer.put()
        previous_notification = Notification.query(
            Notification.user == offer.bidder,
            Notification.item == item.key.id(),
            Notification.ntype == "accepted-offer").get()
        if previous_notification:
            previous_notification.key.delete()
        notification_body = "Offer Rejected:" + item.name
        notification = Notification(user=offer.bidder,
                                    body=notification_body,
                                    ntype="rejected-offer",
                                    item=item.key.id(),
                                    item_category=item.category,
                                    noticed=False,
                                    link="/browse_item/" + str(item.key.id()))
        notification.put()
        return "success"

    if request.form["reason"] == "confirm":
        if item.seller_id != session["user_id"]:
            return "uninformative error", 404

        item.sold = True
        item.put()
        offer.confirmed = True
        offer.put()
        offers = Offer.query(Offer.item == item.key.id(),
                             Offer.bidder != offer.bidder)
        for temp_offer in offers:
            notification_body = item.name + " sold"
            notification = Notification(user=offer.bidder,
                                        body=notification_body,
                                        ntype="item-sold",
                                        item=item.key.id(),
                                        item_category=item.category,
                                        noticed=False,
                                        link="/browse/" + str(item.category))
            notification.put()
            temp_offer.key.delete()
        conversation = Conversation.query(
            Conversation.item == item.key.id()).get()
        if conversation:
            conversation.key.delete()
        return "Offer confirmed"
    if request.form["reason"] == "remove":
        offer.key.delete()
        return "Offer removed"
    return "uninformative error", 404
Exemplo n.º 17
0
def my_item(item_id):
    if not session.get("logged_in"):
        return login()

    item_id = int(item_id)

    item = Item.get_by_id(item_id)

    if request.method == "POST":

        if item.seller_id != session["user_id"]:
            return "Uninformative Error", 500

        if request.form.get("tags"):
            tags = request.form["tags"].split(" ")

            for tag in tags:
                if tag == "":
                    continue
                tag = tag.strip().lower()
                exists = Tag.get_by_id(tag)

                if not exists:
                    new_tag = Tag(id=tag, name=tag)
                    new_tag.put()

                exists = Item_Tag.get_by_id(str(item_id) + tag)

                if not exists:
                    new_item_tag = Item_Tag(id=str(item_id) + tag,
                                            item=item_id,
                                            tag=tag)
                    new_item_tag.put()

        else:
            item.name = request.form.get("name")
            item.description = request.form.get("description")
            item.category = request.form.get("category")
            item.price = float(request.form.get("price"))
            item.biddable = False
            if request.form.get("biddable"):
                item.biddable = True

            item.put()

    offers = Offer.query(Offer.item == item_id).order(Offer.amount)

    fields = []
    fields.append(
        Field(name="name",
              title="Name",
              the_type='text',
              identifier='name',
              placeholder="Item Name",
              value=item.name))
    fields.append(
        Field(name='description',
              title="Description",
              the_type="textarea",
              identifier='description',
              placeholder='Descriptive Description',
              tag="textarea",
              value=item.description))
    categories = Category.query()

    options = []
    for category in categories:
        option = {}
        option["name"] = category.name
        option["value"] = category.categoryID
        options.append(option)

    fields.append(
        Field(name='category',
              title="Item Category",
              the_type="select",
              identifier="category",
              placeholder="Select Item Category",
              tag="select",
              options=options,
              value=item.category))
    fields.append(
        Field(name='price',
              title="Price",
              the_type="number",
              identifier="price",
              placeholder="10.95",
              step=True,
              value=item.price))
    fields.append(
        Field(name='biddable',
              title="Allow offer amounts other than suggested price.",
              the_type="number",
              identifier="biddable",
              tag="checkbox",
              value="checked" if item.biddable else ""))
    fields.append(
        Field(name='item_id',
              the_type="hidden",
              identifier="item_id",
              value=item.key.id(),
              hidden="hidden"))
    title = "Edit Item"
    form = Form(fields=fields, title=title)

    fields1 = []

    fields1.append(
        Field(name="tags",
              title="Tags",
              the_type='text',
              identifier='name',
              placeholder="Enter descriptive words seperated by spaces."))

    title1 = ""
    submit = "Add Tag"
    form1 = Form(fields=fields1, title=title1, submit=submit)

    tags = Item_Tag.query(Item_Tag.item == item_id)
    notifications = Notification.query(
        Notification.user == session["user_id"]).order(-Notification.time)

    return render_template("view_my_item.html",
                           offers=offers,
                           item=item,
                           notifications=notifications,
                           item_form=form,
                           tag_form=form1,
                           tags=tags)
Exemplo n.º 18
0
def browse_item(item_id):
    item_id = int(item_id)
    if not session.get("logged_in"):
        return login()

    if request.method == "GET":
        item = Item.get_by_id(item_id)
        category_id = item.category
        print item.name
        seller = User.get_by_id(item.seller_id)

        previous_offer = Offer.query(Offer.bidder == session["user_id"],
                                     Offer.item == item_id).get()

        was_previous_offer = False
        if previous_offer:
            was_previous_offer = True

        fields = []
        fields.append(
            Field(
                name="message",
                title="Message For Seller",
                the_type='text',
                identifier='message',
                placeholder=
                "A short message for the seller. Perhaps, where you can meet or payment options.",
                tag="textarea"))
        if item.biddable:

            fields.append(
                Field(name='amount',
                      title="Offer Amount",
                      the_type="number",
                      identifier="amount",
                      placeholder="10.95",
                      step=True))

        title = "Make Offer"
        form = Form(fields=fields, title=title)

        tags = Item_Tag.query(Item_Tag.item == item_id)
        notifications = Notification.query(
            Notification.user == session["user_id"]).order(-Notification.time)
        return render_template("browse_item.html",
                               item=item,
                               category_id=category_id,
                               bid_form=form,
                               previous_offer=previous_offer,
                               was_previous_offer=was_previous_offer,
                               offer=previous_offer,
                               notifications=notifications,
                               tags=tags)

    if request.method == "POST":

        item = Item.get_by_id(item_id)

        if not item or item.sold:
            return page_was_not_found(
                "Sorry but the item you tried to bid on has been removed by the seller"
            )

        category_id = item.category
        seller = User.get_by_id(item.seller_id)

        previous_offer = Offer.query(Offer.bidder == session["user_id"],
                                     Offer.item == item_id).get()

        if previous_offer:
            previous_offer.key.delete()

        amount = item.price
        if item.biddable:
            amount = float(request.form["amount"])

        offer = Offer(bidder=session["user_id"],
                      item=item_id,
                      message=request.form["message"],
                      amount=amount,
                      bidder_name=session["first_name"] + " " +
                      session["last_name"],
                      accepted=False,
                      confirmed=False,
                      item_name=item.name)
        offer.put()

        if item.biddable:
            item.update_best_offer(amount)

        notification_body = "Offer made on " + item.name + "for $" + str(
            offer.amount)
        notification = Notification(user=item.seller_id,
                                    body=notification_body,
                                    ntype="item-offer",
                                    item=item.key.id(),
                                    item_category=item.category,
                                    noticed=False,
                                    link="/my_items/" + str(item.key.id()))
        notification.put()

        fields = []
        fields.append(
            Field(
                name="message",
                title="Message For Seller",
                the_type='text',
                identifier='message',
                placeholder=
                "A short message for the seller. Perhaps, where you can meet or payment options.",
                tag="textarea"))
        if item.biddable:

            fields.append(
                Field(name='amount',
                      title="Offer Amount",
                      the_type="number",
                      identifier="amount",
                      placeholder="10.95",
                      step=True))

        title = "Make Offer"
        form = Form(fields=fields, title=title, submit="Make Offer")

        tags = Item_Tag.query(Item_Tag.item == item_id)
        notifications = Notification.query(
            Notification.user == session["user_id"]).order(-Notification.time)
        return render_template("browse_item.html",
                               item=item,
                               category_id=category_id,
                               bid_form=form,
                               offer=offer,
                               was_previous_offer=True,
                               notifications=notifications,
                               tags=tags)
Exemplo n.º 19
0
def post_item():
    if not session.get("logged_in"):
        return login()

    if request.method == "GET":
        fields = []
        fields.append(
            Field(name="name",
                  title="Name",
                  the_type='text',
                  identifier='name',
                  placeholder="Item Name"))
        fields.append(
            Field(name='description',
                  title="Description",
                  the_type="textarea",
                  identifier='description',
                  placeholder='Descriptive Description',
                  tag="textarea"))
        categories = Category.query()

        options = []
        for category in categories:
            option = {}
            option["name"] = category.name
            option["value"] = category.categoryID
            options.append(option)

        fields.append(
            Field(name='category',
                  title="Item Category",
                  the_type="select",
                  identifier="category",
                  placeholder="Select Item Category",
                  tag="select",
                  options=options))

        fields.append(
            Field(name='price',
                  title="Price",
                  the_type="number",
                  identifier="price",
                  placeholder="10.95",
                  step=True))

        fields.append(
            Field(name='file',
                  title="Upload Photo",
                  the_type="file",
                  placeholder="Upload Photo",
                  identifier="file",
                  tag="file"))

        fields.append(
            Field(name='biddable',
                  title="Allow offer amounts other than suggested price.",
                  the_type="number",
                  identifier="biddable",
                  tag="checkbox"))
        title = "Post Item"
        form = Form(fields=fields, title=title, submit="Post")

        notifications = Notification.query(
            Notification.user == session["user_id"]).order(-Notification.time)
        return render_template("post_item.html",
                               item_form=form,
                               notifications=notifications)

    if request.method == "POST":
        name = request.form.get("name")
        description = request.form.get("description")
        category = request.form.get("category")
        price = float(request.form.get("price"))
        seller_id = session["user_id"]
        biddable = False
        if request.form.get("biddable"):
            biddable = True

        # print "nooo"
        # return json.dumps(request.files)

        file = request.files.get("file", None)
        # print "whaattt??"
        file_data = None
        content_type = None
        photo = None
        if file:
            file_data = file.read()
            photo = images.resize(file_data, width=500, height=500)
            content_type = file.content_type

        new_item = Item(name=name,
                        description=description,
                        category=category,
                        price=price,
                        seller_id=seller_id,
                        seller_name=session["first_name"] + " " +
                        session["last_name"],
                        biddable=biddable,
                        sold=False,
                        best_offer=0.0,
                        photo=photo,
                        photo_mimetype=content_type)
        new_item.put()

        return my_items()