backoffice: display formdefs using a data source (#33693)
This commit is contained in:
parent
7c1b23ee70
commit
9fa4a39577
|
@ -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()
|
||||
|
|
|
@ -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 ''
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 %}
|
||||
|
|
Loading…
Reference in New Issue