예제 #1
0
def list_friends(request, user_id):
    asi_session = request.session['asi_session']

    try:
        profile_user = api.people.get(user_id)
    except api.people.UserDoesNotExist:
        raise Http404


    friend_ids = api.people.get_friends(user_id)
    friends = []

    for friend_id in friend_ids:
        try:
            friend = api.people.get(friend_id)
            friend['num_mutual_friends'] = len(api.people.get_mutual_friends(
                                                asi_session.user_id, friend_id))
            friend['num_mutual_courses'] = len(utils.mutual_courses(
                                                asi_session.user_id, friend_id))
            friends.append(friend)
        except api.people.UserDoesNotExist:
            # Invalid friend relationship where friend does not exist in ASI
            pass

    pending_requests = []
    if asi_session.user_id == user_id:
        pending_friend_ids = asi_session.get_pending_friend_requests()

        for friend_id in pending_friend_ids:
            try:
                pending = api.people.get(friend_id)
                pending['num_mutual_friends'] = len(api.people.get_mutual_friends(
                                                    asi_session.user_id, friend_id))
                pending['num_mutual_courses'] = len(utils.mutual_courses(
                                                    asi_session.user_id, friend_id))
                pending_requests.append(pending)
            except api.people.UserDoesNotExist:
                # Invalid friend relationship where friend does not exist in ASI
                pass

    template = loader.get_template("frontpage/friends.html")
    context = RequestContext(request, {
        'asi_session': request.session['asi_session'],
        'ASI_BASE_URL': ASI_BASE_URL,
        'friends': friends,
        'requests': pending_requests,
        'profile_user': profile_user,
        'template': 'friends'
    })
    return HttpResponse(template.render(context))
예제 #2
0
def profile(request, user_id=None):
    template = loader.get_template("frontpage/profile.html")
    asi_session = request.session['asi_session']
    user_id = user_id if user_id else asi_session.user_id

    try:
        user = api.people.get(user_id)
    except api.people.UserDoesNotExist:
        raise Http404

    username = user['username']
    try:
        realname = user['name']['unstructured']
    except (KeyError, TypeError):
        realname = username
    try:
        avatar_url = '{0}{1}/large_thumbnail'.format(
            ASI_BASE_URL, user['avatar']['link']['href'])
    except (KeyError, TypeError):
        avatar_url = ''
    feedurl = 'frontpage/feeds.html'
    feeds = EventLog.constructor(user_ids=user_id)

    # mutual friends
    mutual_friends = []
    mutual_friend_ids = api.people.get_mutual_friends(
                                                asi_session.user_id, user_id)
    for mutual_friend_id in mutual_friend_ids:
        mutual_friends.append(api.people.get(mutual_friend_id))

    # mutual courses
    mutual_courses = []
    mutual_course_ids = utils.mutual_courses(
                                        asi_session.user_id, user_id)

    for mutual_course_id in mutual_course_ids:
        try:
            mutual_courses.append(api.course.get_course(mutual_course_id))
        except Exception:
            # Just ignore invalid course codes
            pass

    context = RequestContext(request, {
        'asi_session': request.session['asi_session'],
        'ASI_BASE_URL': ASI_BASE_URL,
        'profile_user': user,
        'username': username,
        'realname': realname,
        'avatar_url': avatar_url,
        'template': 'profile',
        'feedurl': feedurl,
        'feeds': feeds,
        'mutual_friends': mutual_friends,
        'mutual_courses': mutual_courses
    })
    return HttpResponse(template.render(context))
예제 #3
0
def search(request):
    template = loader.get_template("frontpage/search.html")
    searchform = SearchForm(request.GET)
    asi_session = request.session['asi_session']
    if searchform.is_valid():
        query = searchform.cleaned_data['query']
        scope = searchform.cleaned_data['scope']
        userresults = []
        courseresults = []

        if scope == 'all' or scope == 'users':
            for userid in api.people.search(query):
                try:
                    details = api.people.get(userid)
                except api.people.UserDoesNotExist:
                    continue
                # Note that is a set, template gets to count them
                details['mutual_friends'] = api.people.get_mutual_friends(
                                            asi_session.user_id, userid)
                details['mutual_courses'] = utils.mutual_courses(
                                            asi_session.user_id, userid)
                userresults.append(details)
        if scope == 'all' or scope == 'courses':
            for coursecode in api.course.search(query):
                try:
                    details = api.course.get_course(coursecode)
                except Exception:
                    # Just ignore invalid course codes.
                    continue
                details['friendcount'] = utils. \
                    count_friends_taking_course(asi_session.user_id, coursecode)
                courseresults.append(details)

        context = RequestContext(request, {
            'ASI_BASE_URL': ASI_BASE_URL,
            'searchform': searchform,
            'userresults': userresults,
            'courseresults': courseresults,
            'query': query,
            'asi_session': request.session['asi_session']
        })
    else:
        context = RequestContext(request, {
            'searchform': searchform,
            'asi_session': request.session['asi_session']
        })
    return HttpResponse(template.render(context))