diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php index 7081fd509..52c573a62 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php @@ -259,6 +259,15 @@ abstract class BaseModel $this->internalData->$name = $value ; } + /** + * forward to root node's getFlatNodes + * @return array all children + */ + public function getFlatNodes() + { + return $this->internalData->getFlatNodes(); + } + /** * get nodes as array structure * @return array diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php index e53614595..4de090321 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php @@ -388,6 +388,27 @@ abstract class BaseField return $this->internalXMLTagName; } + /** + * Recursive method to flatten tree structure for easy validation, returns only leaf nodes. + * @return array named array with field type nodes, using the internal reference. + */ + public function getFlatNodes() + { + $result = array (); + if (count($this->internalChildnodes) == 0) { + return array($this); + } + + foreach ($this->__items as $node) { + foreach ($node->getFlatNodes() as $childNode) { + $result[$childNode->internalReference] = $childNode ; + } + } + + return $result; + } + + /** * get nodes as array structure * @return array