예제 #1
0
    def get(self, blog_id):
        if self.user:
            username = self.user.name

        key = db.Key.from_path("Blog", int(blog_id), parent=blog_key())
        post = db.get(key)

        if not post:
            self.redirect("/accessdenied")

        likes = Like.by_blog_id(post)
        unlikes = Unlike.by_blog_id(post)
        post_comments = Comment.all_by_blog_id(post)
        comments_count = Comment.count_by_blog_id(post)

        if self.user:
            self.render("post.html",
                        post=post,
                        likes=likes,
                        unlikes=unlikes,
                        post_comments=post_comments,
                        comments_count=comments_count,
                        username=username)
        else:
            self.render("post.html",
                        post=post,
                        likes=likes,
                        unlikes=unlikes,
                        post_comments=post_comments,
                        comments_count=comments_count)
예제 #2
0
    def get(self, blog_id):
        # get the key for the blog post
        key = db.Key.from_path("Blog", int(blog_id), parent=blog_key())
        post = db.get(key)

        # if the post does not exist throw a 404 error
        if not post:
            self.error(404)
            return
        # get likes, unlikes, comments for the blog post
        likes = Like.by_blog_id(post)
        unlikes = Unlike.by_blog_id(post)
        post_comments = Comment.all_by_blog_id(post)
        comments_count = Comment.count_by_blog_id(post)

        # render the page and show blog content, likes, unlikes, comments, etc.
        self.render("post.html",
                    post=post,
                    likes=likes,
                    unlikes=unlikes,
                    comments_count=comments_count,
                    post_comments=post_comments)
예제 #3
0
    def post(self, blog_id):
        # get all the necessary parameters
        key = db.Key.from_path("Blog", int(blog_id), parent=blog_key())
        post = db.get(key)
        user_id = User.by_name(self.user.name)
        comments_count = Comment.count_by_blog_id(post)
        post_comments = Comment.all_by_blog_id(post)
        likes = Like.by_blog_id(post)
        unlikes = Unlike.by_blog_id(post)
        previously_liked = Like.check_like(post, user_id)
        previously_unliked = Unlike.check_unlike(post, user_id)

        # check if the user is logged in
        if self.user:
            # if the user clicks on like
            if self.request.get("like"):
                # check if the user try like his own post
                if post.user.key().id() != User.by_name(
                        self.user.name).key().id():
                    if previously_liked == 0:
                        # add like to the likes database and refresh the page
                        l = Like(post=post, user=User.by_name(self.user.name))
                        l.put()
                        time.sleep(0.1)
                        self.redirect('/post/%s' % str(post.key().id()))
                    # otherwise if the user has liked this post before throw
                    # and error
                    else:
                        error = "You have already liked this post"
                        self.render("post.html",
                                    post=post,
                                    likes=likes,
                                    unlikes=unlikes,
                                    error=error,
                                    comments_count=comments_count,
                                    post_comments=post_comments)
                # otherwise if the user is trying to like his own post throw an
                # error
                else:
                    error = "You cannot like your own posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                error=error,
                                comments_count=comments_count,
                                post_comments=post_comments)
            # if the user clicks on unlike
            if self.request.get("unlike"):
                # first check if the user is trying to unlike his own post
                if post.user.key().id() != User.by_name(
                        self.user.name).key().id():
                    # then check if the user has unliked this post before
                    if previously_unliked == 0:
                        # add unlike to the unlikes database and refresh the
                        # page
                        ul = Unlike(post=post,
                                    user=User.by_name(self.user.name))
                        ul.put()
                        time.sleep(0.1)
                        self.redirect('/post/%s' % str(post.key().id()))
                    # otherwise if the user has unliked this post before throw
                    # and error
                    else:
                        error = "You have already unliked this post"
                        self.render("post.html",
                                    post=post,
                                    likes=likes,
                                    unlikes=unlikes,
                                    error=error,
                                    comments_count=comments_count,
                                    post_comments=post_comments)
                # otherwise if the user is trying to unlike his own post throw
                # an error
                else:
                    error = "You cannot unlike your own posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                error=error,
                                comments_count=comments_count,
                                post_comments=post_comments)
            # if the user clicks on add comment get the comment text first
            if self.request.get("add_comment"):
                comment_text = self.request.get("comment_text")
                # check if there is anything entered in the comment text area
                if comment_text:
                    # add comment to the comments database and refresh page
                    c = Comment(post=post,
                                user=User.by_name(self.user.name),
                                text=comment_text)
                    c.put()
                    time.sleep(0.1)
                    self.redirect('/post/%s' % str(post.key().id()))
                # otherwise if nothing has been entered in the text area throw
                # an error
                else:
                    comment_error = "Please enter a comment in the text area"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                comment_error=comment_error)
            # if the user clicks on edit post
            if self.request.get("edit"):
                # check if the user is the author of this post
                if post.user.key().id() == User.by_name(
                        self.user.name).key().id():
                    # take the user to edit post page
                    self.redirect('/edit/%s' % str(post.key().id()))
                # otherwise if the user is not the author of this post throw an
                # error
                else:
                    error = "You cannot edit other user's posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                error=error)
            # if the user clicks on delete
            if self.request.get("delete"):
                # check if the user is the author of this post
                if post.user.key().id() == User.by_name(
                        self.user.name).key().id():
                    # delete the post and redirect to the main page
                    db.delete(key)
                    time.sleep(0.1)
                    self.redirect('/')
                # otherwise if the user is not the author of this post throw an
                # error
                else:
                    error = "You cannot delete other user's posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                error=error)
        # otherwise if the user is not logged in take them to the login page
        else:
            self.redirect("/login")
