コード例 #1
0
def deactivation_log(request):
    deactivations_qs = Deactivation.objects.order_by("-date")
    deactivations = simple_paginate(request,
                                    deactivations_qs,
                                    per_page=constants.DEACTIVATIONS_PER_PAGE)
    return render(request, "users/deactivation_log.html",
                  {"deactivations": deactivations})
コード例 #2
0
ファイル: views.py プロジェクト: wanglilong007/kitsune
def deactivation_log(request):
    deactivations_qs = Deactivation.objects.order_by('-date')
    deactivations = simple_paginate(request,
                                    deactivations_qs,
                                    per_page=constants.DEACTIVATIONS_PER_PAGE)
    return render(request, 'users/deactivation_log.html',
                  {'deactivations': deactivations})
コード例 #3
0
 def test_page_2_without_next(self):
     """Test page=2, doesn't have next page."""
     request = self.rf.get('/questions?page=2')
     queryset = [{}, {}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(2, page.number)
     assert page.has_previous()
     assert not page.has_next()
コード例 #4
0
 def test_page_2_without_next(self):
     """Test page=2, doesn't have next page."""
     request = self.rf.get('/questions?page=2')
     queryset = [{}, {}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(2, page.number)
     assert page.has_previous()
     assert not page.has_next()
コード例 #5
0
 def test_page_1_with_next(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=1')
     queryset = [{}, {}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(1, page.number)
     assert not page.has_previous()
     assert page.has_next()
コード例 #6
0
 def test_page_1_with_next(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=1')
     queryset = [{}, {}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(1, page.number)
     assert not page.has_previous()
     assert page.has_next()
コード例 #7
0
ファイル: views.py プロジェクト: chupahanks/kitsune
def deactivation_log(request):
    deactivations_qs = Deactivation.objects.order_by('-date')
    deactivations = simple_paginate(request, deactivations_qs,
                                    per_page=constants.DEACTIVATIONS_PER_PAGE)
    return render(request, 'users/deactivation_log.html', {
        'deactivations': deactivations})
コード例 #8
0
 def test_page_isnt_an_int(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=foo')
     queryset = [{}, {}]
     simple_paginate(request, queryset, per_page=2)
コード例 #9
0
 def test_page_2_empty(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=2')
     queryset = [{}, {}]
     simple_paginate(request, queryset, per_page=2)
コード例 #10
0
 def test_no_explicit_page(self):
     """No 'page' query param implies page 1."""
     request = self.rf.get('/questions')
     queryset = [{}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(1, page.number)
コード例 #11
0
 def test_page_isnt_an_int(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=foo')
     queryset = [{}, {}]
     simple_paginate(request, queryset, per_page=2)
コード例 #12
0
 def test_page_2_empty(self):
     """Test page=1, has next page."""
     request = self.rf.get('/questions?page=2')
     queryset = [{}, {}]
     simple_paginate(request, queryset, per_page=2)
コード例 #13
0
 def test_no_explicit_page(self):
     """No 'page' query param implies page 1."""
     request = self.rf.get('/questions')
     queryset = [{}, {}]
     page = simple_paginate(request, queryset, per_page=2)
     eq_(1, page.number)
コード例 #14
0
def deactivation_log(request):
    deactivations_qs = Deactivation.objects.order_by("-date")
    deactivations = simple_paginate(request, deactivations_qs, per_page=constants.DEACTIVATIONS_PER_PAGE)
    return render(request, "users/deactivation_log.html", {"deactivations": deactivations})
コード例 #15
0
ファイル: views.py プロジェクト: willoughbyrm/kitsune
def question_list(request, product_slug):
    """View the list of questions."""
    if settings.DISABLE_QUESTIONS_LIST_GLOBAL:
        messages.add_message(request, messages.WARNING,
                             "You cannot list questions at this time.")
        return HttpResponseRedirect("/")

    filter_ = request.GET.get("filter")
    owner = request.GET.get("owner",
                            request.session.get("questions_owner", "all"))
    show = request.GET.get("show")
    # Show defaults to NEEDS ATTENTION
    if show not in FILTER_GROUPS:
        show = "needs-attention"

    tagged = request.GET.get("tagged")
    tags = None
    topic_slug = request.GET.get("topic")

    order = request.GET.get("order", "updated")
    if order not in ORDER_BY:
        order == "updated"
    sort = request.GET.get("sort", "desc")

    product_slugs = product_slug.split(",")
    products = []

    if len(product_slugs) > 1 or product_slugs[0] != "all":
        for slug in product_slugs:
            products.append(get_object_or_404(Product, slug=slug))
        multiple = len(products) > 1
    else:
        # We want all products (no product filtering at all).
        if settings.DISABLE_QUESTIONS_LIST_ALL:
            messages.add_message(
                request, messages.WARNING,
                "You cannot list all questions at this time.")
            return HttpResponseRedirect("/")

        products = None
        multiple = True

    if topic_slug and not multiple:
        # We don't support topics when there is more than one product.
        # There is no way to know what product the topic applies to.
        try:
            topic = Topic.objects.get(slug=topic_slug, product=products[0])
        except Topic.DoesNotExist:
            topic = None
    else:
        topic = None

    question_qs = Question.objects

    if filter_ not in FILTER_GROUPS[show]:
        filter_ = None

    if filter_ == "new":
        question_qs = question_qs.new()
    elif filter_ == "unhelpful-answers":
        question_qs = question_qs.unhelpful_answers()
    elif filter_ == "needsinfo":
        question_qs = question_qs.needs_info()
    elif filter_ == "solution-provided":
        question_qs = question_qs.solution_provided()
    elif filter_ == "solved":
        question_qs = question_qs.solved()
    elif filter_ == "locked":
        question_qs = question_qs.locked()
    elif filter_ == "recently-unanswered":
        question_qs = question_qs.recently_unanswered()
    else:
        if show == "needs-attention":
            question_qs = question_qs.needs_attention()
        if show == "responded":
            question_qs = question_qs.responded()
        if show == "done":
            question_qs = question_qs.done()

    question_qs = question_qs.select_related("creator", "last_answer",
                                             "last_answer__creator")
    question_qs = question_qs.prefetch_related("topic", "topic__product")

    question_qs = question_qs.filter(creator__is_active=1)

    if not request.user.has_perm("flagit.can_moderate"):
        question_qs = question_qs.filter(is_spam=False)

    if owner == "mine" and request.user.is_authenticated:
        criteria = Q(answers__creator=request.user) | Q(creator=request.user)
        question_qs = question_qs.filter(criteria).distinct()
    else:
        owner = None

    feed_urls = ((
        urlparams(reverse("questions.feed"),
                  product=product_slug,
                  topic=topic_slug),
        QuestionsFeed().title(),
    ), )

    if tagged:
        tag_slugs = tagged.split(",")
        tags = Tag.objects.filter(slug__in=tag_slugs)
        if tags:
            for t in tags:
                question_qs = question_qs.filter(tags__name__in=[t.name])
            if len(tags) == 1:
                feed_urls += ((
                    reverse("questions.tagged_feed", args=[tags[0].slug]),
                    TaggedQuestionsFeed().title(tags[0]),
                ), )
        else:
            question_qs = Question.objects.none()

    # Exclude questions over 90 days old without an answer.
    oldest_date = date.today() - timedelta(days=90)
    question_qs = question_qs.exclude(created__lt=oldest_date, num_answers=0)

    # Filter by products.
    if products:
        # This filter will match if any of the products on a question have the
        # correct id.
        question_qs = question_qs.filter(product__in=products).distinct()

    # Filter by topic.
    if topic:
        # This filter will match if any of the topics on a question have the
        # correct id.
        question_qs = question_qs.filter(topic__id=topic.id)

    # Filter by locale for AAQ locales, and by locale + default for others.
    if request.LANGUAGE_CODE in QuestionLocale.objects.locales_list():
        locale_query = Q(locale=request.LANGUAGE_CODE)
    else:
        locale_query = Q(locale=request.LANGUAGE_CODE)
        locale_query |= Q(locale=settings.WIKI_DEFAULT_LANGUAGE)

    question_qs = question_qs.filter(locale_query)

    # Set the order.
    # Set a default value if a user requested a non existing order parameter
    order_by = ORDER_BY.get(order, ["updated"])[0]
    question_qs = question_qs.order_by(order_by if sort == "asc" else "-%s" %
                                       order_by)

    try:
        questions_page = simple_paginate(request,
                                         question_qs,
                                         per_page=config.QUESTIONS_PER_PAGE)
    except (PageNotAnInteger, EmptyPage):
        # If we aren't on page 1, redirect there.
        # TODO: Is 404 more appropriate?
        if request.GET.get("page", "1") != "1":
            url = build_paged_url(request)
            return HttpResponseRedirect(urlparams(url, page=1))

    # Recent answered stats
    extra_filters = locale_query

    if products:
        extra_filters &= Q(product__in=products)

    recent_asked_count = Question.recent_asked_count(extra_filters)
    recent_unanswered_count = Question.recent_unanswered_count(extra_filters)
    if recent_asked_count:
        recent_answered_percent = int(
            (float(recent_asked_count - recent_unanswered_count) /
             recent_asked_count) * 100)
    else:
        recent_answered_percent = 0

    # List of products to fill the selector.
    product_list = Product.objects.filter(visible=True)

    # List of topics to fill the selector. Only shows if there is exactly
    # one product selected.
    if products and not multiple:
        topic_list = Topic.objects.filter(visible=True,
                                          product=products[0])[:10]
    else:
        topic_list = []

    # Store current filters in the session
    if request.user.is_authenticated:
        request.session["questions_owner"] = owner

    data = {
        "questions": questions_page,
        "feeds": feed_urls,
        "filter": filter_,
        "owner": owner,
        "show": show,
        "filters": FILTER_GROUPS[show],
        "order": order,
        "orders": ORDER_BY,
        "sort": sort,
        "tags": tags,
        "tagged": tagged,
        "recent_asked_count": recent_asked_count,
        "recent_unanswered_count": recent_unanswered_count,
        "recent_answered_percent": recent_answered_percent,
        "product_list": product_list,
        "products": products,
        "product_slug": product_slug,
        "multiple_products": multiple,
        "all_products": product_slug == "all",
        "topic_list": topic_list,
        "topic": topic,
    }

    return render(request, "questions/question_list.html", data)