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)
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)
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)
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)
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)
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)
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)
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)
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)