Example #1
0
def project_user_list(request, project, max_count=64, with_sections=False,
        paginate_sections=False, user_list_url=''):
    is_challenge = (project.category == Project.CHALLENGE)
    context = {
        'request': request,
        'project': project,
        'user_list_url': user_list_url,
        'with_sections': with_sections,
        'paginate_sections': paginate_sections,
        'is_challenge': is_challenge,
    }
    if is_challenge:
        organizers = project.adopters().order_by('-organizing', '-id')
        participants = project.non_adopter_participants().order_by('-id')
        followers = project.completed_tasks_users()
    else:
        organizers = project.organizers()
        participants = project.non_organizer_participants()
        followers = project.non_participant_followers()

    if with_sections:
        per_section_max_count = max_count / 3
        if paginate_sections:
            context.update(get_pagination_context(request, organizers,
                per_section_max_count, prefix='organizers_'))
            context.update(get_pagination_context(request, participants,
                per_section_max_count, prefix='participants_'))
            context.update(get_pagination_context(request, followers,
                per_section_max_count, prefix='followers_'))
            context['organizers'] = context[
                'organizers_pagination_current_page'].object_list
            context['participants'] = context[
                'participants_pagination_current_page'].object_list
            context['followers'] = context[
                'followers_pagination_current_page'].object_list
        else:
            context['organizers'] = organizers[:per_section_max_count]
            context['participants'] = participants[:per_section_max_count]
            context['followers'] = followers[:per_section_max_count]
            show_more_link = (organizers.count() > per_section_max_count)
            show_more_link = show_more_link or (
                participants.count() > per_section_max_count)
            show_more_link = show_more_link or (
                followers.count() > per_section_max_count)
            context['show_more_link'] = show_more_link
    else:
        remaining = max_count
        context['organizers'] = organizers[:remaining]
        remaining -= context['organizers'].count()
        if remaining > 0:
            context['participants'] = participants[:remaining]
            remaining -= context['participants'].count()
        if remaining > 0:
            context['followers'] = followers[:remaining]
            remaining -= context['followers'].count()
        # It could be equal to (remaining < 0) but the big user
        # list page is not a has more information than the sidebar
        # section.
        context['show_more_link'] = True
    return context
Example #2
0
def show(request, slug):
    try:
        badge = Badge.objects.get(slug=slug)
    except Badge.DoesNotExist:
        return pilot_badge_redirect(request, slug)
    is_eligible = badge.is_eligible(request.user)
    rubrics = badge.rubrics.all()
    peer_assessment = (badge.assessment_type == Badge.PEER)
    skill_badge = (badge.badge_type == Badge.SKILL)
    community_badge = (badge.badge_type == Badge.COMMUNITY)
    submissions = badge.submissions.all().order_by(
        '-created_on')
    awarded_user_ids = badge.awards.all().values('user_id')
    awarded_users = UserProfile.objects.filter(
        deleted=False, id__in=awarded_user_ids)
    related_projects = badge.groups.all()
    prerequisites = badge.prerequisites.all()
    context = {
        'badge': badge,
        'is_eligible': is_eligible,
        'rubrics': rubrics,
        'peer_skill': peer_assessment and skill_badge,
        'peer_community': peer_assessment and community_badge,
        'related_projects': related_projects,
        'prerequisites': prerequisites,
    }
    context.update(get_pagination_context(request, awarded_users,
        24, prefix='awarded_users_'))
    context.update(get_pagination_context(request, submissions,
        24, prefix='submissions_'))
    return render_to_response('badges/badge.html', context,
        context_instance=RequestContext(request))
Example #3
0
def badge_submissions(request, pending_page_url, awarded_page_url,
        mine_page_url, toggled_awards, toggled_mine, badge=None):
    pending_submissions = Submission.objects.filter(author__deleted=False, pending=True)
    awarded_submissions = Submission.objects.filter(author__deleted=False, pending=False)
    if badge:
        pending_submissions = pending_submissions.filter(badge=badge)
        awarded_submissions = awarded_submissions.filter(badge=badge)
    show_my_submissions_tab = False
    my_submissions = Submission.objects.none()
    if request.user.is_authenticated():
        show_my_submissions_tab = True
        my_submissions = Submission.objects.filter(
            author=request.user.get_profile())
        if badge:
            my_submissions = my_submissions.filter(badge=badge)
    context = {
        'request': request,
        'badge': badge,
        'show_my_submissions_tab': show_my_submissions_tab,
        'pending_page_url': pending_page_url,
        'awarded_page_url': awarded_page_url,
        'mine_page_url': mine_page_url,
        'toggled_awards': toggled_awards,
        'toggled_mine': toggled_mine,
    }
    context.update(get_pagination_context(request, pending_submissions,
        24, prefix='pending_submissions_'))
    context.update(get_pagination_context(request, awarded_submissions,
        24, prefix='awarded_submissions_'))
    context.update(get_pagination_context(request, my_submissions,
        24, prefix='my_submissions_'))
    return context
Example #4
0
def project_user_list(request, project, max_count=64, with_sections=False,
        paginate_sections=False, user_list_url=''):
    is_challenge = (project.category == Project.CHALLENGE)
    context = {
        'request': request,
        'project': project,
        'user_list_url': user_list_url,
        'with_sections': with_sections,
        'paginate_sections': paginate_sections,
        'is_challenge': is_challenge,
    }
    if is_challenge:
        organizers = project.adopters().order_by('-organizing', '-id')
        participants = project.non_adopter_participants().order_by('-id')
        followers = project.completed_tasks_users()
    else:
        organizers = project.organizers()
        participants = project.non_organizer_participants()
        followers = project.non_participant_followers()

    if with_sections:
        per_section_max_count = max_count / 3
        if paginate_sections:
            context.update(get_pagination_context(request, organizers,
                per_section_max_count, prefix='organizers_'))
            context.update(get_pagination_context(request, participants,
                per_section_max_count, prefix='participants_'))
            context.update(get_pagination_context(request, followers,
                per_section_max_count, prefix='followers_'))
            context['organizers'] = context[
                'organizers_pagination_current_page'].object_list
            context['participants'] = context[
                'participants_pagination_current_page'].object_list
            context['followers'] = context[
                'followers_pagination_current_page'].object_list
        else:
            context['organizers'] = organizers[:per_section_max_count]
            context['participants'] = participants[:per_section_max_count]
            context['followers'] = followers[:per_section_max_count]
            show_more_link = (organizers.count() > per_section_max_count)
            show_more_link = show_more_link or (
                participants.count() > per_section_max_count)
            show_more_link = show_more_link or (
                followers.count() > per_section_max_count)
            context['show_more_link'] = show_more_link
    else:
        remaining = max_count
        context['organizers'] = organizers[:remaining]
        remaining -= context['organizers'].count()
        if remaining > 0:
            context['participants'] = participants[:remaining]
            remaining -= context['participants'].count()
        if remaining > 0:
            context['followers'] = followers[:remaining]
            remaining -= context['followers'].count()
        # It could be equal to (remaining < 0) but the big user
        # list page is not a has more information than the sidebar
        # section.
        context['show_more_link'] = True
    return context
