Example #1
0
def review_list(request, addon, review_id=None, user_id=None, rating=None):
    qs = Review.objects.valid().filter(addon=addon).order_by('-created')

    ctx = {'product': addon, 'score': rating, 'review_perms': {}}

    if review_id is not None:
        qs = qs.filter(pk=review_id)
        ctx['page'] = 'detail'
        # If this is a dev reply, find the first msg for context.
        review = get_object_or_404(Review, pk=review_id)
        if review.reply_to_id:
            review_id = review.reply_to_id
            ctx['reply'] = review
    elif user_id is not None:
        qs = qs.filter(user=user_id)
        ctx['page'] = 'user'
        if not qs:
            raise http.Http404()
    else:
        ctx['page'] = 'list'
        qs = qs.filter(is_latest=True)

    ctx['ratings'] = ratings = amo.utils.paginate(request, qs, 20)
    if not ctx.get('reply'):
        ctx['replies'] = Review.get_replies(ratings.object_list)
    if request.user.is_authenticated():
        ctx['review_perms'] = {
            'is_admin': acl.action_allowed(request, 'Addons', 'Edit'),
            'is_editor': acl.check_reviewer(request),
            'is_author': acl.check_addon_ownership(request, addon, viewer=True,
                                                   dev=True, support=True),
        }
        ctx['flags'] = get_flags(request, ratings.object_list)
        ctx['has_review'] = addon.reviews.filter(user=request.user.id).exists()
    return jingo.render(request, 'ratings/listing.html', ctx)
Example #2
0
def review_list(request, addon, review_id=None, user_id=None, rating=None):
    qs = Review.objects.valid().filter(addon=addon).order_by('-created')

    # Mature regions show only reviews from within that region.
    if not request.REGION.adolescent:
        qs = qs.filter(client_data__region=request.REGION.id)
    ctx = {'product': addon, 'score': rating, 'review_perms': {}}

    if review_id is not None:
        qs = qs.filter(pk=review_id)
        ctx['page'] = 'detail'
    elif user_id is not None:
        qs = qs.filter(user=user_id)
        ctx['page'] = 'user'
        if not qs:
            raise http.Http404()
    else:
        ctx['page'] = 'list'
        qs = qs.filter(is_latest=True)

    ctx['ratings'] = ratings = amo.utils.paginate(request, qs, 20)
    if request.user.is_authenticated():
        ctx['review_perms'] = {
            'is_admin': acl.action_allowed(request, 'Addons', 'Edit'),
            'is_editor': acl.check_reviewer(request),
            'is_author': acl.check_addon_ownership(request, addon, viewer=True,
                                                   dev=True, support=True),
        }
        ctx['flags'] = get_flags(request, ratings.object_list)
        ctx['has_review'] = addon.reviews.filter(user=request.user.id).exists()
    return jingo.render(request, 'ratings/listing.html', ctx)
Example #3
0
def detail(request, addon, add_review=False):
    """Product details page."""
    reviews = Review.objects.valid().filter(addon=addon, is_latest=True)
    # Mature regions show only reviews from within that region.
    if not request.REGION.adolescent:
        reviews = reviews.filter(client_data__region=request.REGION.id)
    reviewed_filter = dict(user=request.user.id)
    if addon.is_packaged:
        reviewed_filter['version'] = addon.current_version
    num_reviews = 6 if request.TABLET or not request.MOBILE else 2
    user_review = reviews.filter(**reviewed_filter)
    ctx = {
        'product': addon,
        'reviews': reviews[:num_reviews],
        'flags': get_flags(request, reviews),
        'has_review': request.user.is_authenticated() and
                      user_review.exists(),
        'grouped_ratings': GroupedRating.get(addon.id),
        'details_page': True,
        'add_review': add_review,
    }
    if ctx['has_review']:
        ctx['my_review'] = user_review[0]
    if addon.is_public():
        ctx['abuse_form'] = AbuseForm(request=request)
    return jingo.render(request, 'detail/app.html', ctx)
Example #4
0
def detail(request, addon):
    """Theme details page."""
    theme = addon.persona

    categories = [category for category in addon.all_categories if
                  category.application.id == amo.FIREFOX.id]
    if categories:
        qs = Addon.objects.public().filter(categories=categories[0])
        category_themes = _category_themes(qs, limit=6)
    else:
        category_themes = None

    reviews = Review.objects.valid().filter(addon=addon, is_latest=True)

    data = {
        'product': addon,
        'reviews': reviews[:2],
        'flags': get_flags(request, reviews),
        'has_review': request.user.is_authenticated() and
                      reviews.filter(user=request.user.id).exists(),
        'categories': categories,
        'category_themes': category_themes,
        'author_themes': theme.authors_other_addons(request.APP)[:3],
        'theme': theme,
    }
    if not theme.is_new():
        # Remora uses persona.author despite there being a display_username.
        data['author_gallery'] = settings.PERSONAS_USER_ROOT % theme.author

    return jingo.render(request, 'themes/detail.html', data)
