Esempio n. 1
0
def list_comments(request, return_raw_comments=False):
    terms = request.GET.get("terms", "")
    for_user = request.GET.get("foruser", "")

    page_title = "Latest comments on projects"
    filter_description = ""
    use_filter_description = False

    comments = Comment.objects.all().order_by("-pub_date")

    # For RSS feeds
    if return_raw_comments:
        return page_title, comments

    if for_user:
        for_user_obj = get_object_or_404(User, username=for_user)

        filter_description += "<li>user: %s</li>" % for_user
        page_title = "Latest comments for user '%s'" % for_user

        comments = comments.filter(author=for_user_obj)

    if terms:
        page_title = "Searching latest comments for '%s'" % terms
        use_filter_description = True
        query = get_query(terms, ["text"])
        comments = comments.filter(query)

    comments = comments.order_by("-pub_date")

    paginated_comments = get_paginator_page(request, comments, PROJECTS_PER_PAGE)

    return render_to_response(
        "projects/comment_list.html",
        {
            "page_title": page_title,
            "filter_description": use_filter_description and filter_description or None,
            "search_results_type": terms and "comments" or "",
            "search_terms": terms and terms or "",
            "paginated_comments": paginated_comments,
        },
        context_instance=RequestContext(request),
    )
Esempio n. 2
0
def list_projects(request, list_type="top", is_completed=None, return_raw_projects=False):
    user = request.user
    tags = request.GET.get("tags", "")
    for_user = request.GET.get("foruser", "")
    terms = request.GET.get("terms", "")

    projects = None

    page_title = "Project list"
    filter_description = ""

    # Filter by tags (comes first since we use TaggedItem.objects.get_by_model)
    if list_type == "recommend":
        profile = Profile.objects.get(user=user)
        user_tags = profile.get_tags()

        # get all projects matching >=1 of the user's tags
        projects = TaggedItem.objects.get_union_by_model(Project, user_tags)
    elif tags != "":
        projects = TaggedItem.objects.get_by_model(Project, tags)
        filter_description += "<li>tags: %s</li>" % tags
        # or select a first crude set of results to be filtered
    else:
        projects = Project.objects.all()

        # Filter by completeness
    if not is_completed is None:
        if is_completed:
            page_title = "Completed projects"
            projects = projects.filter(p_completed=True, wont_be_completed=False)
        else:
            page_title = "Proposed projects"
            projects = projects.filter(p_completed=False, wont_be_completed=False)

            # Filter by search terms
    if terms != "":
        page_title = "Search results for '%s'" % terms
        query = get_query(terms, ["title", "description_markdown"])
        projects = projects.filter(query)

        # Filter by user
    if for_user != "":
        filter_description += "<li>user: %s</li>" % for_user
        for_user_obj = get_object_or_404(User, username=for_user)
        projects = projects.filter(author=for_user_obj)

        # Prepare query string given filters, for link URLs
    qs = ""
    qs_dict = {}
    if tags:
        qs_dict["tags"] = tags
    if for_user:
        qs_dict["foruser"] = for_user
    if terms:
        qs_dict["terms"] = terms
    if qs_dict:
        qs = "?" + urllib.urlencode(qs_dict)

    top_url = "/projects/" + (is_completed and "completed" or "proposed") + "/top/" + qs
    new_url = "/projects/" + (is_completed and "completed" or "proposed") + "/new/" + qs
    mytags_url = "/projects/" + (is_completed and "completed" or "proposed") + "/recommend/" + qs
    this_page_url = None

    # Order results
    page_url = ""
    rss_url = ""
    if list_type == "new":
        this_page_url = new_url
        rss_url = "/projects/rss/" + (is_completed and "completed" or "proposed") + "/new/" + qs
        projects = projects.order_by("-pub_date")
    elif list_type == "recommend":
        this_page_url = mytags_url
    else:
        rss_url = "/projects/rss/" + (is_completed and "completed" or "proposed") + "/top/" + qs
        this_page_url = top_url
        if is_completed:
            projects = projects.order_by("-score_completed")
        else:
            projects = projects.order_by("-score_proposed")

            # For RSS feeds
    if return_raw_projects:
        return page_title, this_page_url, projects, list_type

    list_paginator_page = get_paginator_page(request, projects, PROJECTS_PER_PAGE)

    return render_to_response(
        "projects/project_list.html",
        {
            "project_list_page": list_paginator_page,
            "page_title": page_title,
            "list_type": list_type,
            "filter_description": filter_description,
            # TODO: also include tags in those urls
            "list_top_url": top_url,
            "list_new_url": new_url,
            "search_results_type": terms and "projects" or "",
            "search_terms": terms and terms or "",
            "rss_url": rss_url,
            "list_mytags_url": mytags_url,
        },
        context_instance=RequestContext(request),
    )