Esempio n. 1
0
def ugq_moderation(request):
    flagged = Quest.unjudged_flagged().filter(ugq=True).order_by('-id')
    unknown = Quest.by_unknown_users().filter(ugq=True).order_by('-id').exclude(flags__undone=False)

    ctx = _moderation_context([flagged, unknown], id_range=None)

    ctx.update({
        'flagged_count': flagged.count(),
        'trusted_user_count': UserInfo.objects.filter(trusted=True).count(),
        'body_class': 'ugq_moderation',
    })

    return r2r_jinja('whitelisting/ugq_moderation.html', ctx, request)
Esempio n. 2
0
def ugq_new(request):
    ctx = {
        'comments': Quest.unjudged().filter(ugq=True).order_by('-id')[:knobs.WHITELIST_COMMENTS_PER_PAGE],
        'body_class': 'new_ugq',
        'unjudged_count': Quest.objects.filter(ugq=True, judged=False).count(),
    }
    return r2r_jinja('whitelisting/new.html', ctx, request)
Esempio n. 3
0
def ugq_moderation(request):
    flagged = Quest.unjudged_flagged().filter(ugq=True).order_by('-id')
    unknown = Quest.by_unknown_users().filter(
        ugq=True).order_by('-id').exclude(flags__undone=False)

    ctx = _moderation_context([flagged, unknown], id_range=None)

    ctx.update({
        'flagged_count':
        flagged.count(),
        'trusted_user_count':
        UserInfo.objects.filter(trusted=True).count(),
        'body_class':
        'ugq_moderation',
    })

    return r2r_jinja('whitelisting/ugq_moderation.html', ctx, request)
Esempio n. 4
0
def create_quest(request, title, content_id=None, invite_followees=False,
                 facebook_share=False, facebook_access_token=None,
                 twitter_share=False, twitter_access_token=None, twitter_access_token_secret=None,
                 email_share=False, email_recipients=[],
                 resolve_share_ids=[]):
    if not request.user.is_staff and not settings.STAGING:
        prefix = 'user:{}:create_quest_limit:'.format(request.user.id)
        if not RateLimit(prefix+'h', 60, 60*60).allowed() or not RateLimit(prefix+'d', 100, 8*60*60).allowed():
            raise ServiceError("Attempting to create quests too quickly.")

    _, _, content, _, title = validate_and_clean_comment(
        request.user,
        parent_comment=None,
        reply_content=content_id,
        title=title,
    )

    if facebook_share:
        facebook_share = sns_publishing.facebook_share_pre_post(request, facebook_access_token)

    if twitter_share:
        twitter_share = sns_publishing.twitter_share_pre_post(request, twitter_access_token, twitter_access_token_secret)

    quest = Quest.create_and_post(request, request.user, title, content=content, ugq=True)

    models.autocurate_for_flag_words(quest)

    if invite_followees:
        quest.invited_users.invite(request.user, request.user.followers(), ignore_errors=True)

    if facebook_share:
        sns_publishing.facebook_share_post_post(request, facebook_access_token, quest)

    if twitter_share:
        sns_publishing.twitter_share_post_post(request, twitter_access_token, twitter_access_token_secret, quest)

    for share_id in resolve_share_ids:
        share = ShareTrackingUrl.objects.get(id=share_id)

        if share.redirect_url:
            pass #TODO log some error here without failing this request
        
        share.redirect_url = quest.get_share_page_url()
        share.save()

    if email_share:
        @bgwork.defer
        def defer_email_share():
            sns_publishing.share_quest_by_email(quest, request.user, email_recipients)

    @bgwork.defer
    def alert_followers():
        for follower_id in request.user.redis.new_followers.zrange(0, -1):
            RealtimeChannel('user:{}:rt_tab_badges'.format(follower_id), 1).publish({'tab_badge_update': 'draw'})

    return {
        'quest': quest.details(),
    }
Esempio n. 5
0
def ugq_new(request):
    ctx = {
        'comments':
        Quest.unjudged().filter(
            ugq=True).order_by('-id')[:knobs.WHITELIST_COMMENTS_PER_PAGE],
        'body_class':
        'new_ugq',
        'unjudged_count':
        Quest.objects.filter(ugq=True, judged=False).count(),
    }
    return r2r_jinja('whitelisting/new.html', ctx, request)
Esempio n. 6
0
def user_profile(username):
    user = get_object_or_404(User.objects.select_related('userinfo', 'userinfo__avatar'), username=username)

    if not user.is_active:
        raise Http404("Deactivated user.")

    follow_counts = following_models.counts(user)

    return {
        'user': user.details(),
        'bio': user.userinfo.bio_text,
        'quest_completion_count': Quest.completed_by_user_count(user),
        'follower_count': follow_counts['followers'],
        'following_count': follow_counts['following'],
    }
