예제 #1
0
def socialregistration_friends(request,
    template_name='socialregistration/friends.html', extra_context=None):
    context = {}

    friends = []
    conditions = []
    user = request.user
    
    for facebookprofile in user.facebookprofile_set.all():
        print facebookprofile
        friendlist = request.facebook.graph.request(request.facebook.user['uid'] + '/friends')
        facebook_ids = [x['id'] for x in friendlist['data']]
        conditions.append(Q(facebookprofile__uid__in=facebook_ids))

    if user.twitterprofile_set.count():
        client = OAuthTwitter(
            request, settings.TWITTER_CONSUMER_KEY,
            settings.TWITTER_CONSUMER_SECRET_KEY,
            settings.TWITTER_REQUEST_TOKEN_URL,
        )
    for twitterprofile in user.twitterprofile_set.all():
        res = simplejson.loads(client.query('http://api.twitter.com/1/statuses/friends.json'))
        twitter_ids = [x['id'] for x in res]
        conditions.append(Q(twitterprofile__twitter_id__in=twitter_ids))

    for gfcprofile in user.gfcprofile_set.all():
        container = gfc.my_opensocial_container(request)
        res = container.fetch_friends()
        gfc_ids = [x['id'] for x in res]
        conditions.append(Q(gfcprofile__uid__in=gfc_ids))

    context['friends'] = User.objects.filter(reduce(operator.or_,conditions))
    context['follows'] = [f.actor for f in user.follow_set.all()]

    context.update(extra_context or {})
    return shortcuts.render_to_response(template_name, context,
        context_instance=template.RequestContext(request))
예제 #2
0
def music_recommendation_add(request, form_class=RecommendationForm,
    template_name='music/recommendation_add.html', extra_context=None):

    if not request.user.is_authenticated():
        return http.HttpResponseForbidden('please authenticate')

    context = {
        'track_name': request.REQUEST.get('track_name', ''),
        'artist_name': request.REQUEST.get('artist_name', ''),
        'target_pk_list': request.REQUEST.get('target_pk_list', ''),
        'track': None,
        'friend_pk': request.REQUEST.get('user_pk', ''),
    }

    context['track'] = get_or_fake_track(context['track_name'], context['artist_name'])

    if request.method == 'POST' and context['track']:
        if request.GET.get('method', False) == 'facebook':
            request.facebook.graph.put_wall_post(request.POST.get('message').encode('utf-8'))
            msg = 'thanks for sharing <a href="%s">%s</a> on Facebook' % (
                context['track'].get_absolute_url(),
                unicode(context['track']),
            )
            return http.HttpResponse(msg, status=201)
        elif request.GET.get('method', False) == 'twitter':
            session_key = 'oauth_%s_access_token' % get_token_prefix(settings.TWITTER_REQUEST_TOKEN_URL)
            if session_key in request.session.keys():
                restore = request.session[session_key]
            else:
                restore = None

            for twitterprofile in request.user.twitterprofile_set.all():
                request.session[session_key] = {
                    'oauth_token_secret': twitterprofile.token_secret, 
                    'oauth_token': twitterprofile.access_token, 
                    'user_id': twitterprofile.user_id,
                    'screen_name': twitterprofile.nick,
                }
                client = OAuthTwitter(
                    request, settings.TWITTER_CONSUMER_KEY,
                    settings.TWITTER_CONSUMER_SECRET_KEY,
                    settings.TWITTER_REQUEST_TOKEN_URL,
                )
                client.query('http://api.twitter.com/1/statuses/update.json', 'POST', {'status': request.POST.get('message').encode('utf-8')})
            
            if restore:
                request.session[session_key] = restore
            else:
                del request.session[session_key]

            msg = 'thanks for sharing <a href="%s">%s</a> on Twitter' % (
                context['track'].get_absolute_url(),
                unicode(context['track']),
            )
            return http.HttpResponse(msg, status=201)
        else:
            form = form_class(request.POST, instance=Recommendation(source=request.user, track=context['track']))
            if form.is_valid():
                save_if_fake_track(context['track'])
                form.instance.track = context['track']
                recommendation = form.save()
                action.send(request.user, verb='recommends', action_object=recommendation)
                msg = 'thanks for recommending <a href="%s">%s</a> to <a href="%s">%s %s</a>' % (
                    recommendation.track.get_absolute_url(),
                    unicode(recommendation.track),
                    recommendation.target.playlistprofile.get_absolute_url(),
                    unicode(recommendation.target.first_name),
                    unicode(recommendation.target.last_name),
                )
                return http.HttpResponse(msg, status=201)
            else:
                print form.errors
    else:
        form = form_class()

    base = 'http://%s' % request.META.get('HTTP_HOST', 'http://playlistnow.fm')
    profiles = request.user.twitterprofile_set.all()
    if profiles:
        context['twitterprofile'] = profiles[0]
        context['twitterurl'] = shorten_url(base+context['track'].get_absolute_url())
    profiles = request.user.facebookprofile_set.all()
    if profiles:
        context['facebookprofile'] = profiles[0]
        context['facebookurl'] = base+context['track'].get_absolute_url()

    context.update(extra_context or {})
    return shortcuts.render_to_response(template_name, context,
        context_instance=template.RequestContext(request))
