0002-backoffice-display-formdefs-using-a-data-source-3369.patch
tests/test_admin_pages.py | ||
---|---|---|
4621 | 4621 |
assert 'Preview' in resp.body |
4622 | 4622 |
assert 'Additional keys are available: foo' in resp.body |
4623 | 4623 | |
4624 |
# check formdef listing |
|
4625 |
FormDef.wipe() |
|
4626 |
formdef = FormDef() |
|
4627 |
formdef.name = 'test data source' |
|
4628 |
formdef.fields = [ |
|
4629 |
fields.ItemField(id='1', label='item', data_source={'type': data_source.slug}) |
|
4630 |
] |
|
4631 |
formdef.store() |
|
4632 | ||
4633 |
resp = app.get('/backoffice/settings/data-sources/%s/' % data_source.id) |
|
4634 |
assert 'Usage in forms' in resp.body |
|
4635 |
assert '/backoffice/forms/%s/' % formdef.id in resp.body |
|
4636 | ||
4624 | 4637 |
def test_data_sources_edit(pub): |
4625 | 4638 |
create_superuser(pub) |
4626 | 4639 |
NamedDataSource.wipe() |
wcs/admin/data_sources.py | ||
---|---|---|
21 | 21 |
from qommon import _ |
22 | 22 |
from qommon import template |
23 | 23 |
from qommon.form import * |
24 |
from qommon.misc import json_response |
|
24 | 25 |
from qommon.backoffice.menu import html_top |
25 | 26 |
from wcs.data_sources import (NamedDataSource, DataSourceSelectionWidget, |
26 | 27 |
get_structured_items) |
28 |
from wcs.formdef import FormDef |
|
27 | 29 | |
28 | 30 |
class NamedDataSourceUI(object): |
29 | 31 |
def __init__(self, datasource): |
... | ... | |
130 | 132 |
templates=['wcs/backoffice/data-sources.html'], |
131 | 133 |
context={'view': self, 'datasource': self.datasource}) |
132 | 134 | |
135 |
def usage_in_formdefs(self): |
|
136 |
formdefs = [] |
|
137 |
for formdef in FormDef.select(ignore_errors=True, ignore_migration=True, order_by='name'): |
|
138 |
for field in (formdef.fields or []): |
|
139 |
data_source = getattr(field, 'data_source', None) |
|
140 |
if not data_source: |
|
141 |
continue |
|
142 |
if data_source.get('type') == self.datasource.slug: |
|
143 |
formdefs.append(formdef) |
|
144 |
break |
|
145 |
else: |
|
146 |
continue |
|
147 |
return formdefs |
|
148 | ||
133 | 149 |
def preview_block(self): |
134 | 150 |
if self.datasource.data_source.get('type') not in ('json', 'formula'): |
135 | 151 |
return '' |
wcs/formdef.py | ||
---|---|---|
518 | 518 |
base_url = get_publisher().get_frontoffice_url() |
519 | 519 |
return '%s/api/forms/%s/' % (base_url, self.url_name) |
520 | 520 | |
521 |
def get_admin_url(self): |
|
522 |
base_url = get_publisher().get_backoffice_url() |
|
523 |
return '%s/forms/%s/' % (base_url, self.id) |
|
524 | ||
521 | 525 |
def get_backoffice_submission_url(self): |
522 | 526 |
base_url = get_publisher().get_backoffice_url() + '/submission' |
523 | 527 |
return '%s/%s/' % (base_url, self.url_name) |
wcs/templates/wcs/backoffice/data-sources.html | ||
---|---|---|
27 | 27 |
{% endif %} |
28 | 28 |
</ul> |
29 | 29 |
{{ view.preview_block|safe }} |
30 | ||
31 |
{% with view.usage_in_formdefs as formdefs %} |
|
32 |
{% if formdefs %} |
|
33 |
<h3>{% trans "Usage in forms" %}</h3> |
|
34 |
<ul class="biglist"> |
|
35 |
{% for formdef in formdefs %} |
|
36 |
<li><a href="{{ formdef.get_admin_url }}">{{ formdef.name }}</a></li> |
|
37 |
{% endfor %} |
|
38 |
</ul> |
|
39 |
{% endif %} |
|
40 |
{% endwith %} |
|
41 | ||
30 | 42 |
{% else %} |
31 | 43 |
<p class="infonotice">{% trans "Not configured" %}</p> |
32 | 44 |
{% endif %} |
33 |
- |