Example #5
0
def detail(request, addon, add_review=False):
    """Product details page."""
    reviews = Review.objects.valid().filter(addon=addon, is_latest=True)
    # Mature regions show only reviews from within that region.
    if not request.REGION.adolescent:
        reviews = reviews.filter(client_data__region=request.REGION.id)
    reviewed_filter = dict(user=request.user.id)
    if addon.is_packaged:
        reviewed_filter['version'] = addon.current_version
    num_reviews = 6 if request.TABLET or not request.MOBILE else 2
    user_review = reviews.filter(**reviewed_filter)
    ctx = {
        'product': addon,
        'reviews': reviews[:num_reviews],
        'flags': get_flags(request, reviews),
        'has_review': request.user.is_authenticated() and user_review.exists(),
        'grouped_ratings': GroupedRating.get(addon.id),
        'details_page': True,
        'add_review': add_review,
    }
    if ctx['has_review']:
        ctx['my_review'] = user_review[0]
    if addon.is_public():
        ctx['abuse_form'] = AbuseForm(request=request)
    return jingo.render(request, 'detail/app.html', ctx)
Example #6
0
def detail(request, addon):
    """Theme details page."""
    theme = addon.persona

    categories = [category for category in addon.all_categories if
                  category.application.id == amo.FIREFOX.id]
    if categories:
        qs = Addon.objects.public().filter(categories=categories[0])
        category_themes = _category_themes(qs, limit=6)
    else:
        category_themes = None

    reviews = Review.objects.latest().filter(addon=addon)

    data = {
        'product': addon,
        'reviews': reviews[:2],
        'flags': get_flags(request, reviews),
        'has_review': request.user.is_authenticated() and
                      reviews.filter(user=request.user.id).exists(),
        'categories': categories,
        'category_themes': category_themes,
        'author_themes': theme.authors_other_addons(request.APP)[:3],
        'theme': theme,
    }
    if not theme.is_new():
        # Remora uses persona.author despite there being a display_username.
        data['author_gallery'] = settings.PERSONAS_USER_ROOT % theme.author

    return jingo.render(request, 'themes/detail.html', data)
Example #7
0
def detail(request, addon):
    """Product details page."""
    reviews = Review.objects.latest().filter(addon=addon)
    ctx = {
        "product": addon,
        "reviews": reviews[:2],
        "flags": get_flags(request, reviews),
        "has_review": request.user.is_authenticated() and reviews.filter(user=request.user.id).exists(),
        "grouped_ratings": GroupedRating.get(addon.id),
    }
    if addon.is_public():
        ctx["abuse_form"] = AbuseForm(request=request)
    return jingo.render(request, "detail/app.html", ctx)
Example #8
0
def detail(request, addon):
    """Product details page."""
    reviews = Review.objects.latest().filter(addon=addon)
    ctx = {
        'product': addon,
        'reviews': reviews[:2],
        'flags': get_flags(request, reviews),
        'has_review': request.user.is_authenticated() and
                      reviews.filter(user=request.user.id).exists(),
        'grouped_ratings': GroupedRating.get(addon.id)
    }
    if addon.is_public():
        ctx['abuse_form'] = AbuseForm(request=request)
    return jingo.render(request, 'detail/app.html', ctx)
