Exemplo n.º 1
0
    def get(self, post_id):
        post_key = db.Key.from_path('Post', int(post_id))
        post = db.get(post_key)

        #Check if user is logged in
        if self.user:

            user_id = self.read_secure_cookie('user_id')
            author_id = post.author.key().id()

            u = self.user.name

            #check if user has permission to like this post
            if long(user_id) != author_id:

                user = User.by_name(u)
                user_key = self.user.key()
                post = Post.by_id(post_id)

                likes = Like.all().filter('post =', post)

                #Check if user has already liked this post
                hasLiked = False
                for l in likes:
                    if l.user.key() == user_key:
                        hasLiked = True

                if not hasLiked:

                    like = Like(user=user, post=post)
                    like.put()

                    count = Like.all().filter('post =', post).count()
                    #count += 1
                    self.render("like.html", like=like, count=count, post=post)
                else:
                    count = Like.all().filter('post =', post).count()
                    page_error = "You have already liked this post"
                    self.render("like.html",
                                count=count,
                                page_error=page_error,
                                post=post)

            else:
                page_error = 'You can not like your own posts'
                self.render('like.html', page_error=page_error, post=post)

        else:
            error = 'please login'
            self.render('login-form.html', error=error, post=post)
    def get(self, post_id):
        key = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(key)

        if self.user and self.user.key().id() == post.user_id:
            error = "Sorry, you cannot like your own post."
            self.render('base.html', access_error=error)
        elif not self.user:
            self.redirect('/login')
        else:
            user_id = self.user.key().id()
            post_id = post.key().id()

            like = Like.all().filter('user_id =',
                                     user_id).filter('post_id =',
                                                     post_id).get()

            if like:
                self.redirect('/' + str(post.key().id()))

            else:
                like = Like(parent=key,
                            user_id=self.user.key().id(),
                            post_id=post.key().id())

                post.likes += 1

                like.put()
                post.put()

                self.redirect('/' + str(post.key().id()))
Exemplo n.º 3
0
    def get(self, post_id):
        key = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(key)
        comments_count = Comment.count_by_post_id(post)
        post_comments = Comment.all_by_post_id(post)

        if post:
            if self.user and self.user.key().id() == post.user.key().id():
                error = "You cannot dislike your own post"
                self.render("post.html",
                            post=post,
                            comments_count=comments_count,
                            post_comments=post_comments,
                            error=error)
            elif not self.user:
                self.redirect('/login')
            else:
                l = Like.all().filter('user ='******'post =', post).get()

                if l:
                    l.delete()
                    post.likes -= 1
                    post.put()

                    self.redirect('/post/' + str(post.key().id()))
                else:
                    self.redirect('/post/' + str(post.key().id()))
Exemplo n.º 4
0
 def get(self, post_id):
     key = db.Key.from_path('Post', int(post_id), parent=blog_key())
     post = db.get(key)
     # Post variable to regenerate front page with posts.
     posts = db.GqlQuery(
         "select * from Post order by created desc limit 10")
     # Render front again with error if user tries to unlike thier own post.
     if self.user and self.user.key().id() == post.user_id:
         error = "Sorry, you cannot unlike your own post."
         self.render('front.html', posts=posts, access_error=error)
     elif not self.user:
         self.redirect('/login')
     else:
         user_id = self.user.key().id()
         post_id = post.key().id()
         # Filter to see which posts a user has already liked.
         l = Like.all().filter('user_id =',
                               user_id).filter('post_id =', post_id).get()
         # Remove like value by 1 and render post page again.
         if l:
             l.delete()
             post.likes -= 1
             post.put()
             self.redirect('/' + str(post.key().id()))
         else:
             self.redirect('/' + str(post.key().id()))
Exemplo n.º 5
0
    def get(self, post_id):
        """ If the user is signed in and has authored the post render the
        basetemplate with an error message as they can't unlike their own posts.

        Pass the user to the sign in page if the user isn't signed in.

        Lookup whether the user has liked the post.  If liked, delete the like
        from the db and deincrement the like_count in the post model """
        postkey = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(postkey)

        if post is not None:
            if self.user and self.user.key().id() == post.user_id:
                self.write("You cannot unlike your own post")
            elif not self.user:
                return self.redirect('/login')
            else:
                user_id = self.user.key().id()
                post_id = post.key().id()

                l = LikeModel.all().filter(
                    'user_id =', user_id).filter('post_id =', post_id).get()

                if l:
                    l.delete()
                    post.like_count -= 1
                    post.put()

                    return self.redirect('/' + str(post.key().id()))
                else:
                    self.redirect('/' + str(post.key().id()))
