backoffice: link to individual fields in data source usage pane (#63947)
gitea/wcs/pipeline/head There was a failure building this commit Details

This commit is contained in:
Frédéric Péters 2024-04-14 16:58:39 +02:00
parent 8f39a1a94a
commit 7fe66c532b
5 changed files with 19 additions and 17 deletions

View File

@ -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'))

View File

@ -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):

View File

@ -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 [])

View File

@ -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>

View File

@ -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