Example #9
0
def review_list(request, addon, review_id=None, user_id=None, rating=None):
    qs = Rating.objects.valid().filter(addon=addon).order_by('-created')

    ctx = {'product': addon, 'score': rating, 'review_perms': {}}

    # If we want to filter by only positive or only negative.
    score = {'positive': 1, 'negative': -1}.get(rating)
    if score:
        qs = qs.filter(score=score)

    if review_id is not None:
        qs = qs.filter(pk=review_id)
        ctx['page'] = 'detail'
        # If this is a dev reply, find the first msg for context.
        review = get_object_or_404(Rating, pk=review_id)
        if review.reply_to_id:
            review_id = review.reply_to_id
            ctx['reply'] = review
    elif user_id is not None:
        qs = qs.filter(user=user_id)
        ctx['page'] = 'user'
        if not qs:
            raise http.Http404()
    else:
        ctx['page'] = 'list'
        qs = qs.filter(is_latest=True)

    ctx['ratings'] = ratings = amo.utils.paginate(request, qs)
    ctx['replies'] = Rating.get_replies(ratings.object_list)
    ctx['review_history'] = [[2, 12], [50, 2], [3, 0], [4, 1]]
    if request.user.is_authenticated():
        ctx['review_perms'] = {
            'is_admin':
            acl.action_allowed(request, 'Addons', 'Edit'),
            'is_editor':
            acl.check_reviewer(request),
            'is_author':
            acl.check_addon_ownership(request,
                                      addon,
                                      viewer=True,
                                      dev=True,
                                      support=True),
        }
        ctx['flags'] = get_flags(request, ratings.object_list)
    return jingo.render(request, 'ratings/listing.html', ctx)
Example #10
0
def review_list(request, addon, review_id=None, user_id=None, rating=None):
    qs = Review.objects.valid().filter(addon=addon).order_by('-created')

    ctx = {'product': addon, 'score': rating, 'review_perms': {}}

    if review_id is not None:
        qs = qs.filter(pk=review_id)
        ctx['page'] = 'detail'
        # If this is a dev reply, find the first msg for context.
        review = get_object_or_404(Review, pk=review_id)
        if review.reply_to_id:
            review_id = review.reply_to_id
            ctx['reply'] = review
    elif user_id is not None:
        qs = qs.filter(user=user_id)
        ctx['page'] = 'user'
        if not qs:
            raise http.Http404()
    else:
        ctx['page'] = 'list'
        qs = qs.filter(is_latest=True)

    ctx['ratings'] = ratings = amo.utils.paginate(request, qs, 20)
    if not ctx.get('reply'):
        ctx['replies'] = Review.get_replies(ratings.object_list)
    if request.user.is_authenticated():
        ctx['review_perms'] = {
            'is_admin':
            acl.action_allowed(request, 'Addons', 'Edit'),
            'is_editor':
            acl.check_reviewer(request),
            'is_author':
            acl.check_addon_ownership(request,
                                      addon,
                                      viewer=True,
                                      dev=True,
                                      support=True),
        }
        ctx['flags'] = get_flags(request, ratings.object_list)
        ctx['has_review'] = addon.reviews.filter(user=request.user.id).exists()
    return jingo.render(request, 'ratings/listing.html', ctx)
Example #11
0
def detail(request, addon):
    """Product details page."""
    reviews = Review.objects.latest().filter(addon=addon)
    ctx = {
        'product':
        addon,
        'reviews':
        reviews[:2],
        'flags':
        get_flags(request, reviews),
        'has_review':
        request.user.is_authenticated()
        and reviews.filter(user=request.user.id).exists(),
        'grouped_ratings':
        GroupedRating.get(addon.id),
        'details_page':
        True
    }
    if addon.is_public():
        ctx['abuse_form'] = AbuseForm(request=request)
    return jingo.render(request, 'detail/app.html', ctx)
Example #12
0
def review_list(request, addon, review_id=None, user_id=None, rating=None):
    qs = Review.objects.valid().filter(addon=addon).order_by('-created')

    # Mature regions show only reviews from within that region.
    if not request.REGION.adolescent:
        qs = qs.filter(client_data__region=request.REGION.id)
    ctx = {'product': addon, 'score': rating, 'review_perms': {}}

    if review_id is not None:
        qs = qs.filter(pk=review_id)
        ctx['page'] = 'detail'
    elif user_id is not None:
        qs = qs.filter(user=user_id)
        ctx['page'] = 'user'
        if not qs:
            raise http.Http404()
    else:
        ctx['page'] = 'list'
        qs = qs.filter(is_latest=True)

    ctx['ratings'] = ratings = amo.utils.paginate(request, qs, 20)
    if request.user.is_authenticated():
        ctx['review_perms'] = {
            'is_admin':
            acl.action_allowed(request, 'Addons', 'Edit'),
            'is_editor':
            acl.check_reviewer(request),
            'is_author':
            acl.check_addon_ownership(request,
                                      addon,
                                      viewer=True,
                                      dev=True,
                                      support=True),
        }
        ctx['flags'] = get_flags(request, ratings.object_list)
        ctx['has_review'] = addon.reviews.filter(user=request.user.id).exists()
    return jingo.render(request, 'ratings/listing.html', ctx)