mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 02:58:43 +02:00
N°9066 - Serialization/Unserialization from XML to Forms
This commit is contained in:
@@ -219,6 +219,11 @@ PHP;
|
||||
}
|
||||
}
|
||||
|
||||
public function GetId(): string
|
||||
{
|
||||
return $this->sId;
|
||||
}
|
||||
|
||||
protected function GetSibling(string $sId): ?AbstractValueType
|
||||
{
|
||||
if (is_null($this->oParent)) {
|
||||
@@ -228,4 +233,20 @@ PHP;
|
||||
return $this->oParent->GetChild($sId);
|
||||
}
|
||||
|
||||
public function SerializeToDOMNode(mixed $value, DesignElement $oDOMNode): void
|
||||
{
|
||||
$sXmlValue = $value;
|
||||
$oTextNode = $oDOMNode->ownerDocument->createTextNode($sXmlValue);
|
||||
$oDOMNode->appendChild($oTextNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $oDOMNode
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function UnserializeFromDOMNode(DesignElement $oDOMNode): mixed
|
||||
{
|
||||
return $oDOMNode->GetText();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ namespace Combodo\iTop\PropertyType\ValueType\Branch;
|
||||
|
||||
use Combodo\iTop\DesignElement;
|
||||
use Combodo\iTop\Forms\Block\Base\CollectionBlock;
|
||||
use Combodo\iTop\PropertyType\Serializer\XMLFormat\AbstractXMLFormat;
|
||||
use Combodo\iTop\PropertyType\Serializer\XMLFormat\XMLFormatFactory;
|
||||
use Combodo\iTop\PropertyType\ValueType\AbstractValueType;
|
||||
use Combodo\iTop\PropertyType\ValueType\ValueTypeFactory;
|
||||
use utils;
|
||||
@@ -18,6 +20,8 @@ use utils;
|
||||
*/
|
||||
class ValueTypeCollection extends ValueTypePropertyTree
|
||||
{
|
||||
private AbstractXMLFormat $oXMLFormat;
|
||||
|
||||
/**
|
||||
* @param \Combodo\iTop\DesignElement $oDomNode
|
||||
* @param \Combodo\iTop\PropertyType\ValueType\Branch\AbstractBranchValueType|null $oParent
|
||||
@@ -33,6 +37,9 @@ class ValueTypeCollection extends ValueTypePropertyTree
|
||||
$this->sSubTreeClass = 'SubFormFor__'.$this->sIdWithPath;
|
||||
$this->aFormBlockOptionsForPHP['block_entry_type'] = utils::QuoteForPHP($this->sSubTreeClass);
|
||||
|
||||
$oNode = $oDomNode->GetUniqueElement('xml-format');
|
||||
$this->oXMLFormat = XMLFormatFactory::GetInstance()->CreateXMLFormatFromDomNode($oNode);
|
||||
|
||||
// read child properties
|
||||
foreach ($oDomNode->GetUniqueElement('prototype')->childNodes as $oNode) {
|
||||
if ($oNode instanceof DesignElement) {
|
||||
@@ -74,4 +81,14 @@ class ValueTypeCollection extends ValueTypePropertyTree
|
||||
|
||||
return $this->GetLocalPHPForValueType();
|
||||
}
|
||||
|
||||
public function SerializeToDOMNode(mixed $value, DesignElement $oDOMNode): void
|
||||
{
|
||||
$this->oXMLFormat->SerializeToDOMNode($value, $oDOMNode, $this);
|
||||
}
|
||||
|
||||
public function UnserializeFromDOMNode(DesignElement $oDOMNode): mixed
|
||||
{
|
||||
return $this->oXMLFormat->UnserializeFromDOMNode($oDOMNode, $this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,19 +9,7 @@ namespace Combodo\iTop\PropertyType\ValueType\Branch;
|
||||
|
||||
use Combodo\iTop\DesignElement;
|
||||
use Combodo\iTop\Forms\Block\Base\FormBlock;
|
||||
use Combodo\iTop\Forms\Block\Expression\BooleanExpressionFormBlock;
|
||||
use Combodo\iTop\Forms\Block\Expression\NumberExpressionFormBlock;
|
||||
use Combodo\iTop\Forms\Block\Expression\StringExpressionFormBlock;
|
||||
use Combodo\iTop\Forms\IO\Format\BooleanIOFormat;
|
||||
use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
|
||||
use Combodo\iTop\Forms\IO\Format\NumberIOFormat;
|
||||
use Combodo\iTop\Forms\IO\Format\StringIOFormat;
|
||||
use Combodo\iTop\PropertyType\PropertyTypeException;
|
||||
use Combodo\iTop\PropertyType\ValueType\AbstractValueType;
|
||||
use Combodo\iTop\PropertyType\ValueType\ValueTypeFactory;
|
||||
use Exception;
|
||||
use Expression;
|
||||
use utils;
|
||||
|
||||
/**
|
||||
* @since 3.3.0
|
||||
@@ -86,4 +74,32 @@ PHP;
|
||||
|
||||
return $this->GetLocalPHPForValueType($this->sSubTreeClass);
|
||||
}
|
||||
|
||||
public function SerializeToDOMNode(mixed $value, DesignElement $oDOMNode): void
|
||||
{
|
||||
foreach ($this->aChildren as $oChild) {
|
||||
$sId = $oChild->sId;
|
||||
if (isset($value[$sId])) {
|
||||
/** @var DesignElement $oChildNode */
|
||||
$oChildNode = $oDOMNode->ownerDocument->createElement($sId);
|
||||
$oDOMNode->appendChild($oChildNode);
|
||||
$oChild->SerializeToDOMNode($value[$sId], $oChildNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function UnserializeFromDOMNode(DesignElement $oDOMNode): mixed
|
||||
{
|
||||
$aResults = [];
|
||||
|
||||
foreach ($this->aChildren as $oChild) {
|
||||
$sId = $oChild->sId;
|
||||
$oChildNode = $oDOMNode->GetOptionalElement($sId);
|
||||
if ($oChildNode) {
|
||||
$aResults[$sId] = $oChild->UnserializeFromDOMNode($oChildNode);
|
||||
}
|
||||
}
|
||||
|
||||
return $aResults;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class ValueTypeClass extends AbstractLeafValueType
|
||||
{
|
||||
parent::InitFromDomNode($oDomNode, $oParent);
|
||||
|
||||
$sCategories = $oDomNode->GetChildText('categories-csv');
|
||||
$sCategories = $oDomNode->GetChildText('categories-csv', '');
|
||||
/** @var \ModelReflection $oModelReflection */
|
||||
$oModelReflection = ServiceLocator::GetInstance()->get('ModelReflection');
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ namespace Combodo\iTop\PropertyType\ValueType\Leaf;
|
||||
use Combodo\iTop\DesignElement;
|
||||
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
|
||||
use Combodo\iTop\Forms\Block\Base\FormBlock;
|
||||
use Combodo\iTop\PropertyType\Serializer\XMLFormat\AbstractXMLFormat;
|
||||
use Combodo\iTop\PropertyType\Serializer\XMLFormat\XMLFormatFactory;
|
||||
use Combodo\iTop\PropertyType\ValueType\Branch\AbstractBranchValueType;
|
||||
use Combodo\iTop\PropertyType\ValueType\Leaf\AbstractLeafValueType;
|
||||
use Combodo\iTop\PropertyType\ValueType\ValueTypeFactory;
|
||||
@@ -17,6 +19,7 @@ use Combodo\iTop\PropertyType\ValueType\ValueTypeFactory;
|
||||
class ValueTypeCollectionOfValues extends AbstractLeafValueType
|
||||
{
|
||||
private string $sFormBlockClass;
|
||||
private AbstractXMLFormat $oXMLFormat;
|
||||
|
||||
public function GetFormBlockClass(): string
|
||||
{
|
||||
@@ -33,6 +36,19 @@ class ValueTypeCollectionOfValues extends AbstractLeafValueType
|
||||
$this->aFormBlockOptionsForPHP['multiple'] = 'true';
|
||||
}
|
||||
|
||||
$oNode = $oDomNode->GetUniqueElement('xml-format');
|
||||
$this->oXMLFormat = XMLFormatFactory::GetInstance()->CreateXMLFormatFromDomNode($oNode);
|
||||
|
||||
parent::InitFromDomNode($oDomNode, $oParent);
|
||||
}
|
||||
|
||||
public function SerializeToDOMNode(mixed $value, DesignElement $oDOMNode): void
|
||||
{
|
||||
$this->oXMLFormat->SerializeToDOMNode($value, $oDOMNode, $this);
|
||||
}
|
||||
|
||||
public function UnserializeFromDOMNode(DesignElement $oDOMNode): mixed
|
||||
{
|
||||
return $this->oXMLFormat->UnserializeFromDOMNode($oDOMNode, $this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ class ValueTypeFactory
|
||||
|
||||
if (utils::IsNullOrEmptyString($sNodeType)) {
|
||||
$sId = $oDomNode->getAttribute('id');
|
||||
throw new PropertyTypeException("Node: $sId, missing value-type in node specification");
|
||||
throw new PropertyTypeException("Missing value-type in node specification", $oDomNode);
|
||||
}
|
||||
|
||||
if (is_a($sNodeType, AbstractValueType::class, true)) {
|
||||
@@ -57,6 +57,6 @@ class ValueTypeFactory
|
||||
}
|
||||
|
||||
$sId = $oDomNode->getAttribute('id');
|
||||
throw new PropertyTypeException("Node: $sId, unknown type node class: ".json_encode($sNodeType));
|
||||
throw new PropertyTypeException("Unknown value-type node class: ".json_encode($sNodeType), $oDomNode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user