Beispiel #1
0
def document_listing(request, template, product_slug, topic_slug, subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(Topic, slug=topic_slug, product=product, parent__isnull=True)

    doc_kw = {"locale": request.LANGUAGE_CODE, "products": [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(Topic, slug=subtopic_slug, product=product, parent=topic)
        doc_kw["topics"] = [subtopic]
    else:
        subtopic = None
        doc_kw["topics"] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    user_agent = request.META.get("HTTP_USER_AGENT", "")
    browser = get_browser(user_agent)
    show_fx_download = product.slug == "thunderbird" and browser != "Firefox"

    return render(
        request,
        template,
        {
            "product": product,
            "topic": topic,
            "subtopic": subtopic,
            "topics": topics_for(product=product, parent=None),
            "subtopics": topics_for(product=product, parent=topic),
            "documents": documents,
            "fallback_documents": fallback_documents,
            "search_params": {"product": product_slug},
            "show_fx_download": show_fx_download,
        },
    )
Beispiel #2
0
def document_listing(request, template, product_slug, topic_slug,
                     subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(Topic, slug=topic_slug, product=product,
                              parent__isnull=True)

    doc_kw = {'locale': request.LANGUAGE_CODE, 'products': [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(Topic, slug=subtopic_slug,
                                     product=product, parent=topic)
        doc_kw['topics'] = [subtopic]
    else:
        subtopic = None
        doc_kw['topics'] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    return render(request, template, {
        'product': product,
        'topic': topic,
        'subtopic': subtopic,
        'topics': topics_for(product=product, parent=None),
        'subtopics': topics_for(product=product, parent=topic),
        'documents': documents,
        'fallback_documents': fallback_documents,
        'search_params': {'product': product_slug}
    })
Beispiel #3
0
def document_listing(request, product_slug, topic_slug, subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(
        Topic, slug=topic_slug, product=product, parent__isnull=True
    )
    template = "products/documents.html"

    doc_kw = {"locale": request.LANGUAGE_CODE, "products": [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(
            Topic, slug=subtopic_slug, product=product, parent=topic
        )
        doc_kw["topics"] = [subtopic]
    else:
        subtopic = None
        doc_kw["topics"] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    return render(
        request,
        template,
        {
            "product": product,
            "topic": topic,
            "subtopic": subtopic,
            "topics": topics_for(product=product, parent=None),
            "subtopics": topics_for(product=product, parent=topic),
            "documents": documents,
            "fallback_documents": fallback_documents,
            "search_params": {"product": product_slug},
        },
    )
Beispiel #4
0
def document_listing(request, template, product_slug, topic_slug, subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(Topic, slug=topic_slug, product=product, parent__isnull=True)

    doc_kw = {"locale": request.LANGUAGE_CODE, "products": [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(Topic, slug=subtopic_slug, product=product, parent=topic)
        doc_kw["topics"] = [subtopic]
    else:
        subtopic = None
        doc_kw["topics"] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    return render(
        request,
        template,
        {
            "product": product,
            "topic": topic,
            "subtopic": subtopic,
            "topics": topics_for(products=[product], parent=None),
            "subtopics": topics_for(products=[product], parent=topic),
            "documents": documents,
            "fallback_documents": fallback_documents,
            "search_params": {"product": product_slug},
        },
    )
Beispiel #5
0
def document_listing(request, template, product_slug, topic_slug,
                     subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(Topic, slug=topic_slug, product=product,
                              parent__isnull=True)

    doc_kw = {'locale': request.LANGUAGE_CODE, 'products': [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(Topic, slug=subtopic_slug,
                                     product=product, parent=topic)
        doc_kw['topics'] = [subtopic]
    else:
        subtopic = None
        doc_kw['topics'] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    user_agent = request.META.get('HTTP_USER_AGENT', '')
    browser = get_browser(user_agent)
    show_fx_download = (product.slug == 'thunderbird' and browser != 'Firefox')

    return render(request, template, {
        'product': product,
        'topic': topic,
        'subtopic': subtopic,
        'topics': topics_for(product=product, parent=None),
        'subtopics': topics_for(product=product, parent=topic),
        'documents': documents,
        'fallback_documents': fallback_documents,
        'search_params': {'product': product_slug},
        'show_fx_download': show_fx_download})
Beispiel #6
0
def hot_topics(request):
    """The hot topics landing page."""
    topics = get_list_or_404(Topic, slug=HOT_TOPIC_SLUG)

    data = dict(topic=topics[0])
    docs, fallback = documents_for(locale=request.LANGUAGE_CODE,
                                   topics=[topics[0]])
    data.update(documents=docs, fallback_documents=fallback)

    return render(request, 'landings/hot.html', data)
Beispiel #7
0
def hot_topics(request):
    """The hot topics landing page."""
    topic = get_object_or_404(Topic, slug='hot')

    data = dict(topic=topic)
    docs, fallback = documents_for(
        locale=request.LANGUAGE_CODE, topics=[topic])
    data.update(documents=docs, fallback_documents=fallback)

    return render(request, 'landings/hot.html', data)
Beispiel #8
0
def _fallback_results(locale, product_slugs):
    """Return the top 20 articles by votes for the given product(s)."""
    products = []
    for slug in product_slugs:
        try:
            p = Product.objects.get(slug=slug)
            products.append(p)
        except Product.DoesNotExist:
            pass

    docs, fallback = documents_for(locale, products=products)
    docs = docs + (fallback or [])

    return docs[:20]
Beispiel #9
0
def _fallback_results(locale, product_slugs):
    """Return the top 20 articles by votes for the given product(s)."""
    products = []
    for slug in product_slugs:
        try:
            p = Product.objects.get(slug=slug)
            products.append(p)
        except Product.DoesNotExist:
            pass

    docs, fallback = documents_for(locale, products=products)
    docs = docs + (fallback or [])

    return docs[:20]
Beispiel #10
0
def document_listing(request,
                     template,
                     product_slug,
                     topic_slug,
                     subtopic_slug=None):
    """The document listing page for a product + topic."""
    product = get_object_or_404(Product, slug=product_slug)
    topic = get_object_or_404(Topic,
                              slug=topic_slug,
                              product=product,
                              parent__isnull=True)

    doc_kw = {'locale': request.LANGUAGE_CODE, 'products': [product]}

    if subtopic_slug is not None:
        subtopic = get_object_or_404(Topic,
                                     slug=subtopic_slug,
                                     product=product,
                                     parent=topic)
        doc_kw['topics'] = [subtopic]
    else:
        subtopic = None
        doc_kw['topics'] = [topic]

    documents, fallback_documents = documents_for(**doc_kw)

    user_agent = request.META.get('HTTP_USER_AGENT', '')
    browser = get_browser(user_agent)
    show_fx_download = (product.slug == 'thunderbird' and browser != 'Firefox')

    return render(
        request, template, {
            'product': product,
            'topic': topic,
            'subtopic': subtopic,
            'topics': topics_for(product=product, parent=None),
            'subtopics': topics_for(product=product, parent=topic),
            'documents': documents,
            'fallback_documents': fallback_documents,
            'search_params': {
                'product': product_slug
            },
            'show_fx_download': show_fx_download
        })
Beispiel #11
0
def product_landing(request, template, slug):
    """The product landing page."""
    product = get_object_or_404(Product, slug=slug)

    if request.is_ajax():
        # Return a list of topics/subtopics for the product
        topic_list = list()
        for t in Topic.objects.filter(product=product, visible=True):
            topic_list.append({'id': t.id, 'title': t.title})
        return HttpResponse(json.dumps({'topics': topic_list}),
                            mimetype='application/json')

    try:
        topic = Topic.objects.get(product=product, slug=HOT_TOPIC_SLUG)

        hot_docs, fallback_hot_docs = documents_for(
            locale=request.LANGUAGE_CODE, topics=[topic], products=[product])
    except Topic.DoesNotExist:
        # "hot" topic doesn't exist, move on.
        hot_docs = fallback_hot_docs = None

    hot_questions = []
    try:
        hot_tag = Tag.objects.get(slug=HOT_TOPIC_SLUG)
        if request.LANGUAGE_CODE in settings.AAQ_LANGUAGES:
            hot_questions = Question.objects.filter(
                locale=request.LANGUAGE_CODE, products=product, tags=hot_tag)
            hot_questions = hot_questions.order_by('-created')[:3]
    except Tag.DoesNotExist:
        pass

    return render(
        request, template, {
            'product': product,
            'products': Product.objects.filter(visible=True),
            'topics': topics_for(products=[product], parent=None),
            'hot_docs': hot_docs,
            'hot_questions': hot_questions,
            'fallback_hot_docs': fallback_hot_docs,
            'search_params': {
                'product': slug
            }
        })
Beispiel #12
0
def product_landing(request, template, slug):
    """The product landing page."""
    product = get_object_or_404(Product, slug=slug)

    if request.is_ajax():
        # Return a list of topics/subtopics for the product
        topic_list = list()
        for t in Topic.objects.filter(product=product, visible=True):
            topic_list.append({'id': t.id, 'title': t.title})
        return HttpResponse(json.dumps({'topics': topic_list}),
                            mimetype='application/json')

    try:
        topic = Topic.objects.get(product=product, slug=HOT_TOPIC_SLUG)

        hot_docs, fallback_hot_docs = documents_for(
            locale=request.LANGUAGE_CODE,
            topics=[topic],
            products=[product])
    except Topic.DoesNotExist:
        # "hot" topic doesn't exist, move on.
        hot_docs = fallback_hot_docs = None

    hot_questions = []
    try:
        hot_tag = Tag.objects.get(slug=HOT_TOPIC_SLUG)
        if request.LANGUAGE_CODE in settings.AAQ_LANGUAGES:
            hot_questions = Question.objects.filter(
                locale=request.LANGUAGE_CODE,
                products=product,
                tags=hot_tag)
            hot_questions = hot_questions.order_by('-created')[:3]
    except Tag.DoesNotExist:
        pass

    return render(request, template, {
        'product': product,
        'products': Product.objects.filter(visible=True),
        'topics': topics_for(products=[product], parent=None),
        'hot_docs': hot_docs,
        'hot_questions': hot_questions,
        'fallback_hot_docs': fallback_hot_docs,
        'search_params': {'product': slug}})
Beispiel #13
0
def product_landing(request, template, slug):
    """The product landing page."""
    product = get_object_or_404(Product, slug=slug)

    try:
        topic = Topic.objects.get(product=product, slug=HOT_TOPIC_SLUG)

        hot_docs, fallback_hot_docs = documents_for(
            locale=request.LANGUAGE_CODE,
            topics=[topic],
            products=[product])
    except Topic.DoesNotExist:
        # "hot" topic doesn't exist, move on.
        hot_docs = fallback_hot_docs = None

    hot_questions = []
    try:
        hot_tag = Tag.objects.get(slug=HOT_TOPIC_SLUG)
        if request.LANGUAGE_CODE in settings.AAQ_LANGUAGES:
            hot_questions = Question.objects.filter(
                locale=request.LANGUAGE_CODE,
                products=product,
                tags=hot_tag)
            hot_questions = hot_questions.order_by('-created')[:3]
    except Tag.DoesNotExist:
        pass

    return render(request, template, {
        'product': product,
        'products': Product.objects.filter(visible=True),
        'topics': topics_for(
            products=[product],
            parent=None),
        'hot_docs': hot_docs,
        'hot_questions': hot_questions,
        'fallback_hot_docs': fallback_hot_docs,
        'search_params': {'product': slug}})
Beispiel #14
0
def product_landing(request, template, slug):
    """The product landing page."""
    product = get_object_or_404(Product, slug=slug)

    try:
        topic = Topic.objects.get(product=product, slug=HOT_TOPIC_SLUG)

        hot_docs, fallback_hot_docs = documents_for(locale=request.LANGUAGE_CODE, topics=[topic], products=[product])
    except Topic.DoesNotExist:
        # "hot" topic doesn't exist, move on.
        hot_docs = fallback_hot_docs = None

    return render(
        request,
        template,
        {
            "product": product,
            "products": Product.objects.filter(visible=True),
            "topics": topics_for(products=[product], parent=None),
            "hot_docs": hot_docs,
            "fallback_hot_docs": fallback_hot_docs,
            "search_params": {"product": slug},
        },
    )
Beispiel #15
0
 def test_documents_for_fallback(self):
     """Verify the fallback in documents_for."""
     general_bookmarks_documents, fallback = documents_for(
         locale="es", topics=[self.general_d, self.bookmarks_d])
     eq_(len(general_bookmarks_documents), 0)
     eq_(len(fallback), 1)
Beispiel #16
0
 def test_documents_for_fallback(self):
     """Verify the fallback in documents_for."""
     general_bookmarks_documents, fallback = documents_for(
         locale='es', topics=[self.general_d, self.bookmarks_d])
     eq_(len(general_bookmarks_documents), 0)
     eq_(len(fallback), 1)