Skip to content

Commit a4b726f

Browse files
committed
Allow re-requests for content review
1 parent 2394e3c commit a4b726f

File tree

4 files changed

+80
-22
lines changed

4 files changed

+80
-22
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<h3>{{ distro_tag(amo.CHANNEL_LISTED)}} {{ _('Listing visibility') }}</h3>
2+
<div class="item" id="addon-current-state">
3+
<div class="item_wrapper">
4+
{% if addon.status == amo.STATUS_REJECTED %}
5+
<label><input name="addon-state" value="disabled" type="radio"
6+
{% if addon.status == amo.STATUS_DISABLED %}disabled="disabled"{% endif %}
7+
{% if not addon.is_disabled %}checked="checked"{% endif %}
8+
data-url="{{ addon.get_dev_url('rejected_review_request') }}"
9+
class="rejected_review_request">
10+
{{ _("{label_open}Rejected:{label_close} Add-on listing content is rejected. It won't be included in search results, "
11+
"and its product page will be unavailable. New listed version submissions won't be accepted in this state.")|format_html(
12+
label_open='<strong>'|safe, label_close='</strong>'|safe, site_url=settings.SITE_URL)|safe }}</label>
13+
{% else %}
14+
<label><input name="addon-state" value="listed" type="radio"
15+
{% if addon.status == amo.STATUS_DISABLED %}disabled="disabled"{% endif %}
16+
{% if not addon.is_disabled %}checked="checked"{% endif %}
17+
data-url="{{ addon.get_dev_url('enable') }}"
18+
class="enable-addon">
19+
{{ _("{label_open}Visible:{label_close} Visible to everyone on {site_url} and included "
20+
"in search results and product pages.")|format_html(
21+
label_open='<strong>'|safe, label_close='</strong>'|safe, site_url=settings.SITE_URL)|safe }}</label>
22+
{% endif %}
23+
24+
<br>
25+
<label><input name="addon-state" value="hidden" type="radio"
26+
{% if addon.status == amo.STATUS_DISABLED %}disabled="disabled"{% endif %}
27+
{% if addon.is_disabled %}checked="checked"{% endif %}
28+
class="disable-addon">
29+
{{ _("{label_open}Invisible:{label_close} Won't be included in search results, and its product page will "
30+
"indicate you disabled it. New version submissions for product "
31+
"won't be accepted in this state.")|format_html(
32+
label_open='<strong>'|safe, label_close='</strong>'|safe) }}</label>
33+
34+
{% if addon.status == amo.STATUS_REJECTED %}
35+
<div>
36+
{{ _('Our review found that your listing content violates the following Mozilla policy or policies:') }}
37+
<ul>
38+
{% for text in rejected_policy_texts %}
39+
<li>{{ text }}</li>
40+
{% endfor %}
41+
</ul>
42+
{% if rejection_manual_reasoning_text %}{{ rejection_manual_reasoning_text }}. {% endif %}
43+
</div>
44+
<div>
45+
{{ _('To address these issues, please update your listing content and submit a new version for review.') }}
46+
<button class="rejected_review_request"
47+
data-url="{{ addon.get_dev_url('rejected_review_request') }}">
48+
{{ _('I have addressed the issues and request a review') }}
49+
</button>
50+
</div>
51+
{% endif %}
52+
</div>
53+
</div>