Example #5
0
def projects_reviews_list(request, toggled_under_review=False,
        toggled_accepted=False):
    reviews = Review.objects.values('project_id')
    accepted_reviews = Review.objects.filter(
        accepted=True).values('project_id')
    projects_pending = Project.objects.exclude(
        id__in=reviews)
    projects_under_review = Project.objects.filter(
        id__in=reviews).exclude(id__in=accepted_reviews)
    projects_accepted = Project.objects.filter(
        id__in=accepted_reviews)
    context = {
        'toggled_under_review': toggled_under_review,
        'toggled_accepted': toggled_accepted,
        'pending_page_url': reverse('projects_pending_review'),
        'under_review_page_url': reverse('projects_under_review'),
        'accepted_page_url': reverse('accepted_projects')
    }
    context.update(get_pagination_context(request, projects_pending,
        24, prefix='pending_'))
    context.update(get_pagination_context(request, projects_under_review,
        24, prefix='under_review_'))
    context.update(get_pagination_context(request, projects_accepted,
        24, prefix='accepted_'))
    return render_to_response('reviews/projects_reviews_list.html',
        context, context_instance=RequestContext(request))
Example #6
0
def show_badge(request, slug):
    try:
        badge = Badge.objects.get(slug=slug)
    except Badge.DoesNotExist:
        return pilot_badge_redirect(request, slug)
    can_post_submission = badge.can_post_submission(request.user)
    can_give_to_peer = badge.can_give_to_peer(request.user)
    submissions = badge.submissions.all().order_by(
        '-created_on')
    if request.user.is_authenticated():
        user = request.user.get_profile()
        user_submissions = submissions.filter(author=user)
    else:
        user_submissions = Submission.objects.none()
    awarded_user_ids = badge.awards.all().values('user_id')
    awarded_users = UserProfile.objects.filter(
        deleted=False, id__in=awarded_user_ids)
    related_projects = badge.groups.filter(deleted=False)
    prerequisites = badge.prerequisites.all()
    other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5]
    context = {
        'badge': badge,
        'can_post_submission': can_post_submission,
        'can_give_to_peer': can_give_to_peer,
        'related_projects': related_projects,
        'prerequisites': prerequisites,
        'user_submissions': user_submissions,
        'other_badges_can_apply_for': other_badges_can_apply_for,
    }
    context.update(get_pagination_context(request, awarded_users,
        24, prefix='awarded_users_'))
    context.update(get_pagination_context(request, submissions,
        24, prefix='submissions_'))
    return render_to_response('badges/badge.html', context,
        context_instance=RequestContext(request))
Example #7
0
def project_user_list(request, project, max_count=64, with_sections=False, paginate_sections=False, user_list_url=""):
    is_challenge = project.category == Project.CHALLENGE
    context = {
        "request": request,
        "project": project,
        "user_list_url": user_list_url,
        "with_sections": with_sections,
        "paginate_sections": paginate_sections,
        "is_challenge": is_challenge,
    }
    if is_challenge:
        organizers = project.adopters().order_by("-organizing", "-id")
        participants = project.non_adopter_participants().order_by("-id")
        followers = project.completed_tasks_users()
    else:
        organizers = project.organizers()
        participants = project.non_organizer_participants()
        followers = project.non_participant_followers()

    if with_sections:
        per_section_max_count = max_count / 3
        if paginate_sections:
            context.update(get_pagination_context(request, organizers, per_section_max_count, prefix="organizers_"))
            context.update(get_pagination_context(request, participants, per_section_max_count, prefix="participants_"))
            context.update(get_pagination_context(request, followers, per_section_max_count, prefix="followers_"))
            context["organizers"] = context["organizers_pagination_current_page"].object_list
            context["participants"] = context["participants_pagination_current_page"].object_list
            context["followers"] = context["followers_pagination_current_page"].object_list
        else:
            context["organizers"] = organizers[:per_section_max_count]
            context["participants"] = participants[:per_section_max_count]
            context["followers"] = followers[:per_section_max_count]
            show_more_link = organizers.count() > per_section_max_count
            show_more_link = show_more_link or (participants.count() > per_section_max_count)
            show_more_link = show_more_link or (followers.count() > per_section_max_count)
            context["show_more_link"] = show_more_link
    else:
        remaining = max_count
        context["organizers"] = organizers[:remaining]
        remaining -= context["organizers"].count()
        if remaining > 0:
            context["participants"] = participants[:remaining]
            remaining -= context["participants"].count()
        if remaining > 0:
            context["followers"] = followers[:remaining]
            remaining -= context["followers"].count()
        # It could be equal to (remaining < 0) but the big user
        # list page is not a has more information than the sidebar
        # section.
        context["show_more_link"] = True
    return context