예제 #3
0
def socialregistration_userdata(request, form_class=UserDataForm,
    template_name='socialregistration/userdata.html', extra_context=None):
    context = {}

    if 'socialregistration_profile' in request.session:
        profile = request.session['socialregistration_profile']
        user = request.session['socialregistration_user']
    elif request.user.is_authenticated():
        if request.user.facebookprofile_set.count():
            profile = request.user.facebookprofile_set.all()[0]
        elif request.user.twitterprofile_set.count():
            profile = request.user.twitterprofile_set.all()[0]
        if request.user.gfcprofile_set.count():
            profile = request.user.gfcprofile_set.all()[0]
        user = request.user
    else:
        return http.HttpResponseRedirect(urlresolvers.reverse(
            'acct_signup'))

    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            request.session['socialregistration_userdata'] = form.cleaned_data
            
            user = request.session['socialregistration_user']
            profile = request.session['socialregistration_profile']
            userdata = request.session['socialregistration_userdata']

            user.first_name = userdata.get('first_name', '')
            user.last_name = userdata.get('last_name', '')
            user.email = userdata.get('email', '')
            user_slug = defaultfilters.slugify('%s %s' % (
                user.first_name,
                user.last_name
            ))
            if User.objects.filter(username=user_slug).count() > 0:
                i = 1
                user_slug_test = user_slug + unicode(i)
                while User.objects.filter(username=user_slug_test).count() >0:
                    i += 1
                    user_slug_test = user_slug + str(i)
                user.username = user_slug_test
            else:
                user.username = user_slug
            user.save()

            user.playlistprofile.user_location = userdata.get('location', '')
            user.playlistprofile.avatar_url = userdata.get('avatar_url', '')
            user.playlistprofile.user = user
            user.playlistprofile.save()

            profile.user = user
            profile.avatar_url = userdata.get('avatar_url', '')
            profile.url = userdata.get('url', '')
            profile.nick = userdata.get('nick', '')
            profile.save()

            if 'socialregistration_user' in request.session: 
                del request.session['socialregistration_user']
            if 'socialregistration_profile' in request.session: 
                del request.session['socialregistration_profile']
            if 'socialregistration_userdata' in request.session: 
                del request.session['socialregistration_userdata']

            user = profile.authenticate()
            auth.login(request, user)
            request.user = user

            if not user:
                logger.info('NOT USER IN REGISTRATION!')
                return shortcuts.render_to_response('socialregistration/fail.html', context,
                    context_instance=template.RequestContext(request))

            friends = []
            conditions = []
            
            for facebookprofile in user.facebookprofile_set.all():
                print facebookprofile
                friendlist = request.facebook.graph.request(request.facebook.user['uid'] + '/friends')
                facebook_ids = [x['id'] for x in friendlist['data']]
                conditions.append(Q(facebookprofile__uid__in=facebook_ids))

            if user.twitterprofile_set.count():
                client = OAuthTwitter(
                    request, settings.TWITTER_CONSUMER_KEY,
                    settings.TWITTER_CONSUMER_SECRET_KEY,
                    settings.TWITTER_REQUEST_TOKEN_URL,
                )
            for twitterprofile in user.twitterprofile_set.all():
                res = simplejson.loads(client.query('http://api.twitter.com/1/statuses/friends.json'))
                twitter_ids = [x['id'] for x in res]
                conditions.append(Q(twitterprofile__twitter_id__in=twitter_ids))

            for gfcprofile in user.gfcprofile_set.all():
                container = gfc.my_opensocial_container(request)
                res = container.fetch_friends()
                gfc_ids = [x['id'] for x in res]
                conditions.append(Q(gfcprofile__uid__in=gfc_ids))
            
            for u in User.objects.filter(reduce(operator.or_,conditions)):
                follow(user, u)

            return http.HttpResponseRedirect(urlresolvers.reverse('socialregistration_friends'))
    else:
        if profile.__class__.__name__ == 'FacebookProfile':
            upstream = request.facebook.graph.request(request.facebook.user['uid'])
            initial = {
                'first_name': upstream.get('first_name', ''),
                'last_name': upstream.get('last_name', ''),
                'email': upstream.get('email', ''),
                'avatar_url': 'http://graph.facebook.com/%s/picture' % request.facebook.user['uid'],
                'nick': '%s %s' % (upstream.get('first_name', ''), upstream.get('last_name', '')),
                'url': upstream.get('link', ''),
            }
            if 'location' in upstream:
                initial['location'] = upstream['location']['name']
            else:   
                initial['location'] = ''

        elif profile.__class__.__name__ == 'TwitterProfile':
            client = OAuthTwitter(
                request, settings.TWITTER_CONSUMER_KEY,
                settings.TWITTER_CONSUMER_SECRET_KEY,
                settings.TWITTER_REQUEST_TOKEN_URL,
            )
            upstream = client.get_user_info()
            initial = {
                'first_name': '',
                'last_name': upstream.get('name', ''),
                'location': upstream.get('location', ''),
                'email': '',
                'avatar_url': upstream['profile_image_url'],
                'url': 'http://twitter.com/%s' % upstream['screen_name'],
                'nick': upstream['screen_name'],
            }

        elif profile.__class__.__name__ == 'GfcProfile':
            container = gfc.my_opensocial_container(request)
            req = opensocial.FetchPersonRequest(profile.uid, ['@all'])
            upstream = container.send_request(req)
            initial = {
                'first_name': upstream.get('displayName', ''),
                'last_name': '',
                'location': '',
                'email': '',
                'avatar_url': upstream['thumbnailUrl'],
                'url': upstream['urls'][0]['value'],
                'nick': upstream['displayName'],
            }
        form = form_class(initial=initial)

    context['form'] = form
    context['step'] = 'userdata'

    context.update(extra_context or {})
    return shortcuts.render_to_response(template_name, context,
        context_instance=template.RequestContext(request))