0001-backoffice-allow-manual-submission-channel-selection.patch
tests/test_backoffice_pages.py | ||
---|---|---|
1688 | 1688 |
resp = resp.form.submit('submit') |
1689 | 1689 |
assert 'XPLOPYbarZ' in resp.body |
1690 | 1690 | |
1691 |
def test_backoffice_submission_manual_channel(pub): |
|
1692 |
user = create_user(pub) |
|
1693 |
create_environment(pub) |
|
1694 | ||
1695 |
app = login(get_app(pub)) |
|
1696 |
resp = app.get('/backoffice/') |
|
1697 |
assert not 'Submission' in resp.body |
|
1698 |
app.get('/backoffice/submission/', status=403) |
|
1699 | ||
1700 |
formdef = FormDef.get_by_urlname('form-title') |
|
1701 |
formdef.backoffice_submission_roles = user.roles[:] |
|
1702 |
formdef.store() |
|
1703 |
resp = app.get('/backoffice/') |
|
1704 |
assert 'Submission' in resp.body |
|
1705 |
resp = app.get('/backoffice/submission/') |
|
1706 |
assert formdef.url_name in resp.body |
|
1707 | ||
1708 |
resp = resp.click(formdef.name) |
|
1709 |
assert resp.form['submission_channel'].attrs['type'] == 'hidden' |
|
1710 |
resp.form['submission_channel'] = 'mail' |
|
1711 |
resp.form['f1'] = 'test submission' |
|
1712 |
resp.form['f2'] = 'baz' |
|
1713 |
resp.form['f3'] = 'C' |
|
1714 |
resp = resp.form.submit('submit') |
|
1715 |
assert 'Check values then click submit.' in resp.body |
|
1716 | ||
1717 |
# final submit |
|
1718 |
resp = resp.form.submit('submit') |
|
1719 | ||
1720 |
formdata_no = resp.location.split('/')[-2] |
|
1721 |
data_class = formdef.data_class() |
|
1722 |
assert data_class.get(formdata_no).data['1'] == 'test submission' |
|
1723 |
assert data_class.get(formdata_no).data['2'] == 'baz' |
|
1724 |
assert data_class.get(formdata_no).status == 'wf-new' |
|
1725 |
assert data_class.get(formdata_no).user is None |
|
1726 |
assert data_class.get(formdata_no).backoffice_submission is True |
|
1727 |
assert data_class.get(formdata_no).submission_channel == 'mail' |
|
1728 | ||
1729 |
def test_backoffice_submission_no_manual_channel_with_welco(pub, welco_url): |
|
1730 |
user = create_user(pub) |
|
1731 |
create_environment(pub) |
|
1732 | ||
1733 |
formdef = FormDef.get_by_urlname('form-title') |
|
1734 |
formdef.backoffice_submission_roles = user.roles[:] |
|
1735 |
formdef.store() |
|
1736 | ||
1737 |
app = login(get_app(pub)) |
|
1738 |
resp = app.get('/backoffice/submission/%s/' % formdef.url_name) |
|
1739 |
assert 'submission_channel' not in resp.form.fields |
|
1740 | ||
1691 | 1741 |
def test_backoffice_wscall_failure_display(pub): |
1692 | 1742 |
create_user(pub) |
1693 | 1743 |
create_environment(pub) |
wcs/backoffice/submission.py | ||
---|---|---|
74 | 74 | |
75 | 75 |
def __init__(self, *args, **kwargs): |
76 | 76 |
super(FormFillPage, self).__init__(*args, **kwargs) |
77 |
self.selected_submission_channel = None |
|
77 | 78 |
self.remove_draft = RemoveDraftDirectory(self) |
78 | 79 | |
80 |
def _q_index(self, *args, **kwargs): |
|
81 |
self.selected_submission_channel = get_request().form.get('submission_channel') or '' |
|
82 |
return super(FormFillPage, self)._q_index(*args, **kwargs) |
|
83 | ||
79 | 84 |
def html_top(self, *args, **kwargs): |
80 | 85 |
return html_top('submission', *args, **kwargs) |
81 | 86 | |
... | ... | |
108 | 113 |
else: |
109 | 114 |
r += htmltext('<p>-</p>') |
110 | 115 | |
116 |
welco_url = get_publisher().get_site_option('welco_url', 'options') |
|
117 |
if not welco_url and not self.edit_mode: |
|
118 |
r += htmltext('<div class="submit-channel-selection" style="display: none;">') |
|
119 |
r += htmltext('<h3>%s</h3>') % _('Channel') |
|
120 |
r += htmltext('<select>') |
|
121 |
for channel_key, channel_label in [ |
|
122 |
('', '-'), |
|
123 |
('web', _('Web')), |
|
124 |
('mail', _('Mail')), |
|
125 |
('phone', _('Phone')), |
|
126 |
('counter', _('Counter'))]: |
|
127 |
selected = '' |
|
128 |
if self.selected_submission_channel == channel_key: |
|
129 |
selected = 'selected="selected"' |
|
130 |
r += htmltext('<option value="%s" %s>' % (channel_key, selected)) |
|
131 |
r += htmltext('%s</option>') % channel_label |
|
132 |
r += htmltext('</select>') |
|
133 |
r += htmltext('</div>') |
|
134 | ||
111 | 135 |
if formdata and formdata.submission_context: |
112 | 136 |
from .management import FormBackOfficeStatusPage |
113 | 137 |
r += FormBackOfficeStatusPage(self.formdef, formdata).get_extra_context_bar() |
... | ... | |
119 | 143 | |
120 | 144 |
return r.getvalue() |
121 | 145 | |
146 |
def create_view_form(self, *args, **kwargs): |
|
147 |
form = super(FormFillPage, self).create_view_form(*args, **kwargs) |
|
148 |
welco_url = get_publisher().get_site_option('welco_url', 'options') |
|
149 |
if not welco_url: |
|
150 |
form.add_hidden('submission_channel', self.selected_submission_channel) |
|
151 |
return form |
|
152 | ||
153 |
def create_form(self, *args, **kwargs): |
|
154 |
form = super(FormFillPage, self).create_form(*args, **kwargs) |
|
155 |
welco_url = get_publisher().get_site_option('welco_url', 'options') |
|
156 |
if not welco_url: |
|
157 |
form.add_hidden('submission_channel', self.selected_submission_channel) |
|
158 |
return form |
|
159 | ||
122 | 160 |
def form_side(self, step_no, page_no=0, log_detail=None, data=None, magictoken=None): |
123 | 161 |
r = TemplateIO(html=True) |
124 | 162 |
get_response().filter['sidebar'] = self.get_sidebar(data) |
... | ... | |
138 | 176 |
filled.backoffice_submission = True |
139 | 177 |
if not filled.submission_context: |
140 | 178 |
filled.submission_context = {} |
179 |
if self.selected_submission_channel: |
|
180 |
filled.submission_channel = self.selected_submission_channel |
|
141 | 181 |
filled.submission_context['agent_id'] = get_request().user.id |
142 | 182 |
filled.store() |
143 | 183 |
wcs/forms/root.py | ||
---|---|---|
336 | 336 |
magictoken = get_request().form['magictoken'] |
337 | 337 |
self.feed_current_data(magictoken) |
338 | 338 | |
339 |
form = self.formdef.create_form(page_no, displayed_fields)
|
|
339 |
form = self.create_form(page_no, displayed_fields) |
|
340 | 340 |
if page_error_messages: |
341 | 341 |
form.add_global_errors(page_error_messages) |
342 | 342 |
if getattr(session, 'ajax_form_token', None): |
... | ... | |
518 | 518 |
raise errors.AccessForbiddenError() |
519 | 519 |
return False |
520 | 520 | |
521 |
def create_form(self, *args, **kwargs): |
|
522 |
return self.formdef.create_form(*args, **kwargs) |
|
523 | ||
524 |
def create_view_form(self, *args, **kwargs): |
|
525 |
return self.formdef.create_view_form(*args, **kwargs) |
|
526 | ||
521 | 527 |
def _q_index(self, log_detail=None): |
522 | 528 |
self.check_role() |
523 | 529 |
if self.check_disabled(): |
... | ... | |
664 | 670 | |
665 | 671 |
self.feed_current_data(magictoken) |
666 | 672 | |
667 |
form = self.formdef.create_form(page_no)
|
|
673 |
form = self.create_form(page_no) |
|
668 | 674 |
form.add_submit('previous') |
669 | 675 |
if self.formdef.enable_tracking_codes: |
670 | 676 |
form.add_submit('removedraft') |
... | ... | |
763 | 769 |
v = field.convert_value_to_str(v) |
764 | 770 |
req.form['f%s' % k] = v |
765 | 771 |
if self.edit_mode: |
766 |
form = self.formdef.create_view_form(form_data, use_tokens=False)
|
|
772 |
form = self.create_view_form(form_data, use_tokens=False) |
|
767 | 773 |
return self.submitted_existing(form) |
768 | 774 |
if self.has_confirmation_page(): |
769 | 775 |
return self.validating(form_data) |
... | ... | |
818 | 824 |
return redirect(filled.get_url().rstrip('/')) |
819 | 825 | |
820 | 826 |
# so it gets FakeFileWidget in preview mode |
821 |
form = self.formdef.create_view_form(form_data,
|
|
827 |
form = self.create_view_form(form_data, |
|
822 | 828 |
use_tokens=self.has_confirmation_page()) |
823 | 829 |
if self.formdef.has_captcha and not (get_session().get_user() or get_session().won_captcha): |
824 | 830 |
form.add_captcha(hint='') |
... | ... | |
905 | 911 |
if not form_data: |
906 | 912 |
return result_error('missing data') |
907 | 913 | |
908 |
form = self.formdef.create_form(page_no)
|
|
914 |
form = self.create_form(page_no) |
|
909 | 915 |
data = self.formdef.get_data(form) |
910 | 916 |
if not data: |
911 | 917 |
return result_error('nothing to save') |
... | ... | |
1073 | 1079 |
r += self.form_side(step_no=1, data=data, |
1074 | 1080 |
magictoken=get_request().form['magictoken']) |
1075 | 1081 |
r += TextsDirectory.get_html_text('check-before-submit') |
1076 |
form = self.formdef.create_view_form(data)
|
|
1082 |
form = self.create_view_form(data) |
|
1077 | 1083 |
token_widget = form.get_widget(form.TOKEN_NAME) |
1078 | 1084 |
token_widget._parsed = True |
1079 | 1085 |
if self.formdef.has_captcha and not (get_session().get_user() or get_session().won_captcha): |
wcs/qommon/static/js/qommon.admin.js | ||
---|---|---|
61 | 61 |
return false; |
62 | 62 |
}); |
63 | 63 | |
64 |
/* submission channel */ |
|
65 |
$('div.submit-channel-selection').show().find('select').on('change', function() { |
|
66 |
$('input[type=hidden][name=submission_channel]').val($(this).val()); |
|
67 |
}); |
|
68 | ||
64 | 69 |
/* keep sidebar sticky */ |
65 | 70 |
if ($('#sidebar').length) { |
66 | 71 |
var $window = $(window); |
67 |
- |