Exemplo n.º 6
0
    def get(self, post_id):
        key = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(key)

        if not (post is None) and self.user and self.user.key().id(
        ) == post.user.key().id():

            if post:
                db.delete(key)
                time.sleep(0.1)
                self.redirect('/')
            else:
                self.response.out.write("Not a valid post!")
        # otherwise if the user is not logged in take them to the
        # login page
        elif not self.user:
            self.redirect("/login")
        else:
            error = "You cannot delete other user's posts"

            likes = like = Like.all().filter('post_id =', post_id).get()
            comments_count = Comment.count_by_post_id(post)
            post_comments = Comment.all_by_post_id(post)
            self.render("post.html",
                        post=post,
                        likes=likes,
                        comments_count=comments_count,
                        post_comments=post_comments,
                        error=error)
Exemplo n.º 7
0
    def get(self, post_id, post_user_id):
        """ If the user is signed in and authored the post, delete the post and
        redirect the user to the homepage.  Otherwise, send non-signed in users
        to the login page. For all other cases go back to the current page with
        a permission error. """
        if self.user and self.user.key().id() == int(post_user_id):
            postkey = db.Key.from_path('Post', int(post_id), parent=blog_key())
            post = db.get(postkey)
            comments = Comment.all().filter('post =', postkey)
            likes = Like.all().filter('post_id =', post.key().id())

            if post:
                delete_dependents(comments=comments, likes=likes)
                post.delete()
                return self.redirect('/')

        elif not self.user:
            return self.redirect("/login")

        else:
            postkey = db.Key.from_path('Post', int(post_id), parent=blog_key())
            post = db.get(postkey)
            error_msg = "You do not have permission to delete this post"
            comments = db.GqlQuery(
            "select * from Comment where ancestor is :1 order by created desc limit 10", postkey) # NOQA

            self.render("permalink.html", post=post, comments=comments,
                        error_msg=error_msg)
Exemplo n.º 8
0
    def get(self, post_id):
        post_key = db.Key.from_path('Post', int(post_id))
        post = db.get(post_key)

        #Get all comments for post id
        comments = Comment.all().filter('post =', post_key)
        comments.order("-created")

        #check if post exists
        if not self.post_exists(post_id):
            page_error = 'This post does not exist !'
            return self.render('login-form.html', page_error = page_error)


        user_id = self.read_secure_cookie('user_id')
        author_id = post.author.key().id()
        edit = False

        #check if logged in user is the author of the post
        #if the user is the author he can edit and/or delete the post
        if user_id:
            if (long(user_id) == author_id):
              edit = True



        #number of likes
        post = Post.by_id(post_id)
        likes = Like.all().filter('post =', post).count()

        self.render("permalink.html", post = post, comments = comments, edit = edit, likes = likes)
Exemplo n.º 9
0
    def post(self, submission_id, **kwargs):
        '''
        delete the appropriate submission instance in the db, and
        also delete all of its associated comments and likes in the db
        '''
        submission = kwargs['submission']
        comments = Comment.all().filter('submission =', submission)
        likes = Like.all().filter('submission =', submission)

        db.delete(submission)
        db.delete(comments)
        db.delete(likes)
        time.sleep(0.1)

        self.redirect('/')
Exemplo n.º 10
0
    def post(self, post_id):
        """Delete post if given post_id exists.

        If logged out user attempt to access, redirect to login page.

        Args:
            post_id (str): Post's id to edit.
        """
        post = Post.get_by_id(int(post_id))

        if post and self.user.key().id() == post.user.key().id():
            post.delete()

            db.delete(Like.all().filter('post = ', post))

            # Delay for DB processing.
            time.sleep(0.1)

        return self.redirect('/blog')
Exemplo n.º 11
0
    def get(self, post_id):
        key = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(key)

        if self.user and self.user.key().id() == post.user_id:
            self.write("You cannot dislike your own post")
        elif not self.user:
            self.redirect('/login')
        else:
            user_id = self.user.key().id()
            post_id = post.key().id()

            l = Like.all().filter('user_id =', user_id).filter('post_id =', post_id).get()

            if l:
                l.delete()
                post.likes -= 1
                post.put()

                self.redirect('/' + str(post.key().id()))
            else:
                self.redirect('/' + str(post.key().id()))
