Projet

Général

Profil

0002-backoffice-display-formdefs-using-a-data-source-3369.patch

Frédéric Péters, 31 juillet 2019 12:48

Télécharger (4,13 ko)

Voir les différences:

Subject: [PATCH 2/2] backoffice: display formdefs using a data source (#33693)

 tests/test_admin_pages.py                      | 13 +++++++++++++
 wcs/admin/data_sources.py                      | 16 ++++++++++++++++
 wcs/formdef.py                                 |  4 ++++
 wcs/templates/wcs/backoffice/data-sources.html | 12 ++++++++++++
 4 files changed, 45 insertions(+)
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
-