backoffice: display formdefs using a data source (#33693)

This commit is contained in:
Frédéric Péters 2019-07-31 12:46:26 +02:00 committed by Thomas NOEL
parent 7c1b23ee70
commit 9fa4a39577
4 changed files with 45 additions and 0 deletions

View File

@ -4620,6 +4620,19 @@ def test_data_sources_view(pub):
assert 'Preview' in resp.body
assert 'Additional keys are available: foo' in resp.body
# check formdef listing
FormDef.wipe()
formdef = FormDef()
formdef.name = 'test data source'
formdef.fields = [
fields.ItemField(id='1', label='item', data_source={'type': data_source.slug})
]
formdef.store()
resp = app.get('/backoffice/settings/data-sources/%s/' % data_source.id)
assert 'Usage in forms' in resp.body
assert '/backoffice/forms/%s/' % formdef.id in resp.body
def test_data_sources_edit(pub):
create_superuser(pub)
NamedDataSource.wipe()

View File

@ -21,9 +21,11 @@ from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import template
from qommon.form import *
from qommon.misc import json_response
from qommon.backoffice.menu import html_top
from wcs.data_sources import (NamedDataSource, DataSourceSelectionWidget,
get_structured_items)
from wcs.formdef import FormDef
class NamedDataSourceUI(object):
def __init__(self, datasource):
@ -130,6 +132,20 @@ class NamedDataSourcePage(Directory):
templates=['wcs/backoffice/data-sources.html'],
context={'view': self, 'datasource': self.datasource})
def usage_in_formdefs(self):
formdefs = []
for formdef in FormDef.select(ignore_errors=True, ignore_migration=True, order_by='name'):
for field in (formdef.fields or []):
data_source = getattr(field, 'data_source', None)
if not data_source:
continue
if data_source.get('type') == self.datasource.slug:
formdefs.append(formdef)
break
else:
continue
return formdefs
def preview_block(self):
if self.datasource.data_source.get('type') not in ('json', 'formula'):
return ''

View File

@ -511,6 +511,10 @@ class FormDef(StorableObject):
base_url = get_publisher().get_frontoffice_url()
return '%s/api/forms/%s/' % (base_url, self.url_name)
def get_admin_url(self):
base_url = get_publisher().get_backoffice_url()
return '%s/forms/%s/' % (base_url, self.id)
def get_backoffice_submission_url(self):
base_url = get_publisher().get_backoffice_url() + '/submission'
return '%s/%s/' % (base_url, self.url_name)

View File

@ -27,6 +27,18 @@
{% endif %}
</ul>
{{ view.preview_block|safe }}
{% with formdefs=view.usage_in_formdefs %}
{% if formdefs %}
<h3>{% trans "Usage in forms" %}</h3>
<ul class="biglist">
{% for formdef in formdefs %}
<li><a href="{{ formdef.get_admin_url }}">{{ formdef.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% else %}
<p class="infonotice">{% trans "Not configured" %}</p>
{% endif %}