예제 #4
0
    def post(self, blog_id):
        key = db.Key.from_path("Blog", int(blog_id), parent=blog_key())
        post = db.get(key)
        user_id = User.by_name(self.user.name)
        comments_count = Comment.count_by_blog_id(post)
        post_comments = Comment.all_by_blog_id(post)
        likes = Like.by_blog_id(post)
        unlikes = Unlike.by_blog_id(post)
        previously_liked = Like.check_like(post, user_id)
        previously_unliked = Unlike.check_unlike(post, user_id)
        username = self.user.name

        if self.user:
            if self.request.get("like"):
                puk = post.user.key().id()
                ubn = User.by_name(self.user.name).key().id()
                if puk != ubn:  # These variables were only creatd to shorten the lenght of the line of code here since it was more than 79 chars.
                    if previously_liked == 0:
                        l = Like(post=post, user=User.by_name(self.user.name))
                        l.put()
                        time.sleep(0.1)
                        self.redirect('/post/%s' % str(post.key().id()))
                    else:
                        error = "You have already liked this post"
                        self.render("post.html",
                                    post=post,
                                    likes=likes,
                                    unlikes=unlikes,
                                    error=error,
                                    comments_count=comments_count,
                                    post_comments=post_comments,
                                    username=username)
                else:
                    error = "It's not allowed to like your own posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                error=error,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                username=username)

            if self.request.get("unlike"):
                puk = post.user.key().id()
                ubn = User.by_name(self.user.name).key().id()
                if puk != ubn:
                    if previously_unliked == 0:
                        ul = Unlike(post=post,
                                    user=User.by_name(self.user.name))
                        ul.put()
                        time.sleep(0.1)
                        self.redirect('/post/%s' % str(post.key().id()))
                    else:
                        error = "You have already unliked this post"
                        self.render("post.html",
                                    post=post,
                                    likes=likes,
                                    unlikes=unlikes,
                                    error=error,
                                    comments_count=comments_count,
                                    post_comments=post_comments,
                                    username=username)
                else:
                    error = "It's not allowed to unlike your own posts"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                error=error,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                username=username)

            if self.request.get("add_comment"):
                comment_text = self.request.get("comment_text")
                if comment_text:
                    c = Comment(post=post,
                                user=User.by_name(self.user.name),
                                text=comment_text)
                    c.put()
                    time.sleep(0.1)
                    self.redirect('/post/%s' % str(post.key().id()))
                else:
                    comment_error = "Use the textarea to enter a post, please"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                comment_error=comment_error,
                                username=username)

            if self.request.get("edit"):
                puk = post.user.key().id()
                ubn = User.by_name(self.user.name).key().id()
                if puk == ubn:
                    self.redirect('/edit/%s' % str(post.key().id()))
                else:
                    error = "To edit a post you must be the author"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                error=error,
                                username=username)

            if self.request.get("delete"):
                puk = post.user.key().id()
                ubn = User.by_name(self.user.name).key().id()
                if puk == ubn:
                    db.delete(key)
                    time.sleep(0.1)
                    self.redirect('/')
                else:
                    error = "To delete a post you must be the author"
                    self.render("post.html",
                                post=post,
                                likes=likes,
                                unlikes=unlikes,
                                comments_count=comments_count,
                                post_comments=post_comments,
                                error=error,
                                username=username)
        else:
            self.redirect("/login")