Beispiel #1
0
    def get(self, boker_id):

        boker = Boker.get_by_id(int(boker_id))
        if boker:
            deferred.defer(update_num_view, str(boker.key()))

            # Check post type, Video or Photo
            if boker.video_id and boker.video_source:
                self.template = 'video.html'
                if self.current_user is not None:
                    user = User.get_by_key_name(self.current_user['id'])
                    can_like = not Like.already_like(user, boker)
                else:
                    can_like = False
            else:
                active_contest = Contest.active_contest()
                if active_contest:
                    is_nominee = Contest.is_nominee(boker)

                if self.current_user is not None:
                    user = User.get_by_key_name(self.current_user['id'])
                    can_vote = not Vote.already_vote(user)
                    can_like = not Like.already_like(user, boker)
                else:
                    can_vote = False
                    can_like = False
                    
                querystring = self.request.GET

            return self.render_response(self.template, locals())
        else:
            self.abort(404)
Beispiel #2
0
def like_boker(user_key, boker_key, explicitly_shared=False):
    """Like a boker"""

    user = User.get_by_key_name(user_key)
    boker = Boker.get(boker_key)
    boker_owner = boker.user

    if user and boker and not Like.already_like(user, boker):
        # Create like
        like = Like(user=user, boker=boker)
        like.put()

        # Update like numbers
        boker.num_like += 1
        boker.put()

        if not settings.DEBUG:
            # Post to FB
            try:
                boker_url = "%s/boker/%s" % (settings.APP_DOMAIN, boker.key().id())
                graph = facebook.GraphAPI(user.access_token)
                graph.request('me/og.likes',
                        post_args={'object': boker_url, 'fb:explicitly_shared': str(explicitly_shared).lower()})
            except Exception as e:
                print e

            # Notify Boker owner
            if user != boker_owner:
                try:
                    boker_url = encode_url("/boker/%s" % boker.key().id())
                    graph = facebook.GraphAPI(settings.FACEBOOK_APP_ACCESS_TOKEN)
                    graph.request('%s/notifications' % boker_owner.id,
                                   post_args={
                                            'href': '?to=' + boker_url,
                                            'template': '@[%s] menyukai boker anda.' % user.id,
                                            })
                except Exception as e:
                    print e

        else:
            logging.info('Runtask: post_like_story...')
Beispiel #3
0
    def get(self):

        qs = {}
        page = int(self.request.get('page') or 1)
        limit = int(self.request.get('limit') or settings.PAGINATION_LIMIT)
        sort_name, sort_field = self.sorter()
        qs['sort'] = sort_name
        bokers = Boker.all().order(sort_field)

        # Current loggedin User
        current_user = None
        if self.current_user:
            current_user = User.get_by_key_name(self.current_user['id'])

        # Filter by user
        user_filter = self.request.get('username')
        if user_filter:
            qs['username'] = user_filter
            user = User.gql("WHERE username=:1", user_filter).get()
            bokers.filter('user ='******'s
        objects = []
        for b in bokers:

            # Check if user can like a boker
            user_can_like = False
            if current_user:
                user_can_like = not Like.already_like(current_user, b)

            data = {
                'user': {
                    'id': b.user.id,
                    'username': b.user.username,
                    'name': b.user.name,
                    'url': self.uri_for('user', username=b.user.username),
                },
                'current_user': {
                    'id': None,
                    'username': None,
                },
                'id': b.key().id(),
                'key': str(b.key()),
                'created': naturaltime(b.created),
                'is_new': is_new(b.created),
                'description': b.description,
                'permalink': self.uri_for('boker_view', boker_id=b.key().id()),
                'num_comment': b.num_comment,
                'num_view': b.num_view,
                'num_like': b.num_like,
                'can_like': user_can_like,
            }

            if b.photo:
                data['type'] = 'photo'
                data['photo'] = {'key': str(b.photo.key())}

            if b.video_id:
                data['type'] = 'video'
                data['embed'] = {'id': b.video_id, 'url': 'http://www.youtube.com/embed/' + b.video_id}     

            if self.current_user:
                data['current_user'] = {
                    'id': self.current_user.get('id'),
                    'username': self.current_user.get('username'),
                }

            objects.append(data)

        # metadata
        qs.update({'page': page+1})
        next_qs = self._build_qs(qs)

        qs.update({'page': page-1})
        previous_qs = self._build_qs(qs)

        meta = {
            'count': len(objects),
            'limit': limit,
            'page': page,
            'next_url': '%s?%s' % (self.uri_for('streams'), next_qs) if page < num_pages else None,
            'previous_url': '%s?%s' % (self.uri_for('streams'), previous_qs) if page > 1 else None,
            'pages': num_pages,
        }

        streams = dict(
            meta=meta,
            objects=objects,
        )

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(json.dumps(streams))