Exemplo n.º 12
0
    def get(self, post_id):
        """ If the user is signed in and has authored the post render the
        basetemplate with an error message as they can't like their own posts.

        Pass the user to the sign in page if the user isn't signed in.

        Lookup whether the user has liked the post.  If liked, redirect the user
        to the post page.  Otherwise a new like can be recorded in the db and
        increment the like_count in the post model. """
        postkey = db.Key.from_path('Post', int(post_id), parent=blog_key())
        post = db.get(postkey)

        if post is not None:
            if self.user and self.user.key().id() == post.user_id:
                error = "Sorry, you cannot like your own post."
                self.render('base.html', error=error)
            elif not self.user:
                return self.redirect('/login')
            else:
                user_id = self.user.key().id()
                post_id = post.key().id()

                liked = LikeModel.all().filter(
                    'user_id =', user_id).filter('post_id =', post_id).get()

                if liked:
                    return self.redirect('/' + str(post.key().id()))

                else:
                    like = LikeModel(parent=postkey,
                                     user_id=self.user.key().id(),
                                     post_id=post.key().id())

                    post.like_count += 1

                    like.put()
                    post.put()

                    return self.redirect('/' + str(post.key().id()))
Exemplo n.º 13
0
 def get(self, post_id):
     key = db.Key.from_path('Post', int(post_id), parent=blog_key())
     post = db.get(key)
     # Post variable to regenerate front page with posts.
     posts = db.GqlQuery(
         "select * from Post order by created desc limit 10")
     # Render front again with error if user tries to like thier own post.
     if self.user and self.user.key().id() == post.user_id:
         error = "Sorry, you cannot like your own post."
         self.render('front.html', posts=posts, access_error=error)
     elif not self.user:
         self.redirect('/login')
     else:
         user_id = self.user.key().id()
         post_id = post.key().id()
         # Filter to see which posts a user has already liked.
         like = Like.all().filter('user_id =',
                                  user_id).filter('post_id =',
                                                  post_id).get()
         # If user already liked post, then render page again with error.
         if like:
             comments = db.GqlQuery(
                 "select * from Comment where ancestor is :1 "
                 "order by created desc limit 10", key)
             error = "You cannot like a post more than once"
             self.render("permalink.html",
                         post=post,
                         comments=comments,
                         like_error=error)
         # If user has not liked post, then +1 like count.
         else:
             like = Like(parent=key,
                         user_id=self.user.key().id(),
                         post_id=post.key().id())
             post.likes += 1
             like.put()
             post.put()
             self.redirect('/' + str(post.key().id()))
Exemplo n.º 14
0
    def get(self, post_id):
        key = db.Key.from_path("Post", int(post_id), parent=blog_key())
        post = db.get(key)
        comments_count = Comment.count_by_post_id(post)
        post_comments = Comment.all_by_post_id(post)

        if post:
            # check if the user is trying to like own post
            if self.user and self.user.key().id() == post.user.key().id():
                error = "You cannot like your own posts"
                self.render("post.html",
                            post=post,
                            comments_count=comments_count,
                            post_comments=post_comments,
                            error=error)
            elif not self.user:
                self.redirect('/login')
            else:
                like = Like.all().filter('user ='******'post =',
                                                           post).get()

                if like:
                    self.redirect('/post/' + str(post.key().id()))

                else:
                    like = Like(post=post,
                                user=self.user)

                    post.likes += 1

                    like.put()
                    post.put()

                    self.redirect('/post/' + str(post.key().id()))

        else:
            self.response.out.write("Not a valid post!")
Exemplo n.º 15
0
    def get(self, post_id):
        key = db.Key.from_path('Post', int(post_id), parent=Utils.blog_key())
        post = db.get(key)

        if self.user and self.user.key().id() == post.user.key().id():
            error = "You cannot dislike your own post."
            self.render('base.html', access_error=error)

        elif not self.user:
            self.redirect('/login')

        else:
            l = Like.all().filter('user ='******'post =', post.key()).get()

            if l:
                l.delete()
                post.likes -= 1
                post.put()

                self.redirect('/blog/' + str(post.key().id()))
            else:
                self.redirect('/blog/' + str(post.key().id()))
Exemplo n.º 16
0
 def likes(self):
     ms = Like.all(topic_id=self.id)
     return ms