Exemple #1
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))
Exemple #2
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))