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)
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)
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)
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(), }
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)
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'], }
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
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
def from_id(cls, quest_id): from drawquest.apps.quests.models import Quest return Quest.details_by_id(quest_id)()
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(), }