Example #8
0
def badge_submissions(request,
                      pending_page_url,
                      awarded_page_url,
                      mine_page_url,
                      toggled_awards,
                      toggled_mine,
                      badge=None):
    pending_submissions = Submission.objects.filter(author__deleted=False,
                                                    pending=True)
    awarded_submissions = Submission.objects.filter(author__deleted=False,
                                                    pending=False)
    if badge:
        pending_submissions = pending_submissions.filter(badge=badge)
        awarded_submissions = awarded_submissions.filter(badge=badge)
    show_my_submissions_tab = False
    my_submissions = Submission.objects.none()
    if request.user.is_authenticated():
        show_my_submissions_tab = True
        my_submissions = Submission.objects.filter(
            author=request.user.get_profile())
        if badge:
            my_submissions = my_submissions.filter(badge=badge)
    context = {
        'request': request,
        'badge': badge,
        'show_my_submissions_tab': show_my_submissions_tab,
        'pending_page_url': pending_page_url,
        'awarded_page_url': awarded_page_url,
        'mine_page_url': mine_page_url,
        'toggled_awards': toggled_awards,
        'toggled_mine': toggled_mine,
    }
    context.update(
        get_pagination_context(request,
                               pending_submissions,
                               24,
                               prefix='pending_submissions_'))
    context.update(
        get_pagination_context(request,
                               awarded_submissions,
                               24,
                               prefix='awarded_submissions_'))
    context.update(
        get_pagination_context(request,
                               my_submissions,
                               24,
                               prefix='my_submissions_'))
    return context
Example #9
0
def project_wall(request, project, discussion_area=False):
    is_organizing = project.is_organizing(request.user)
    is_participating = project.is_participating(request.user)
    if is_organizing:
        form = statuses_forms.ImportantStatusForm()
    elif is_participating:
        form = statuses_forms.StatusForm()
    else:
        form = None

    activities = project.activities()
    if discussion_area:
        activities = apply_filter(activities, 'messages')
    else:
        activities = filter_activities(request, activities)

    if project.category == Project.CHALLENGE:
        url = reverse('projects_discussion_area',
            kwargs=dict(slug=project.slug))
    else:
        url = project.get_absolute_url()

    context = {
        'request': request,
        'user': request.user,
        'project': project,
        'participating': is_participating,
        'organizing': is_organizing,
        'form': form,
        'discussion_area': discussion_area,
        'domain': Site.objects.get_current().domain,
        'wall_url': url,
    }
    context.update(get_pagination_context(request, activities))
    return context
