backoffice: link to individual fields in data source usage pane (#63947)
gitea/wcs/pipeline/head There was a failure building this commit
Details
gitea/wcs/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
8f39a1a94a
commit
7fe66c532b
|
@ -376,12 +376,11 @@ class NamedDataSourcePage(Directory):
|
|||
)
|
||||
|
||||
def usage_in_formdefs(self):
|
||||
formdefs = []
|
||||
fields = []
|
||||
for formdef in get_formdefs_of_all_kinds():
|
||||
if self.datasource.is_used_in_formdef(formdef):
|
||||
formdefs.append(formdef)
|
||||
formdefs.sort(key=lambda x: x.name.lower())
|
||||
return formdefs
|
||||
fields.extend(list(self.datasource.usage_in_formdef(formdef)))
|
||||
fields.sort(key=lambda x: x._formdef.name.lower())
|
||||
return fields
|
||||
|
||||
def has_preview_block(self):
|
||||
return bool(self.datasource.type in ('json', 'geojson', 'formula', 'jsonvalue', 'wcs:users'))
|
||||
|
|
|
@ -1186,18 +1186,18 @@ class NamedDataSource(XmlStorableObject):
|
|||
from wcs.formdef import get_formdefs_of_all_kinds
|
||||
|
||||
for formdef in get_formdefs_of_all_kinds():
|
||||
if self.is_used_in_formdef(formdef):
|
||||
if any(self.usage_in_formdef(formdef)):
|
||||
return True
|
||||
return False
|
||||
|
||||
def is_used_in_formdef(self, formdef):
|
||||
def usage_in_formdef(self, formdef):
|
||||
for field in formdef.fields or []:
|
||||
data_source = getattr(field, 'data_source', None)
|
||||
if not data_source:
|
||||
continue
|
||||
if data_source.get('type') == self.slug:
|
||||
return True
|
||||
return False
|
||||
field._formdef = formdef
|
||||
yield field
|
||||
|
||||
|
||||
class StubNamedDataSource(NamedDataSource):
|
||||
|
|
|
@ -255,6 +255,12 @@ class Field:
|
|||
return ''
|
||||
return self._formdef.get_field_admin_url(field=self)
|
||||
|
||||
def get_admin_url_label(self):
|
||||
return _('%(form)s, field: "%(field)s"') % {
|
||||
'form': self._formdef.name,
|
||||
'field': self.ellipsized_label,
|
||||
}
|
||||
|
||||
@property
|
||||
def include_in_listing(self):
|
||||
return 'listings' in (self.display_locations or [])
|
||||
|
|
|
@ -90,13 +90,13 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% with formdefs=view.usage_in_formdefs %}
|
||||
{% if formdefs %}
|
||||
{% with fields=view.usage_in_formdefs %}
|
||||
{% if fields %}
|
||||
<div class="section">
|
||||
<h3>{% trans "Usage in forms" %}</h3>
|
||||
<ul class="objects-list single-links">
|
||||
{% for formdef in formdefs %}
|
||||
<li><a href="{{ formdef.get_admin_url }}">{{ formdef.name }}</a></li>
|
||||
{% for field in fields %}
|
||||
<li><a href="{{ field.get_admin_url }}">{{ field.get_admin_url_label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -85,10 +85,7 @@ def grep_strings(string, hit_function):
|
|||
|
||||
for field in formdef.fields or []:
|
||||
url = formdef.get_field_admin_url(field)
|
||||
source_name = _('%(form)s, field: "%(field)s"') % {
|
||||
'form': formdef.name,
|
||||
'field': field.ellipsized_label,
|
||||
}
|
||||
source_name = field.get_admin_url_label()
|
||||
for attr in field.get_admin_attributes():
|
||||
if check_string(getattr(field, attr, None), source_url=url, source_name=source_name):
|
||||
break
|
||||
|
|
Loading…
Reference in New Issue