src/olympia/devhub/templates/devhub/versions/list.html

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -152,28 +152,7 @@ <h2>{{ addon.name }}</h2>
152152
{# Only show listing visibility if there are listed versions... or if somehow the add-on is already invisible,
153153
to allow developers to toggle it back so that they can upload listed versions #}
154154
{% if has_listed_versions or addon.disabled_by_user %}
155-
<h3>{{ distro_tag(amo.CHANNEL_LISTED)}} {{ _('Listing visibility') }}</h3>
156-
<div class="item" id="addon-current-state">
157-
<div class="item_wrapper">
158-
<label><input name="addon-state" value="listed" type="radio"
159-
{% if addon.status == amo.STATUS_DISABLED %}disabled="disabled"{% endif %}
160-
{% if not addon.is_disabled %}checked="checked"{% endif %}
161-
data-url="{{ addon.get_dev_url('enable') }}"
162-
class="enable-addon">
163-
{{ _("{label_open}Visible:{label_close} Visible to everyone on {site_url} and included "
164-
"in search results and product pages.")|format_html(
165-
label_open='<strong>'|safe, label_close='</strong>'|safe, site_url=settings.SITE_URL)|safe }}</label>
166-
<br>
167-
<label><input name="addon-state" value="hidden" type="radio"
168-
{% if addon.status == amo.STATUS_DISABLED %}disabled="disabled"{% endif %}
169-
{% if addon.is_disabled %}checked="checked"{% endif %}
170-
class="disable-addon">
171-
{{ _("{label_open}Invisible:{label_close} Won't be included in search results, and its product page will "
172-
"indicate you disabled it. New version submissions for product "
173-
"won't be accepted in this state.")|format_html(
174-
label_open='<strong>'|safe, label_close='</strong>'|safe) }}</label>
175-
</div>
176-
</div>
155+
{% include "devhub/includes/listing_visibility.html" %}
177156
{% if latest_listed_version or current_version %}
178157
<h3>{{ distro_tag(amo.CHANNEL_LISTED)}} {{ _('Listed versions') }}</h3>
179158
{% endif %}

src/olympia/devhub/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
re_path(r'^delete$', views.delete, name='devhub.addons.delete'),
2121
re_path(r'^disable$', views.disable, name='devhub.addons.disable'),
2222
re_path(r'^enable$', views.enable, name='devhub.addons.enable'),
23+
re_path(
24+
r'^rejected-review-request$',
25+
views.rejected_review_request,
26+
name='devhub.addons.rejected_review_request',
27+
),
2328
re_path(
2429
r'^cancel-latest-(?P<channel>listed|unlisted)$',
2530
views.cancel,

src/olympia/devhub/views.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,13 @@ def disable(request, addon_id, addon):
423423
return redirect(addon.get_dev_url('versions'))
424424

425425

426+
@dev_required
427+
@post_required
428+
def rejected_review_request(request, addon_id, addon):
429+
# something something request a new content review
430+
return redirect(addon.get_dev_url('versions'))
431+
432+
426433
# Can't use @dev_required, as the user is not a developer yet. Can't use
427434
# @addon_view_factory either, because it requires a developer for unlisted
428435
# add-ons. So we just @login_required and retrieve the addon ourselves in the
@@ -1306,6 +1313,14 @@ def version_list(request, addon_id, addon):
13061313
rollback_form = forms.RollbackVersionForm(
13071314
request.POST if was_rollback_submit else None, addon=addon
13081315
)
1316+
rejected_log = (
1317+
addon.status == amo.STATUS_REJECTED
1318+
and ActivityLog.objects.filter(
1319+
addonlog__addon=addon, action=amo.LOG.REJECT_LISTING_CONTENT.id
1320+
)
1321+
.order_by('-created')
1322+
.first()
1323+
)
13091324

13101325
if was_rollback_submit and rollback_form.is_valid():
13111326
duplicate_addon_version_for_rollback.delay(
@@ -1335,6 +1350,12 @@ def version_list(request, addon_id, addon):
13351350
.values_list('version', flat=True)
13361351
.first(),
13371352
'is_admin': is_admin,
1353+
'rejection_manual_reasoning_text': rejected_log.details.get('comments', '')
1354+
if rejected_log
1355+
else '',
1356+
'rejected_policy_texts': rejected_log.details.get('policy_texts', [])
1357+
if rejected_log
1358+
else [],
13381359
'rollback_form': rollback_form,
13391360
'session_id': request.session.session_key,
13401361
'versions': versions,

0 commit comments

Comments
 (0)