Skip to content
This repository was archived by the owner on Jan 31, 2018. It is now read-only.

Commit 6a78715

Browse files
committed
[bug 1009784] Create dev generic feedback form
We need a parallel form and view so that we can make changes without affecting the existing one or the strings for it. To access, go to /feedback/genericdev .
1 parent d53f9bd commit 6a78715

3 files changed

Lines changed: 169 additions & 11 deletions

File tree

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
{% extends "feedback/base.html" %}
2+
3+
{% block page_title %}[DEV] {{ _('Submit Your Feedback') }}{% endblock %}
4+
5+
{% set extra_body_attrs = {'data-form-name': 'generic'} %}
6+
7+
{% block body %}
8+
<form id="responseform" action="" method="post">
9+
<x-deck transition-type="slide-left">
10+
<x-card id="intro">
11+
<x-appbar>
12+
<header>[DEV] {{ _('Submit Your Feedback') }}</header>
13+
</x-appbar>
14+
15+
<section>
16+
<div id="sentiment">
17+
<p>{{ _('Your feedback helps us improve Firefox.') }}</p>
18+
<div id="buttons">
19+
<button class="happy">{{ _('Firefox made me happy') }}</button>
20+
<button class="sad">{{ _('Firefox made me sad') }}</button>
21+
</div>
22+
</div>
23+
24+
<aside>
25+
<div>
26+
{% trans support_url='http://support.mozilla.org/' %}
27+
If you need help or have a problem
28+
with Firefox, please visit <a href="{{ support_url }}">Firefox Support</a>.
29+
{% endtrans %}
30+
</div>
31+
</aside>
32+
</section>
33+
</x-card>
34+
35+
<x-card id="moreinfo">
36+
<x-appbar>
37+
<button class="back"></button>
38+
<header>{{ _('Details') }}</header>
39+
</x-appbar>
40+
41+
<section>
42+
<aside>
43+
<div>
44+
{% trans %}
45+
The content of your feedback will be public, so please be
46+
sure not to include any personal information.
47+
{% endtrans %}
48+
</div>
49+
</aside>
50+
51+
<p>
52+
<label class="happy" for="description">
53+
{{ _('Please describe what you liked.') }}
54+
</label>
55+
<label class="sad" for="description">
56+
{{ _('Please describe your problem below.') }}
57+
{{ _('Please be as specific as you can.') }}
58+
</label>
59+
</p>
60+
61+
<div id="description-counter"></div>
62+
<textarea data-max-length="10000" id="description" name="description" cols="40" rows="4"></textarea>
63+
64+
<div>
65+
<label for="id_url">
66+
{{ _('If your feedback is related to a website, you can include it here.') }}
67+
</label>
68+
<p>{{ form.url }}</p>
69+
{{ form.url.errors }}
70+
</div>
71+
72+
<button id="description-next-btn" class="next btn submit">{{ _('Next') }}</button>
73+
</section>
74+
</x-card>
75+
76+
<x-card id="email">
77+
<x-appbar>
78+
<button class="back"></button>
79+
<header>{{ _('Can we contact you?') }}</header>
80+
</x-appbar>
81+
82+
<section>
83+
<label class="email-ok">
84+
<p>
85+
<input id="email-ok" type="checkbox" name="email_ok"/>
86+
{{ _('Check here to let us contact you to follow up on your feedback.') }}
87+
</p>
88+
</label>
89+
90+
<div id="email-details">
91+
<label for="id_email">
92+
{{ _('Email address (optional):') }}
93+
</label>
94+
<p>{{ form.email }}</p>
95+
{{ form.email.errors }}
96+
97+
<aside>
98+
<div>
99+
{% trans %}
100+
While your feedback will be publicly visible, email addresses are
101+
kept private. We understand your privacy is important.
102+
{% endtrans %}
103+
</div>
104+
</aside>
105+
</div>
106+
107+
<button id="form-submit-btn" class="complete btn submit">{{ _('Send Feedback') }}</button>
108+
</section>
109+
</x-card>
110+
111+
</x-deck>
112+
{% for hidden in form.hidden_fields() %}
113+
{{ hidden }}
114+
{% endfor %}
115+
{{ csrf() }}
116+
</form>
117+
{% endblock %}

