From 95d3af241d96f684b6e59ce20fe2ce08b8968d90 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Wed, 4 Mar 2015 18:28:23 +0100 Subject: [PATCH] add setters and getters to map json like content to model --- .../app/models/OPNsense/Base/BaseModel.php | 18 ++++++ .../OPNsense/Base/FieldTypes/BaseField.php | 58 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php index 3b5b167d4..ab58dc79b 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php @@ -232,6 +232,24 @@ abstract class BaseModel return $this->internalData->getFlatNodes(); } + /** + * get nodes as array structure + * @return array + */ + public function getNodes() + { + return $this->internalData->getNodes(); + } + + /** + * structured setter for model + * @param array|$data named array + */ + public function setNodes($data) + { + return $this->internalData->setNodes($data); + } + /** * validate full model using all fields and data in a single (1 deep) 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 30633b7c4..b4c8910a0 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php @@ -281,6 +281,64 @@ abstract class BaseField } + /** + * get nodes as array structure + * @return array + */ + public function getNodes() + { + $result = array (); + foreach ($this->__items as $key => $node) { + if ($node->isContainer()) { + $result[$key] = $node->getNodes(); + } else { + $result[$key] = $node->__toString(); + } + } + + return $result; + } + + + /** + * update model with data returning missing repeating tag types. + * @param $data named array structure containing new model content + * @return array missing array keys in data + */ + public function setNodes($data) + { + $delItems = array(); + + // update structure with new content + foreach ($this->__items as $key => $node) { + if ($data != null && array_key_exists($key, $data)) { + if ($node->isContainer()) { + $delItems += $node->setNodes($data[$key]); + } else { + $node->setValue($data[$key]); + } + } elseif (get_class($this) == "OPNsense\\Base\\FieldTypes\\ArrayField") { + // mark item as missing in input, remove later + $delItems[] = array("node" => $this, "key" => $key ); + } else { + $delItems += $node->setNodes(array()); + } + } + + // add new items to array type objects + if (get_class($this) == "OPNsense\\Base\\FieldTypes\\ArrayField") { + foreach ($data as $dataKey => $dataValue) { + if (!array_key_exists($dataKey, $this->__items)) { + $node = $this->add(); + $delItems += $node->setNodes($dataValue); + } + } + } + + return $delItems; + } + + /** * Add this node and it's children to the supplied simplexml node pointer. * @param \SimpleXMLElement $node target node