Example #10
0
def dashboard(request):
    """Personalized dashboard for authenticated users."""
    try:
        profile = request.user.get_profile()
    except UserProfile.DoesNotExist:
        user = request.user
        username = ''
        if user.username[:10] != 'openiduser':
            username = user.username
        form = CreateProfileForm(
            initial={
                'full_name': ' '.join((user.first_name, user.last_name)),
                'email': user.email,
                'username': username,
            })
        messages.info(
            request, _('Please fill out your profile to finish registration.'))
        return render_to_response('dashboard/setup_profile.html', {
            'form': form,
        },
                                  context_instance=RequestContext(request))
    show_welcome = not profile.discard_welcome
    activities = Activity.objects.dashboard(request.user.get_profile())
    activities = filter_activities(request, activities)
    context = {
        'profile': profile,
        'profile_view': False,
        'show_welcome': show_welcome,
        'domain': Site.objects.get_current().domain,
        'dashboard_url': reverse('dashboard'),
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response('dashboard/dashboard.html',
                              context,
                              context_instance=RequestContext(request))
Example #11
0
def show_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return http.HttpResponseRedirect(reverse('page_history',
                kwargs={'slug': page.project.slug, 'page_slug': page.slug}))
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    new_comment_url = reverse('page_comment', kwargs=dict(
        scope_app_label='projects', scope_model='project',
        scope_pk=page.project.id, page_app_label='content',
        page_model='page', page_pk=page.id))
    first_level_comments = page.first_level_comments()
    context = {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'can_comment': page.can_comment(request.user),
        'new_comment_url': new_comment_url,
    }
    context.update(get_pagination_context(request, first_level_comments))
    return render_to_response('content/page.html', context,
        context_instance=RequestContext(request))
Example #12
0
def index(request, activity_id):
    activity = get_object_or_404(Activity, id=activity_id)
    context = {
        'activity': activity,
        'domain': Site.objects.get_current().domain,
    }
    if activity.scope_object:
        is_challenge = (activity.scope_object.category == Project.CHALLENGE)
        from statuses.models import Status
        status_ct = ContentType.objects.get_for_model(Status)
        if is_challenge and activity.target_content_type != status_ct:
            raise http.Http404
        scope_url = activity.scope_object.get_absolute_url()
        context['project'] = activity.scope_object
    else:
        scope_url = activity.actor.get_absolute_url()
        context['profile'] = activity.actor
        context['profile_view'] = True
    if activity.deleted:
        messages.error(request, _('This activity was deleted.'))
        if activity.can_edit(request.user):
            return http.HttpResponseRedirect(reverse('activity_restore',
                kwargs={'activity_id': activity.id}))
        return http.HttpResponseRedirect(scope_url)
    replies = activity.first_level_comments()
    context.update(get_pagination_context(request, replies))
    return render_to_response('activity/index.html', context,
        context_instance=RequestContext(request))
Example #13
0
def _filter_and_return(request, context, projects, max_count):
    tag_string = request.GET.get('filter_tags')
    filter_tags = []
    if tag_string:
        filter_tags = tag_string.split('|')
    context['filter_tags'] = filter_tags

    if filter_tags:
        projects = get_courses_by_tags(filter_tags, projects)
        
    context['popular_tags'] = get_tags_for_courses(projects, filter_tags)
    context['projects'] = projects
    context.update(get_pagination_context(request, projects, max_count))
    if request.is_ajax():
        projects_html = render_to_string('learn/_learn_projects.html',
            context, context_instance=RequestContext(request))
        projects_pagination = render_to_string('learn/_learn_pagination.html',
            context, context_instance=RequestContext(request))
        learn_header = render_to_string('learn/_learn_header.html',
            context, context_instance=RequestContext(request))
        learn_filters = render_to_string('learn/_learn_filters.html',
            context, context_instance=RequestContext(request))
        data = {
            'projects_html': projects_html,
            'projects_pagination': projects_pagination,
            'learn_header': learn_header,
            'learn_filters': learn_filters,
        }
        json = simplejson.dumps(data)
        return http.HttpResponse(json, mimetype="application/json")
    return render_to_response('learn/learn.html', context,
        context_instance=RequestContext(request))
Example #14
0
def dashboard(request):
    """Personalized dashboard for authenticated users."""
    try:
        profile = request.user.get_profile()
    except UserProfile.DoesNotExist:
        user = request.user
        username = ''
        if user.username[:10] != 'openiduser':
            username = user.username
        form = CreateProfileForm(initial={
            'full_name': ' '.join((user.first_name, user.last_name)),
            'email': user.email,
            'username': username,
        })
        messages.info(request,
            _('Please fill out your profile to finish registration.'))
        return render_to_response('dashboard/setup_profile.html', {
            'form': form,
        }, context_instance=RequestContext(request))
    show_welcome = not profile.discard_welcome
    activities = Activity.objects.dashboard(
        request.user.get_profile())
    activities = filter_activities(request, activities)
    context = {
        'profile': profile,
        'profile_view': False,
        'show_welcome': show_welcome,
        'domain': Site.objects.get_current().domain,
        'dashboard_url': reverse('dashboard'),
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response('dashboard/dashboard.html', context,
        context_instance=RequestContext(request))
Example #15
0
def project_wall(request, project, discussion_area=False):
    is_organizing = project.is_organizing(request.user)
    is_participating = project.is_participating(request.user)
    if is_organizing:
        form = statuses_forms.ImportantStatusForm()
    elif is_participating:
        form = statuses_forms.StatusForm()
    else:
        form = None

    activities = project.activities()
    if discussion_area:
        activities = apply_filter(activities, "messages")
    else:
        activities = filter_activities(request, activities)

    if project.category == Project.CHALLENGE:
        url = reverse("projects_discussion_area", kwargs=dict(slug=project.slug))
    else:
        url = project.get_absolute_url()

    context = {
        "request": request,
        "user": request.user,
        "project": project,
        "participating": is_participating,
        "organizing": is_organizing,
        "form": form,
        "discussion_area": discussion_area,
        "domain": Site.objects.get_current().domain,
        "wall_url": url,
    }
    context.update(get_pagination_context(request, activities))
    return context
Example #16
0
def project_wall(request, project, discussion_area=False):
    is_organizing = project.is_organizing(request.user)
    is_participating = project.is_participating(request.user)
    if is_organizing:
        form = statuses_forms.ImportantStatusForm()
    elif is_participating:
        form = statuses_forms.StatusForm()
    else:
        form = None

    activities = project.activities()
    if discussion_area:
        activities = apply_filter(activities, 'messages')
    else:
        activities = filter_activities(request, activities)

    if project.category == Project.CHALLENGE:
        url = reverse('projects_discussion_area',
            kwargs=dict(slug=project.slug))
    else:
        url = project.get_absolute_url()

    context = {
        'request': request,
        'user': request.user,
        'project': project,
        'participating': is_participating,
        'organizing': is_organizing,
        'form': form,
        'discussion_area': discussion_area,
        'domain': Site.objects.get_current().domain,
        'wall_url': url,
    }
    context.update(get_pagination_context(request, activities))
    return context
Example #17
0
def show_signup(request, slug):
    sign_up = get_object_or_404(Signup, project__slug=slug)
    pending_answers = sign_up.answers.filter(deleted=False, accepted=False)
    project = sign_up.project
    is_organizing = is_participating = can_post_answer = False
    if request.user.is_authenticated():
        profile = request.user.get_profile()
        is_organizing = project.organizers().filter(user=profile).exists()
        is_participating = project.participants().filter(user=profile).exists()
        if not is_organizing:
            if sign_up.status != Signup.CLOSED and not is_participating:
                can_post_answer = (not pending_answers.filter(
                    author=profile).exists())
    pending_answers_count = pending_answers.count()
    answers = sign_up.get_visible_answers(request.user)
    context = {
        'sign_up': sign_up,
        'project': project,
        'organizing': is_organizing,
        'participating': is_participating,
        'can_post_answer': can_post_answer,
        'pending_answers_count': pending_answers_count,
    }
    context.update(get_pagination_context(request, answers))
    return render_to_response('signups/sign_up.html', context,
        context_instance=RequestContext(request))
Example #18
0
def show(request, slug):
    project = get_object_or_404(Project, slug=slug)
    is_organizing = project.is_organizing(request.user)
    is_participating = project.is_participating(request.user)
    is_following = project.is_following(request.user)
    content_pages = Page.objects.filter(project__pk=project.pk, listed=True,
        deleted=False).order_by('index')
    content_pages_for_header = content_pages[0:3]
    content_pages_count = len(content_pages)
    if is_organizing:
        form = statuses_forms.ImportantStatusForm()
    elif is_participating:
        form = statuses_forms.StatusForm()
    else:
        form = None

    activities = project.activities()
    activities = filter_activities(request, activities)

    context = {
        'project': project,
        'participating': is_participating,
        'following': is_following,
        'organizing': is_organizing,
        'content_pages_for_header': content_pages_for_header,
        'content_pages_count': content_pages_count,
        'form': form,
        'domain': Site.objects.get_current().domain,
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response('projects/project.html', context,
                              context_instance=RequestContext(request))
Example #19
0
def show_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    is_challenge = (page.project.category == Project.CHALLENGE)
    if is_challenge and not page.listed:
        msg = _("This page is not accesible on a %s.")
        return http.HttpResponseForbidden(msg % page.project.kind.lower())
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return http.HttpResponseRedirect(reverse('page_history',
                kwargs={'slug': page.project.slug, 'page_slug': page.slug}))
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    new_comment_url = reverse('page_comment', kwargs=dict(
        scope_app_label='projects', scope_model='project',
        scope_pk=page.project.id, page_app_label='content',
        page_model='page', page_pk=page.id))
    first_level_comments = page.first_level_comments()
    all_listed_pages = page.project.pages.filter(deleted=False,
        listed=True).order_by('index')

    context = {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'can_comment': page.can_comment(request.user),
        'new_comment_url': new_comment_url,
        'is_challenge': is_challenge,
        'all_listed_pages': all_listed_pages,
    }
    context.update(get_pagination_context(request, first_level_comments))
    context.update(get_google_tracking_context(page.project))
    return render_to_response('content/page.html', context,
        context_instance=RequestContext(request))
Example #20
0
def list_tagged_all(request, tag_slug):
    """Display a list of non-user objects that are tagged with
    the tag and tag type."""
    school = None
    tag = get_object_or_404(GeneralTag, slug=tag_slug)
    directory_url = reverse('tags_tagged_list', kwargs=dict(tag_slug=tag_slug))
    if 'school' in request.GET:
        try:
            school = School.objects.get(slug=request.GET['school'])
        except School.DoesNotExist:
            return http.HttpResponseRedirect(directory_url)
    projects = Project.objects.filter(not_listed=False,
        tags__slug=tag_slug).exclude(
        category=Project.CHALLENGE).order_by('name')
    if school:
        projects = projects.filter(school=school)
    context = {
        'tagged': projects,
        'tag': tag,
        'school': school,
        'directory_url': directory_url,
    }
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response('tags/directory.html', context,
        context_instance=RequestContext(request))
Example #21
0
def learn(request):
    projects = Project.objects.filter(not_listed=False, archived=False,
        under_development=False, deleted=False)
    if 'school' in request.GET:
        projects = projects.filter(school__slug=request.GET['school'])
    if 'featured' in request.GET:
        featured = request.GET['featured']
        if featured == 'staff':
            projects = projects.filter(featured=True)
        elif featured == 'community':
            projects = projects.filter(community_featured=True)
        elif featured == 'fresh':
            one_week = datetime.datetime.now() - datetime.timedelta(weeks=1)
            projects = projects.filter(created_on__gte=one_week)
    if 'lang' in request.GET:
        projects = projects.filter(language=request.GET['lang'])
    if 'tag' in request.GET:
        projects = Project.get_tagged_projects(request.GET['tag'], projects)
    context = {
        'projects': projects, 
        'schools': School.objects.all(),
        'popular_tags': Project.get_popular_tags(),
        'tags_form': project_forms.ProjectsTagSearch()
    }
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response('projects/learn.html', context,
        context_instance=RequestContext(request))
Example #22
0
def list_tagged_all(request, tag_slug):
    """Display a list of non-user objects that are tagged with
    the tag and tag type."""
    school = None
    tag = get_object_or_404(GeneralTag, slug=tag_slug)
    directory_url = reverse('tags_tagged_list', kwargs=dict(tag_slug=tag_slug))
    if 'school' in request.GET:
        try:
            school = School.objects.get(slug=request.GET['school'])
        except School.DoesNotExist:
            return http.HttpResponseRedirect(directory_url)
    projects = Project.objects.filter(
        not_listed=False, tags__slug=tag_slug).exclude(
            category=Project.CHALLENGE).order_by('name')
    if school:
        projects = projects.filter(school=school)
    context = {
        'tagged': projects,
        'tag': tag,
        'school': school,
        'directory_url': directory_url,
    }
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response('tags/directory.html',
                              context,
                              context_instance=RequestContext(request))
Example #23
0
def user_list(request, slug):
    """Display full list of users for the project."""
    project = get_object_or_404(Project, slug=slug)
    participants = project.non_organizer_participants()
    followers = project.non_participant_followers()
    projects_users_url = reverse('projects_user_list',
        kwargs=dict(slug=project.slug))
    context = {
        'project': project,
        'organizers': project.organizers(),
        'projects_users_url': projects_users_url,
    }
    context.update(get_pagination_context(request, participants, 24,
        prefix='participants_'))
    context.update(get_pagination_context(request, followers, 24,
        prefix='followers_'))
    return render_to_response('projects/project_user_list.html', context,
        context_instance=RequestContext(request))
Example #24
0
def show_badge(request, slug):
    try:
        badge = Badge.objects.get(slug=slug)
    except Badge.DoesNotExist:
        return pilot_badge_redirect(request, slug)
    is_eligible = False
    applications = []
    peer_assessment = (badge.assessment_type == Badge.PEER)
    skill_badge = (badge.badge_type == Badge.SKILL)
    community_badge = (badge.badge_type == Badge.COMMUNITY)
    other_badge = (badge.badge_type == Badge.OTHER)
    submissions = badge.submissions.all().order_by('-created_on')
    if request.user.is_authenticated():
        user = request.user.get_profile()
        is_eligible = badge.is_eligible(user)
        applications = submissions.filter(author=user)
    awarded_user_ids = badge.awards.all().values('user_id')
    awarded_users = UserProfile.objects.filter(deleted=False,
                                               id__in=awarded_user_ids)
    related_projects = badge.groups.all()
    prerequisites = badge.prerequisites.all()
    other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5]
    context = {
        'badge': badge,
        'is_eligible': is_eligible,
        'peer_skill': peer_assessment and skill_badge,
        'peer_community': peer_assessment and community_badge,
        'other_badge': other_badge,
        'related_projects': related_projects,
        'prerequisites': prerequisites,
        'applications': applications,
        'other_badges_can_apply_for': other_badges_can_apply_for,
    }
    context.update(
        get_pagination_context(request,
                               awarded_users,
                               24,
                               prefix='awarded_users_'))
    context.update(
        get_pagination_context(request, submissions, 24,
                               prefix='submissions_'))
    return render_to_response('badges/badge.html',
                              context,
                              context_instance=RequestContext(request))
Example #25
0
def projects_reviews_list(request, toggled_reviewed=False):
    accepted_reviews = Review.objects.filter(
        accepted=True).values('project_id')
    new_projects = Project.objects.filter(under_development=False,
        archived=False, deleted=False, not_listed=False).exclude(
        id__in=accepted_reviews)
    reviewed_projects = Project.objects.filter(
        id__in=accepted_reviews)
    context = {
        'toggled_reviewed': toggled_reviewed,
        'show_new_page_url': reverse('reviews_show_new'),
        'show_reviewed_page_url': reverse('reviews_show_reviewed')
    }
    context.update(get_pagination_context(request, new_projects,
        24, prefix='new_'))
    context.update(get_pagination_context(request, reviewed_projects,
        24, prefix='reviewed_'))
    return render_to_response('reviews/projects_reviews_list.html',
        context, context_instance=RequestContext(request))
Example #26
0
def profile_view(request, username):
    profile = get_object_or_404(UserProfile, username=username)
    if profile.deleted:
        messages.error(request, _("This user account was deleted."))
        return http.HttpResponseRedirect(reverse("users_user_list"))

    activities = Activity.objects.for_user(profile)
    activities = filter_activities(request, activities)
    context = {"profile": profile, "profile_view": True, "domain": Site.objects.get_current().domain}
    context.update(get_pagination_context(request, activities))
    return render_to_response("users/profile.html", context, context_instance=RequestContext(request))
Example #27
0
def show_badge(request, slug):
    try:
        badge = Badge.objects.get(slug=slug)
    except Badge.DoesNotExist:
        return pilot_badge_redirect(request, slug)
    is_eligible = False
    applications = []
    peer_assessment = (badge.assessment_type == Badge.PEER)
    skill_badge = (badge.badge_type == Badge.SKILL)
    community_badge = (badge.badge_type == Badge.COMMUNITY)
    other_badge = (badge.badge_type == Badge.OTHER)
    submissions = badge.submissions.all().order_by(
        '-created_on')
    if request.user.is_authenticated():
        user = request.user.get_profile()
        is_eligible = badge.is_eligible(user)
        applications = submissions.filter(author=user)
    awarded_user_ids = badge.awards.all().values('user_id')
    awarded_users = UserProfile.objects.filter(
        deleted=False, id__in=awarded_user_ids)
    related_projects = badge.groups.all()
    prerequisites = badge.prerequisites.all()
    other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5]
    context = {
        'badge': badge,
        'is_eligible': is_eligible,
        'peer_skill': peer_assessment and skill_badge,
        'peer_community': peer_assessment and community_badge,
        'other_badge': other_badge,
        'related_projects': related_projects,
        'prerequisites': prerequisites,
        'applications': applications,
        'other_badges_can_apply_for': other_badges_can_apply_for,
    }
    context.update(get_pagination_context(request, awarded_users,
        24, prefix='awarded_users_'))
    context.update(get_pagination_context(request, submissions,
        24, prefix='submissions_'))
    return render_to_response('badges/badge.html', context,
        context_instance=RequestContext(request))
Example #28
0
def show_badge(request, slug):
    try:
        badge = Badge.objects.get(slug=slug)
    except Badge.DoesNotExist:
        return pilot_badge_redirect(request, slug)
    can_post_submission = badge.can_post_submission(request.user)
    can_give_to_peer = badge.can_give_to_peer(request.user)
    submissions = badge.submissions.all().order_by('-created_on')
    if request.user.is_authenticated():
        user = request.user.get_profile()
        user_submissions = submissions.filter(author=user)
    else:
        user_submissions = Submission.objects.none()
    awarded_user_ids = badge.awards.all().values('user_id')
    awarded_users = UserProfile.objects.filter(deleted=False,
                                               id__in=awarded_user_ids)
    related_projects = badge.groups.filter(deleted=False)
    prerequisites = badge.prerequisites.all()
    other_badges_can_apply_for = badge.other_badges_can_apply_for()[:5]
    context = {
        'badge': badge,
        'can_post_submission': can_post_submission,
        'can_give_to_peer': can_give_to_peer,
        'related_projects': related_projects,
        'prerequisites': prerequisites,
        'user_submissions': user_submissions,
        'other_badges_can_apply_for': other_badges_can_apply_for,
    }
    context.update(
        get_pagination_context(request,
                               awarded_users,
                               24,
                               prefix='awarded_users_'))
    context.update(
        get_pagination_context(request, submissions, 24,
                               prefix='submissions_'))
    return render_to_response('badges/badge.html',
                              context,
                              context_instance=RequestContext(request))
Example #29
0
def list_all(request):
    school = None
    directory_url = reverse("projects_directory")
    if "school" in request.GET:
        try:
            school = School.objects.get(slug=request.GET["school"])
        except School.DoesNotExist:
            return http.HttpResponseRedirect(directory_url)
    projects = Project.objects.filter(not_listed=False).order_by("name")
    if school:
        projects = projects.filter(school=school)
    context = {"school": school, "directory_url": directory_url}
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response("projects/directory.html", context, context_instance=RequestContext(request))
Example #30
0
def projects_reviews_list(request, toggled_reviewed=False):
    accepted_reviews = Review.objects.filter(
        accepted=True).values('project_id')
    new_projects = Project.objects.filter(
        under_development=False,
        archived=False,
        deleted=False,
        not_listed=False).exclude(id__in=accepted_reviews)
    reviewed_projects = Project.objects.filter(id__in=accepted_reviews)
    context = {
        'toggled_reviewed': toggled_reviewed,
        'show_new_page_url': reverse('reviews_show_new'),
        'show_reviewed_page_url': reverse('reviews_show_reviewed')
    }
    context.update(
        get_pagination_context(request, new_projects, 24, prefix='new_'))
    context.update(
        get_pagination_context(request,
                               reviewed_projects,
                               24,
                               prefix='reviewed_'))
    return render_to_response('reviews/projects_reviews_list.html',
                              context,
                              context_instance=RequestContext(request))
Example #31
0
def list_all(request):
    school = None
    directory_url = reverse('projects_directory')
    if 'school' in request.GET:
        try:
            school = School.objects.get(slug=request.GET['school'])
        except School.DoesNotExist:
            return http.HttpResponseRedirect(directory_url)
    projects = Project.objects.filter(not_listed=False).order_by('name')
    if school:
        projects = projects.filter(school=school)
    context = {'school': school, 'directory_url': directory_url}
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response('projects/directory.html', context,
        context_instance=RequestContext(request))
Example #32
0
def list_all(request):
    school = None
    directory_url = reverse('projects_directory')
    if 'school' in request.GET:
        try:
            school = School.objects.get(slug=request.GET['school'])
        except School.DoesNotExist:
            return http.HttpResponseRedirect(directory_url)
    projects = Project.objects.filter(not_listed=False, deleted=False).order_by('name')
    if school:
        projects = projects.filter(school=school)
    context = {'school': school, 'directory_url': directory_url}
    context.update(get_pagination_context(request, projects, 24))
    return render_to_response('projects/directory.html', context,
        context_instance=RequestContext(request))
Example #33
0
def profile_view(request, username):
    profile = get_object_or_404(UserProfile, username=username)
    if profile.deleted:
        messages.error(request, _('This user account was deleted.'))
        return http.HttpResponseRedirect(reverse('users_user_list'))

    activities = Activity.objects.for_user(profile)
    activities = filter_activities(request, activities)
    context = {
        'profile': profile,
        'profile_view': True,
        'domain': Site.objects.get_current().domain,
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response('users/profile.html', context,
        context_instance=RequestContext(request))
Example #34
0
def dashboard(request):
    """Personalized dashboard for authenticated users."""
    try:
        profile = request.user.get_profile()
        current_projects = profile.get_current_projects(only_public=False)
        users_following = profile.following()
        users_followers = profile.followers()
        interests = profile.tags.filter(category='interest').exclude(
            slug='').order_by('name')
        desired_topics = profile.tags.exclude(slug='').filter(
            category='desired_topic').order_by('name')
        links = Link.objects.filter(user=profile,
            project__isnull=True).order_by('index')
    except UserProfile.DoesNotExist:
        user = request.user
        username = ''
        if user.username[:10] != 'openiduser':
            username = user.username
        form = CreateProfileForm(initial={
            'full_name': ' '.join((user.first_name, user.last_name)),
            'email': user.email,
            'username': username,
        })
        messages.info(request,
            _('Please fill out your profile to finish registration.'))
        return render_to_response('dashboard/setup_profile.html', {
            'form': form,
        }, context_instance=RequestContext(request))
    show_welcome = not profile.discard_welcome
    activities = Activity.objects.dashboard(
        request.user.get_profile())
    activities = filter_activities(request, activities)
    context = {
        'profile': profile,
        'current_projects': current_projects,
        'users_following': users_following,
        'users_followers': users_followers,
        'interests': interests,
        'desired_topics': desired_topics,
        'links': links,
        'show_welcome': show_welcome,
        'domain': Site.objects.get_current().domain,
        'dashboard_url': reverse('dashboard'),
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response('dashboard/dashboard.html', context,
        context_instance=RequestContext(request))
Example #35
0
def show_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    is_challenge = (page.project.category == Project.CHALLENGE)
    if is_challenge and not page.listed:
        msg = _("This page is not accesible on a %s.")
        return http.HttpResponseForbidden(msg % page.project.kind.lower())
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return http.HttpResponseRedirect(
                reverse('page_history',
                        kwargs={
                            'slug': page.project.slug,
                            'page_slug': page.slug
                        }))
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    new_comment_url = reverse('page_comment',
                              kwargs=dict(scope_app_label='projects',
                                          scope_model='project',
                                          scope_pk=page.project.id,
                                          page_app_label='content',
                                          page_model='page',
                                          page_pk=page.id))
    first_level_comments = page.first_level_comments()
    all_listed_pages = page.project.pages.filter(deleted=False,
                                                 listed=True).order_by('index')
    if is_challenge and request.user.is_authenticated():
        profile = request.user.get_profile()
        page.is_done = PerUserTaskCompletion.objects.filter(
            user=profile, page=page, unchecked_on__isnull=True)
    context = {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'can_comment': page.can_comment(request.user),
        'new_comment_url': new_comment_url,
        'is_challenge': is_challenge,
        'all_listed_pages': all_listed_pages,
        'next_page': page.get_next_page(),
    }
    context.update(get_pagination_context(request, first_level_comments))
    return render_to_response('content/page.html',
                              context,
                              context_instance=RequestContext(request))
Example #36
0
def show_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    is_challenge = page.project.category == Project.CHALLENGE
    if is_challenge and not page.listed:
        msg = _("This page is not accesible on a %s.")
        return http.HttpResponseForbidden(msg % page.project.kind.lower())
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _("This task was deleted."))
        if can_edit:
            return http.HttpResponseRedirect(
                reverse("page_history", kwargs={"slug": page.project.slug, "page_slug": page.slug})
            )
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    new_comment_url = reverse(
        "page_comment",
        kwargs=dict(
            scope_app_label="projects",
            scope_model="project",
            scope_pk=page.project.id,
            page_app_label="content",
            page_model="page",
            page_pk=page.id,
        ),
    )
    first_level_comments = page.first_level_comments()
    all_listed_pages = page.project.pages.filter(deleted=False, listed=True).order_by("index")

    context = {
        "page": page,
        "project": page.project,
        "can_edit": can_edit,
        "can_comment": page.can_comment(request.user),
        "new_comment_url": new_comment_url,
        "is_challenge": is_challenge,
        "all_listed_pages": all_listed_pages,
    }
    context.update(get_pagination_context(request, first_level_comments))
    context.update(get_google_tracking_context(page.project))

    return render_to_response("content/page.html", context, context_instance=RequestContext(request))
Example #37
0
def dashboard(request):
    """Personalized dashboard for authenticated users."""
    try:
        profile = request.user.get_profile()
        return HttpResponseRedirect(reverse("users_profile_view", kwargs={"username": request.user.username}))
    except UserProfile.DoesNotExist:
        user = request.user
        username = ""
        if user.username[:10] != "openiduser":
            username = user.username
        form = CreateProfileForm(
            initial={
                "full_name": " ".join((user.first_name, user.last_name)),
                "email": user.email,
                "username": username,
            }
        )
        messages.info(request, _("Please fill out your profile to finish registration."))
        return render_to_response(
            "dashboard/setup_profile.html", {"form": form}, context_instance=RequestContext(request)
        )
    show_welcome = not profile.discard_welcome
    activities = Activity.objects.dashboard(request.user.get_profile())
    activities = filter_activities(request, activities)
    context = {
        "profile": profile,
        "current_projects": current_projects,
        "users_following": users_following,
        "users_followers": users_followers,
        "interests": interests,
        "desired_topics": desired_topics,
        "links": links,
        "show_welcome": show_welcome,
        "domain": Site.objects.get_current().domain,
        "dashboard_url": reverse("dashboard"),
    }
    context.update(get_pagination_context(request, activities))
    return render_to_response("dashboard/dashboard.html", context, context_instance=RequestContext(request))
Example #38
0
def index(request, activity_id):
    activity = get_object_or_404(Activity, id=activity_id)
    context = {
        'activity': activity,
        'domain': Site.objects.get_current().domain,
    }
    if activity.scope_object:
        scope_url = activity.scope_object.get_absolute_url()
        context['project'] = activity.scope_object
    else:
        scope_url = activity.actor.get_absolute_url()
        context['profile'] = activity.actor
        context['profile_view'] = True
    if activity.deleted:
        messages.error(request, _('This activity was deleted.'))
        if activity.can_edit(request.user):
            return http.HttpResponseRedirect(reverse('activity_restore',
                kwargs={'activity_id': activity.id}))
        return http.HttpResponseRedirect(scope_url)
    replies = activity.first_level_comments()
    context.update(get_pagination_context(request, replies))
    return render_to_response('activity/index.html', context,
        context_instance=RequestContext(request))
Example #39
0
def index(request, activity_id):
    activity = get_object_or_404(Activity, id=activity_id)
    context = {
        'activity': activity,
        'domain': Site.objects.get_current().domain,
    }
    if activity.scope_object:
        scope_url = activity.scope_object.get_absolute_url()
        context['project'] = activity.scope_object
    else:
        scope_url = activity.actor.get_absolute_url()
        context['profile'] = activity.actor
        context['profile_view'] = True
    if activity.deleted:
        messages.error(request, _('This activity was deleted.'))
        if activity.can_edit(request.user):
            return http.HttpResponseRedirect(reverse('activity_restore',
                kwargs={'activity_id': activity.id}))
        return http.HttpResponseRedirect(scope_url)
    replies = activity.first_level_comments()
    context.update(get_pagination_context(request, replies))
    return render_to_response('activity/index.html', context,
        context_instance=RequestContext(request))
Example #40
0
def learn(request, max_count=24):
    projects = Project.objects.filter(not_listed=False,
        deleted=False).order_by('-created_on')
    get_params = request.GET.copy()
    if not 'language' in get_params:
        get_params['language'] = get_language()
    form = project_forms.ProjectsFilterForm(projects, get_params)
    context = {
        'schools': School.objects.all(),
        'popular_tags': Project.get_popular_tags(),
        'form': form,
        'learn_url': reverse('projects_learn'),
        'infinite_scroll': request.GET.get('infinite_scroll', False),
    }
    if form.is_valid():
        archived = form.cleaned_data['archived']
        under_development = form.cleaned_data['under_development']
        projects = projects.filter(archived=archived,
            under_development=under_development)
        closed_signup = form.cleaned_data['closed_signup']
        if closed_signup:
            projects = projects.exclude(
                category=Project.CHALLENGE).filter(
                sign_up__status=Signup.CLOSED)
        else:
            projects = projects.filter(Q(category=Project.CHALLENGE)
                | Q(sign_up__status=Signup.MODERATED)
                | Q(sign_up__status=Signup.NON_MODERATED))
        featured = form.cleaned_data['featured']
        if featured == project_forms.ProjectsFilterForm.SHOWCASE:
            context['learn_showcase'] = True
            projects = projects.filter(featured=True)
        elif featured == project_forms.ProjectsFilterForm.COMMUNITY:
            context['learn_community'] = True
            projects = projects.filter(community_featured=True)
        elif featured == project_forms.ProjectsFilterForm.FRESH:
            context['learn_fresh'] = True
            one_week = datetime.datetime.now() - datetime.timedelta(weeks=1)
            projects = projects.filter(created_on__gte=one_week)
        elif featured == project_forms.ProjectsFilterForm.POPULAR:
            popular = Relationship.objects.filter(
                deleted=False, target_project__isnull=False).values(
                'target_project').annotate(Count('source')).order_by(
                '-source__count')[:max_count]
            popular_ids = [d['target_project'] for d in popular]
            projects = projects.filter(id__in=popular_ids)
        elif featured == project_forms.ProjectsFilterForm.UPDATED:
            external_ct = ContentType.objects.get_for_model(RemoteObject)
            relationship_ct = ContentType.objects.get_for_model(Relationship)
            last_updated = Activity.objects.filter(
                deleted=False, scope_object__isnull=False).exclude(
                target_content_type=external_ct).exclude(
                target_content_type=relationship_ct).values(
                'scope_object').annotate(Max('created_on')).order_by(
                '-created_on__max')[:max_count]
            last_updated_ids = [d['scope_object'] for d in last_updated]
            projects = projects.filter(id__in=last_updated_ids)
        school = form.cleaned_data['school']
        if school:
            context['learn_school'] = school
            projects = projects.filter(school=school)
        tag = form.cleaned_data['tag']
        if tag:
            context['learn_tag'] = tag
            projects = Project.get_tagged_projects(tag, projects)
        if not form.cleaned_data['all_languages']:
            language = form.cleaned_data['language']
            projects = projects.filter(language__startswith=language)
        reviewed = form.cleaned_data['reviewed']
        if reviewed:
            accepted_reviews = Review.objects.filter(
                accepted=True).values('project_id')
            projects = projects.filter(id__in=accepted_reviews)
    context['projects'] = projects
    context.update(get_pagination_context(request, projects, max_count))
    if request.is_ajax():
        projects_html = render_to_string('projects/_learn_projects.html',
            context, context_instance=RequestContext(request))
        projects_pagination = render_to_string('projects/_learn_pagination.html',
            context, context_instance=RequestContext(request))
        learn_header = render_to_string('projects/_learn_header.html',
            context, context_instance=RequestContext(request))
        learn_filters = render_to_string('projects/_learn_filters.html',
            context, context_instance=RequestContext(request))
        data = {
            'projects_html': projects_html,
            'projects_pagination': projects_pagination,
            'learn_header': learn_header,
            'learn_filters': learn_filters,
        }
        json = simplejson.dumps(data)
        return http.HttpResponse(json, mimetype="application/json")
    return render_to_response('projects/learn.html', context,
        context_instance=RequestContext(request))