fjord/feedback/tests/test_views.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,24 @@ def test_valid_sad(self):
113113

114114
def test_firefox_os_view(self):
115115
"""Firefox OS returns correct view"""
116+
# Firefox OS is the user agent
116117
url = reverse('feedback')
117118
ua = 'Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0'
118119

119120
r = self.client.get(url, HTTP_USER_AGENT=ua)
121+
self.assertTemplateUsed(r, 'feedback/mobile/fxos_feedback.html')
120122

123+
# Firefox OS specified in url
124+
url = reverse('feedback', args=(u'fxos',))
125+
r = self.client.get(url)
121126
self.assertTemplateUsed(r, 'feedback/mobile/fxos_feedback.html')
122127

128+
def test_generic_dev_view(self):
129+
# FIXME: Remove this when the dev view lands.
130+
url = reverse('feedback', args=(u'genericdev',))
131+
resp = self.client.get(url)
132+
self.assertTemplateUsed(resp, 'feedback/generic_feedback_dev.html')
133+
123134
def test_urls_locale(self):
124135
"""Test setting locale from the locale part of the url"""
125136
try:

fjord/feedback/views.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,21 @@ def generic_feedback(request, locale=None, product=None, version=None,
230230
})
231231

232232

233+
@csrf_protect
234+
def generic_feedback_dev(request, locale=None, product=None, version=None,
235+
channel=None):
236+
"""IN DEVELOPMENT NEXT GENERATION GENERIC FEEDBACK FORM"""
237+
form = ResponseForm()
238+
239+
if request.method == 'POST':
240+
return _handle_feedback_post(request, locale, product,
241+
version, channel)
242+
243+
return render(request, 'feedback/generic_feedback_dev.html', {
244+
'form': form,
245+
})
246+
247+
233248
@requires_firefox
234249
@csrf_exempt
235250
def firefox_os_stable_feedback(request, locale=None, product=None,
@@ -287,6 +302,11 @@ def android_about_feedback(request, locale=None, product=None,
287302
return _handle_feedback_post(request, locale)
288303

289304

305+
PRODUCT_OVERRIDE = {
306+
'genericdev': generic_feedback_dev,
307+
'fxos': firefox_os_stable_feedback,
308+
}
309+
290310
@csrf_exempt
291311
@never_cache
292312
def feedback_router(request, product=None, version=None, channel=None,
@@ -307,6 +327,8 @@ def feedback_router(request, product=None, version=None, channel=None,
307327
Note: We never want to cache this view.
308328
309329
"""
330+
view = None
331+
310332
if '_type' in request.POST:
311333
# Checks to see if `_type` is in the POST data and if so this
312334
# is coming from Firefox for Android which doesn't know
@@ -334,22 +356,30 @@ def feedback_router(request, product=None, version=None, channel=None,
334356
version = smart_str(version)
335357
channel = smart_str(channel).lower()
336358

337-
if product:
359+
if request.BROWSER.browser == 'Firefox OS':
360+
# Firefox OS gets shunted to a different form which has
361+
# different Firefox OS specific questions.
362+
view = firefox_os_stable_feedback
363+
product = 'fxos'
364+
365+
elif product:
338366
product = smart_str(product)
339-
# If they passed in a product and we don't know about it, stop
340-
# here.
341-
if product not in models.Product.get_product_map():
367+
368+
if product in PRODUCT_OVERRIDE:
369+
# If the product is really a form name, we use that
370+
# form specifically.
371+
view = PRODUCT_OVERRIDE[product]
372+
product = None
373+
374+
elif product not in models.Product.get_product_map():
375+
# If they passed in a product and we don't know about
376+
# it, stop here.
342377
return render(request, 'feedback/unknownproduct.html', {
343378
'product': product
344379
})
345380

346-
if product == 'fxos' or request.BROWSER.browser == 'Firefox OS':
347-
# Firefox OS gets shunted to a different form which has
348-
# different Firefox OS specific questions.
349-
view = firefox_os_stable_feedback
350-
351-
else:
352-
view = generic_feedback
381+
if view is None:
382+
view = generic_feedback
353383

354384
return view(request, request.locale, product, version, channel,
355385
*args, **kwargs)

0 commit comments

Comments
 (0)