Services / Unbound + core MVC - extend ModelRelationField to show combined descriptions using vsprintf() and implement hostname.domain in new unbound alias popup. closes https://github.com/opnsense/core/issues/5694

This commit is contained in:
Ad Schellevis 2022-04-10 14:35:05 +02:00
parent ff11cde38e
commit 714eca2b18
2 changed files with 16 additions and 5 deletions

View File

@ -95,13 +95,22 @@ class ModelRelationField extends BaseListField
}
$groupKey = isset($modelData['group']) ? $modelData['group'] : null;
$displayKey = $modelData['display'];
$displayKeys = explode(',', $modelData['display']);
$displayFormat = !empty($modelData['display_format']) ? $modelData['display_format'] : "%s";
$groups = array();
$searchItems = $modelObj->getNodeByReference($modelData['items']);
if (!empty($searchItems)) {
foreach ($modelObj->getNodeByReference($modelData['items'])->iterateItems() as $node) {
if (!isset($node->getAttributes()['uuid']) || $node->$displayKey == null) {
$descriptions = [];
foreach ($displayKeys as $displayKey) {
if ($node->$displayKey != null) {
$descriptions[] = (string)$node->$displayKey;
} else {
$descriptions[] = "";
}
}
if (!isset($node->getAttributes()['uuid'])) {
continue;
}
@ -126,8 +135,9 @@ class ModelRelationField extends BaseListField
}
$uuid = $node->getAttributes()['uuid'];
self::$internalCacheOptionList[$this->internalCacheKey][$uuid] =
(string)$node->$displayKey;
self::$internalCacheOptionList[$this->internalCacheKey][$uuid] = vsprintf(
$displayFormat, $descriptions
);
}
}
unset($modelObj);

View File

@ -184,7 +184,8 @@
<host>
<source>OPNsense.Unbound.Unbound</source>
<items>hosts.host</items>
<display>domain</display>
<display>hostname,domain</display>
<display_format>%s.%s</display_format>
</host>
</Model>
<Required>Y</Required>