settings: add option to have backoffice submission hidden or a redirect (#33549) #1200
|
@ -1084,17 +1084,31 @@ def test_i18n(pub):
|
|||
def test_submission_channels(pub):
|
||||
create_superuser(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/settings/submission-channels')
|
||||
resp = app.get('/backoffice/settings/backoffice-submission')
|
||||
resp.form['include-in-global-listing'].checked = True
|
||||
resp = resp.form.submit('submit')
|
||||
|
||||
pub.reload_cfg()
|
||||
assert pub.cfg['submission-channels']['include-in-global-listing'] is True
|
||||
|
||||
resp = app.get('/backoffice/settings/submission-channels')
|
||||
resp = app.get('/backoffice/settings/backoffice-submission')
|
||||
assert resp.form['include-in-global-listing'].checked
|
||||
|
||||
|
||||
def test_backoffice_submission(pub):
|
||||
create_superuser(pub)
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/settings/backoffice-submission')
|
||||
resp.form['redirect'] = 'https://example.net'
|
||||
resp = resp.form.submit('submit')
|
||||
|
||||
pub.reload_cfg()
|
||||
assert pub.cfg['backoffice-submission']['redirect'] == 'https://example.net'
|
||||
|
||||
resp = app.get('/backoffice/settings/backoffice-submission')
|
||||
assert resp.form['redirect'].value == 'https://example.net'
|
||||
|
||||
|
||||
def test_hobo_locked_settings(pub):
|
||||
create_superuser(pub)
|
||||
app = login(get_app(pub))
|
||||
|
|
|
@ -161,6 +161,52 @@ def test_backoffice_submission(pub):
|
|||
assert resp.location == 'http://www.example.org/'
|
||||
|
||||
|
||||
def test_backoffice_submission_menu_entry(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = []
|
||||
formdef.workflow_roles = {'_receiver': 1}
|
||||
formdef.backoffice_submission_roles = user.roles[:]
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/management/forms')
|
||||
assert resp.pyquery('#sidepage-menu .icon-submission')
|
||||
|
||||
pub.cfg['backoffice-submission'] = {}
|
||||
pub.cfg['backoffice-submission']['sidebar_menu_entry'] = 'visible'
|
||||
pub.write_cfg()
|
||||
resp = app.get('/backoffice/submission/', status=200)
|
||||
assert resp.pyquery('#sidepage-menu .icon-submission')
|
||||
|
||||
pub.cfg['backoffice-submission']['sidebar_menu_entry'] = 'redirect'
|
||||
pub.cfg['backoffice-submission']['redirect'] = 'https://example.net/'
|
||||
pub.write_cfg()
|
||||
resp = app.get('/backoffice/management/forms')
|
||||
assert resp.pyquery('#sidepage-menu .icon-submission')
|
||||
resp = app.get('/backoffice/submission/', status=302)
|
||||
assert resp.location == 'https://example.net/'
|
||||
|
||||
pub.cfg['backoffice-submission']['sidebar_menu_entry'] = 'hidden'
|
||||
pub.write_cfg()
|
||||
resp = app.get('/backoffice/management/forms')
|
||||
assert not resp.pyquery('#sidepage-menu .icon-submission')
|
||||
resp = app.get('/backoffice/submission/', status=302)
|
||||
assert resp.location == 'https://example.net/'
|
||||
|
||||
pub.cfg['backoffice-submission'][
|
||||
'redirect'
|
||||
] = '{% if session_user_email == "admin@localhost" %}https://example.net/{% endif %}'
|
||||
pub.write_cfg()
|
||||
app.get('/backoffice/submission/', status=302) # redirection
|
||||
user.email = 'admin2@localhost'
|
||||
user.store()
|
||||
app.get('/backoffice/submission/', status=200) # native screen
|
||||
|
||||
|
||||
def test_backoffice_submission_with_tracking_code(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -487,7 +487,7 @@ class SettingsDirectory(AccessControlled, Directory):
|
|||
('data-sources', 'data_sources'),
|
||||
'wscalls',
|
||||
('api-access', 'api_access'),
|
||||
('submission-channels', 'submission_channels'),
|
||||
('backoffice-submission', 'backoffice_submission'),
|
||||
]
|
||||
|
||||
emails = EmailsDirectory()
|
||||
|
@ -636,10 +636,10 @@ class SettingsDirectory(AccessControlled, Directory):
|
|||
_('Geolocation'),
|
||||
_('Configure geolocation and geocoding'),
|
||||
)
|
||||
if enabled('submission-channels'):
|
||||
r += htmltext('<dt><a href="submission-channels">%s</a></dt> <dd>%s</dd>') % (
|
||||
_('Submission channels'),
|
||||
_('Configure submission channels related options'),
|
||||
if enabled('backoffice-submission'):
|
||||
r += htmltext('<dt><a href="backoffice-submission">%s</a></dt> <dd>%s</dd>') % (
|
||||
_('Backoffice Submission'),
|
||||
_('Configure backoffice submission related options'),
|
||||
)
|
||||
if enabled('users'):
|
||||
r += htmltext('<dt><a href="users/">%s</a></dt> <dd>%s</dd>') % (_('Users'), _('Configure users'))
|
||||
|
@ -1272,9 +1272,29 @@ $('#form_default-zoom-level').on('change', function() {
|
|||
)
|
||||
return redirect('.')
|
||||
|
||||
def submission_channels(self):
|
||||
def backoffice_submission(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
submission_channels_cfg = get_cfg('submission-channels', {})
|
||||
backoffice_submission_cfg = get_cfg('backoffice-submission', {})
|
||||
form.add(
|
||||
RadiobuttonsWidget,
|
||||
'sidebar_menu_entry',
|
||||
title=_('Sidebar menu entry'),
|
||||
value=backoffice_submission_cfg.get('sidebar_menu_entry', 'visible'),
|
||||
options=[
|
||||
('visible', _('Visible'), 'visible'),
|
||||
('hidden', _('Hidden'), 'hidden'),
|
||||
],
|
||||
extra_css_class='widget-inline-radio',
|
||||
)
|
||||
form.add(
|
||||
StringWidget,
|
||||
'redirect',
|
||||
title=_('URL for backoffice submission'),
|
||||
hint=_('Leave empty to use native screen.'),
|
||||
value=backoffice_submission_cfg.get('redirect', ''),
|
||||
size=80,
|
||||
)
|
||||
form.add(
|
||||
CheckboxWidget,
|
||||
'include-in-global-listing',
|
||||
|
@ -1288,18 +1308,15 @@ $('#form_default-zoom-level').on('change', function() {
|
|||
return redirect('.')
|
||||
|
||||
if not form.is_submitted() or form.has_errors():
|
||||
get_response().breadcrumb.append(('submission-channels', _('Submission channels')))
|
||||
get_response().set_title(_('Submission channels'))
|
||||
get_response().breadcrumb.append(('backoffice-submission', _('Backoffice Submission')))
|
||||
get_response().set_title(_('Backoffice submission settings'))
|
||||
r = TemplateIO(html=True)
|
||||
r += htmltext('<h2>%s</h2>') % _('Submission channels')
|
||||
r += htmltext('<h2>%s</h2>') % _('Backoffice submission settings')
|
||||
r += form.render()
|
||||
return r.getvalue()
|
||||
else:
|
||||
cfg_submit(
|
||||
form,
|
||||
'submission-channels',
|
||||
('include-in-global-listing',),
|
||||
)
|
||||
cfg_submit(form, 'submission-channels', ('include-in-global-listing',))
|
||||
cfg_submit(form, 'backoffice-submission', ('sidebar_menu_entry', 'redirect'))
|
||||
return redirect('.')
|
||||
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ from wcs.forms.common import FormStatusPage
|
|||
from wcs.forms.root import FormPage as PublicFormFillPage
|
||||
from wcs.sql_criterias import Contains, Equal, StrictNotEqual
|
||||
|
||||
from ..qommon import _, errors, misc, template
|
||||
from ..qommon import _, errors, get_cfg, misc, template
|
||||
from ..qommon.form import Form, HtmlWidget
|
||||
|
||||
|
||||
|
@ -438,6 +438,8 @@ class SubmissionDirectory(Directory):
|
|||
def is_accessible(self, user, traversal=False):
|
||||
if not user.can_go_in_backoffice():
|
||||
return False
|
||||
if traversal is False and get_cfg('backoffice-submission', {}).get('sidebar_menu_entry') == 'hidden':
|
||||
return False
|
||||
# check user has at least one role set for backoffice submission
|
||||
for role_id in user.roles or []:
|
||||
ids = FormDef.get_ids_with_indexed_value('backoffice_submission_roles', role_id)
|
||||
|
@ -494,6 +496,15 @@ class SubmissionDirectory(Directory):
|
|||
return cats
|
||||
|
||||
def _q_index(self):
|
||||
redirect_url = get_cfg('backoffice-submission', {}).get('redirect')
|
||||
if redirect_url:
|
||||
redirect_url = misc.get_variadic_url(
|
||||
redirect_url, get_publisher().substitutions.get_context_variables(mode='lazy')
|
||||
)
|
||||
if redirect_url:
|
||||
return redirect(redirect_url)
|
||||
|
||||
get_response().breadcrumb.append(('submission/', _('Submission')))
|
||||
get_response().set_title(_('Submission'))
|
||||
|
||||
list_forms = self.get_submittable_formdefs(prefetch=False)
|
||||
|
|
|
@ -315,6 +315,7 @@ class WcsPublisher(QommonPublisher):
|
|||
('misc', ('default-position', 'default-zoom-level')),
|
||||
('sms', '*'),
|
||||
('submission-channels', '*'),
|
||||
('backoffice-submission', '*'),
|
||||
('texts', '*'),
|
||||
('users', ('*_template',)),
|
||||
):
|
||||
|
|
Loading…
Reference in New Issue