def sharebadge(request):
    badge_id = request.GET.get('id')
    try:
        # Verify that this badge exists
        badge = Challenge.objects.get(pk=badge_id)
        
        # Verify also that this user has earned this badge
        profile = request.user.profile
        has_badge = profile.has_badge(badge_id)
        
        if has_badge:
            data = {'badge_name': get_badge_name(badge.id),
                    'twitter_url': urlquote(profile.twitter_sharing_url),
                    'twitter_badge_msg': TWITTER_BADGE_MSG,
                    'facebook_url': profile.facebook_sharing_url,
                    'facebook_redirect': absolute_url(django_reverse('mobile.home')),
                    'facebook_title': urlquote(unicode(FACEBOOK_SPARK_TITLE)),
                    'facebook_badge_msg': FACEBOOK_BADGE_MSG,
                    'facebook_img': absolute_url(settings.MEDIA_URL+'img/badges/fb/'+badge.id.replace('_','-')+'.png'),
                    'facebook_desc': urlquote(badge.badge_description),
                    'FB_APP_ID': settings.FB_APP_ID}
            return jingo.render(request, 'mobile/sharebadge.html', data)
    except Challenge.DoesNotExist:
        # Ignore invalid badges
        pass
    
    # Return to earned badges page if the querystring contains an invalid badge id
    # or if the user tried to share a badge he/she has not earned yet.
    return HttpResponseRedirect(reverse('mobile.badges'))
def user(request, username):
    user = get_object_or_404(User, username=username, is_active=True)
    via = request.GET.get('f')
    delta = datetime.datetime.now() - user.date_joined
    data = {'username': username,
            'profile': user.profile,
            'logged_in': request.user.is_authenticated(),
            'date_joined_delta': _total_seconds(delta),
            'is_user_page': True,
            'countries': json.dumps(countries[request.locale]),
            'sparked_countries': json.dumps(user.profile.sparked_countries),
            'twitter_url': urlquote(user.profile.twitter_sharing_url),
            'twitter_msg': urlquote(unicode(TWITTER_SHARE_MSG)),
            'facebook_url': user.profile.facebook_sharing_url,
            'facebook_redirect': absolute_url(django_reverse('desktop.close_popup')),
            'facebook_title': urlquote(unicode(FACEBOOK_SPARK_TITLE)),
            'facebook_spark_msg': urlquote(unicode(FACEBOOK_SPARK_MSG)),
            'stats': get_global_stats(),
            'FB_APP_ID': settings.FB_APP_ID}
    
    if not request.user.is_authenticated():
        data.update({'login_next_url': request.path})

    response = jingo.render(request, 'desktop/user.html', data)
    return set_sharing_cookies(response, username, via)
def sharelink(request):
    data = {'twitter_url': urlquote(request.user.profile.twitter_sharing_url),
            'twitter_msg': urlquote(unicode(TWITTER_SPARK_MSG)),
            'facebook_url': request.user.profile.facebook_sharing_url,
            'facebook_redirect': absolute_url(django_reverse('mobile.home')),
            'facebook_title': urlquote(unicode(FACEBOOK_SPARK_TITLE)),
            'facebook_spark_msg': urlquote(unicode(FACEBOOK_SPARK_MSG)),
            'FB_APP_ID': settings.FB_APP_ID}
            
    return jingo.render(request, 'mobile/sharelink.html', data)
def home(request):
    if request.user.is_authenticated():
        profile = request.user.profile
        delta = datetime.datetime.now() - profile.user.date_joined
        response = jingo.render(request, 'desktop/dashboard.html',
                                    {'username': profile.user.username,
                                     'profile': profile,
                                     'logged_in': True,
                                     'levels': profile.challenge_info,
                                     'date_joined_delta': _total_seconds(delta),
                                     'countries': json.dumps(countries[request.locale]),
                                     'sparked_countries': json.dumps(profile.sparked_countries),
                                     'twitter_url': urlquote(profile.twitter_sharing_url),
                                     'twitter_msg': urlquote(unicode(TWITTER_SPARK_MSG)),
                                     'facebook_url': profile.facebook_sharing_url,
                                     'facebook_redirect': absolute_url(django_reverse('desktop.close_popup')),
                                     'facebook_title': urlquote(unicode(FACEBOOK_SPARK_TITLE)),
                                     'facebook_spark_msg': urlquote(unicode(FACEBOOK_SPARK_MSG)),
                                     'abs_url': profile.generic_sharing_url,
                                     'stats': get_global_stats(),
                                     'boost2_status': 1 if profile.boost2_completed else 0,
                                     'open_boost_popup': 'new_user' in request.COOKIES,
                                     'FB_APP_ID': settings.FB_APP_ID})
        response.delete_cookie('new_user')
        return response
    else:
        data = {'is_homepage': True,
                'twitter_url': urlquote(absolute_url(django_reverse('desktop.home'))),
                'twitter_msg': urlquote(unicode(TWITTER_SHARE_MSG)),
                'facebook_url': absolute_url(django_reverse('desktop.home')),
                'facebook_redirect': absolute_url(django_reverse('desktop.close_popup')),
                'facebook_msg': urlquote(unicode(FACEBOOK_SHARE_MSG)),
                'facebook_title': urlquote(unicode(FACEBOOK_SPARK_TITLE)),
                'stats': get_global_stats(),
                'FB_APP_ID': settings.FB_APP_ID}
        return jingo.render(request, 'desktop/home.html', data)
 def badges(self):
     """Returns a list of dicts used for badge list rendering.
        They represent all badges earned by the user in the Spark game.
     """
     badges = []
     completed_challenges = CompletedChallenge.objects.filter(profile=self,
                                                              date_badge_earned__isnull=False)
     for cc in completed_challenges:
         badge_id = utils.get_challenge_id(cc.challenge.level, cc.challenge.number)
         badge_description = cc.challenge.badge_description
         badges.append({
             'id': badge_id,
             'name': cc.challenge.badge_name,
             'description': badge_description,
             'date_earned': cc.date_badge_earned,
             'new': cc.new_badge,
             'twitter_msg': urlquote(unicode(TWITTER_BADGE_MSG % {'badge_name':cc.challenge.badge_name, 'short_url':''})),
             'facebook_msg': urlquote(unicode(FACEBOOK_BADGE_MSG % {'badge_name':cc.challenge.badge_name})),
             'facebook_img': absolute_url(settings.MEDIA_URL+'img/badges/fb/'+badge_id.replace('_','-')+'.png'),
             'facebook_desc': urlquote(badge_description)
         })
     return badges
 def _social_sharing_url(self, service):
     # django_reverse used instead of reverse because we don't want a locale preprended to sharing links.
     url = urlparams(django_reverse('desktop.user', args=[self.user.username]), 
                                                             f=service)
     return absolute_url(url)
 def generic_sharing_url(self):
     url = urlparams(django_reverse('desktop.user', args=[self.user.username]))
     return absolute_url(url)
 def qr_code_download(self):
     """Returns the URL of a QR code which, when scanned, points to: https://[domain]/download?f=qr&user=[username]
     """
     url = absolute_url(urlparams(django_reverse('sharing.download'), user=self.user.username))
     return sharing_utils.url2qr(url)