Esempio n. 7
0
def user_profile(username):
    user = get_object_or_404(User.objects.select_related(
        'userinfo', 'userinfo__avatar'),
                             username=username)

    if not user.is_active:
        raise Http404("Deactivated user.")

    follow_counts = following_models.counts(user)

    ret = {
        'user': user.details(),
        'bio': user.userinfo.bio_text,
        'quest_completion_count': Quest.completed_by_user_count(user),
        'follower_count': follow_counts['followers'],
        'following_count': follow_counts['following'],
    }

    if not user.kv.web_profile_privacy.get():
        ret['web_profile_url'] = 'https://{}/{}'.format(
            settings.DOMAIN, user.username)

    for service, attr in [('facebook', 'fb_uid'), ('twitter', 'screen_name')]:
        try:
            privacy_kv = lambda: getattr(user.kv, '{}_privacy'.format(service))
            service_user = getattr(user, '{}user'.format(service))
            private = privacy_kv().get()

            # Migrate users from before this feature was added.
            if private is None:
                privacy_kv().set(False)
                private = False

            if not private:
                ret['{}_url'.format(service)] = 'https://{}.com/{}'.format(
                    service, getattr(service_user, attr))
        except (
                FacebookUser.DoesNotExist,
                TwitterUser.DoesNotExist,
        ):
            pass

    return ret
Esempio n. 8
0
def user_profile(username):
    user = get_object_or_404(User.objects.select_related('userinfo', 'userinfo__avatar'), username=username)

    if not user.is_active:
        raise Http404("Deactivated user.")

    follow_counts = following_models.counts(user)

    ret = {
        'user': user.details(),
        'bio': user.userinfo.bio_text,
        'quest_completion_count': Quest.completed_by_user_count(user),
        'follower_count': follow_counts['followers'],
        'following_count': follow_counts['following'],
    }

    if not user.kv.web_profile_privacy.get():
        ret['web_profile_url'] = 'https://{}/{}'.format(settings.DOMAIN, user.username)

    for service, attr in [('facebook', 'fb_uid'), ('twitter', 'screen_name')]:
        try:
            privacy_kv = lambda: getattr(user.kv, '{}_privacy'.format(service))
            service_user = getattr(user, '{}user'.format(service))
            private = privacy_kv().get()

            # Migrate users from before this feature was added.
            if private is None:
                privacy_kv().set(False)
                private = False

            if not private:
                ret['{}_url'.format(service)] = 'https://{}.com/{}'.format(service, getattr(service_user, attr))
        except (FacebookUser.DoesNotExist, TwitterUser.DoesNotExist,):
            pass

    return ret
Esempio n. 9
0
 def from_id(cls, quest_id):
     from drawquest.apps.quests.models import Quest
     return Quest.details_by_id(quest_id)()
Esempio n. 10
0
def create_quest(request,
                 title,
                 content_id=None,
                 invite_followees=False,
                 facebook_share=False,
                 facebook_access_token=None,
                 twitter_share=False,
                 twitter_access_token=None,
                 twitter_access_token_secret=None,
                 email_share=False,
                 email_recipients=[],
                 resolve_share_ids=[]):
    if not request.user.is_staff and not settings.STAGING:
        prefix = 'user:{}:create_quest_limit:'.format(request.user.id)
        if not RateLimit(prefix + 'h', 60, 60 * 60).allowed() or not RateLimit(
                prefix + 'd', 100, 8 * 60 * 60).allowed():
            raise ServiceError("Attempting to create quests too quickly.")

    _, _, content, _, title = validate_and_clean_comment(
        request.user,
        parent_comment=None,
        reply_content=content_id,
        title=title,
    )

    if facebook_share:
        facebook_share = sns_publishing.facebook_share_pre_post(
            request, facebook_access_token)

    if twitter_share:
        twitter_share = sns_publishing.twitter_share_pre_post(
            request, twitter_access_token, twitter_access_token_secret)

    quest = Quest.create_and_post(request,
                                  request.user,
                                  title,
                                  content=content,
                                  ugq=True)

    models.autocurate_for_flag_words(quest)

    if invite_followees:
        quest.invited_users.invite(request.user,
                                   request.user.followers(),
                                   ignore_errors=True)

    if facebook_share:
        sns_publishing.facebook_share_post_post(request, facebook_access_token,
                                                quest)

    if twitter_share:
        sns_publishing.twitter_share_post_post(request, twitter_access_token,
                                               twitter_access_token_secret,
                                               quest)

    for share_id in resolve_share_ids:
        share = ShareTrackingUrl.objects.get(id=share_id)

        if share.redirect_url:
            pass  #TODO log some error here without failing this request

        share.redirect_url = quest.get_share_page_url()
        share.save()

    if email_share:

        @bgwork.defer
        def defer_email_share():
            sns_publishing.share_quest_by_email(quest, request.user,
                                                email_recipients)

    @bgwork.defer
    def alert_followers():
        for follower_id in request.user.redis.new_followers.zrange(0, -1):
            RealtimeChannel('user:{}:rt_tab_badges'.format(follower_id),
                            1).publish({'tab_badge_update': 'draw'})

    return {
        'quest': quest.details(),
    }