diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 87063bf75..dd3606a4f 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -515,6 +515,7 @@ return array( 'Combodo\\iTop\\Forms\\Block\\Base\\CollectionBlock' => $baseDir . '/sources/Forms/Block/Base/CollectionBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\DateFormBlock' => $baseDir . '/sources/Forms/Block/Base/DateFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\DateTimeFormBlock' => $baseDir . '/sources/Forms/Block/Base/DateTimeFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Base\\FileFormBlock' => $baseDir . '/sources/Forms/Block/Base/FileFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\FormBlock' => $baseDir . '/sources/Forms/Block/Base/FormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\HiddenFormBlock' => $baseDir . '/sources/Forms/Block/Base/HiddenFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\IntegerFormBlock' => $baseDir . '/sources/Forms/Block/Base/IntegerFormBlock.php', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index e96f52bb2..2cfe75c86 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -901,6 +901,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f 'Combodo\\iTop\\Forms\\Block\\Base\\CollectionBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/CollectionBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\DateFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/DateFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\DateTimeFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/DateTimeFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Base\\FileFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/FileFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\FormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/FormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\HiddenFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/HiddenFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\Base\\IntegerFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/IntegerFormBlock.php', diff --git a/sources/Application/Dashboard/Controller/DashboardController.php b/sources/Application/Dashboard/Controller/DashboardController.php index b49429787..55b5e1de6 100644 --- a/sources/Application/Dashboard/Controller/DashboardController.php +++ b/sources/Application/Dashboard/Controller/DashboardController.php @@ -39,11 +39,13 @@ class DashboardController extends Controller public const ROUTE_NAMESPACE = 'dashboard'; private FormBlockService $oFormBlockService; + private XMLSerializer $oXMLSerializer; public function __construct($sViewPath = '', $sModuleName = 'core', $aAdditionalPaths = [], array $aThemes = ['application/forms/itop_console_layout.html.twig', 'application/forms/wip_form_demonstrator.html.twig']) { parent::__construct($sViewPath, $sModuleName, $aAdditionalPaths, $aThemes); $this->oFormBlockService = MetaModel::GetService('FormBlockService'); + $this->oXMLSerializer = MetaModel::GetService('XMLSerializer'); } public function OperationGetDashlet() @@ -124,7 +126,7 @@ class DashboardController extends Controller $aModelData = $oForm->getData(); $oDashboard = new RuntimeDashboard($aModelData['id']); $oDomNode = $oDashboard->CreateEmptyDashboard(); - XMLSerializer::GetInstance()->Serialize($aModelData, $oDomNode, 'DashboardGrid', 'Dashboard'); + $this->oXMLSerializer->Serialize($aModelData, $oDomNode, 'DashboardGrid', 'Dashboard'); $sXml = $oDomNode->ownerDocument->saveXML(); $oDashboard->PersistDashboard($sXml); $sStatus = 'ok'; diff --git a/sources/Application/Dashboard/Dashboard.php b/sources/Application/Dashboard/Dashboard.php index 23c987c09..492274878 100644 --- a/sources/Application/Dashboard/Dashboard.php +++ b/sources/Application/Dashboard/Dashboard.php @@ -56,6 +56,8 @@ abstract class Dashboard protected $oDashletFactory; + private XMLSerializer $oXMLSerializer; + /** * Dashboard constructor. * @@ -71,6 +73,7 @@ abstract class Dashboard $this->oDOMNode = null; $this->sId = $sId; $this->oDashletFactory = DashletFactory::GetInstance(); + $this->oXMLSerializer = MetaModel::GetService('XMLSerializer'); } /** @@ -170,7 +173,7 @@ abstract class Dashboard */ public function FromDOMDocumentV2(DesignElement $oDOMNode) { - $aDashboardValues = XMLSerializer::GetInstance()->Deserialize($oDOMNode, 'DashboardGrid', 'Dashboard'); + $aDashboardValues = $this->oXMLSerializer->Deserialize($oDOMNode, 'DashboardGrid', 'Dashboard'); $this->FromModelData($aDashboardValues); } diff --git a/sources/Application/Dashboard/FormBlock/DashletFormBlock.php b/sources/Application/Dashboard/FormBlock/DashletFormBlock.php index c30b8cddb..1a94d2577 100644 --- a/sources/Application/Dashboard/FormBlock/DashletFormBlock.php +++ b/sources/Application/Dashboard/FormBlock/DashletFormBlock.php @@ -14,8 +14,8 @@ class DashletFormBlock extends FormBlock public function __construct(string $sName, array $aOptions = []) { - parent::__construct($sName, $aOptions); $this->oPropertyTypeService = MetaModel::GetService('PropertyTypeService'); + parent::__construct($sName, $aOptions); } protected function BuildForm(): void diff --git a/sources/Forms/Block/Base/FileFormBlock.php b/sources/Forms/Block/Base/FileFormBlock.php new file mode 100644 index 000000000..5d0689522 --- /dev/null +++ b/sources/Forms/Block/Base/FileFormBlock.php @@ -0,0 +1,22 @@ +oCacheService = MetaModel::GetService('DataModelDependantCache'); + $this->oCompiler = MetaModel::GetService('PropertyTypeCompiler'); } /** @@ -44,7 +46,7 @@ class PropertyTypeService if (!$this->oCacheService->HasEntry(self::FORM_CACHE_POOL, $sCacheKey) || utils::IsDevelopmentEnvironment()) { // Cache not found, compile the form - $sPHPContent = PropertyTypeCompiler::GetInstance()->CompileForm($sFilteredId, $sType); + $sPHPContent = $this->oCompiler->CompileForm($sFilteredId, $sType); $this->oCacheService->StorePhpContent(self::FORM_CACHE_POOL, $sCacheKey, "oCacheService->FetchPHP(self::FORM_CACHE_POOL, $sCacheKey); @@ -63,14 +65,14 @@ class PropertyTypeService */ public function ListPropertyTypesByType(string $sType): array { - return PropertyTypeCompiler::GetInstance()->ListPropertyTypesByType($sType); + return $this->oCompiler->ListPropertyTypesByType($sType); } public function GetPropertyType(string $sId, string $sType = 'Dashlet'): PropertyType { - $sXML = PropertyTypeCompiler::GetInstance()->GetXMLContent($sId, $sType); + $sXML = $this->oCompiler->GetXMLContent($sId, $sType); - return PropertyTypeCompiler::GetInstance()->CompilePropertyTypeFromXML($sXML); + return $this->oCompiler->CompilePropertyTypeFromXML($sXML); } /** diff --git a/sources/PropertyType/Serializer/XMLSerializer.php b/sources/PropertyType/Serializer/XMLSerializer.php index 038cb038d..c8dbfafea 100644 --- a/sources/PropertyType/Serializer/XMLSerializer.php +++ b/sources/PropertyType/Serializer/XMLSerializer.php @@ -14,45 +14,37 @@ use Combodo\iTop\PropertyType\ValueType\AbstractValueType; class XMLSerializer { - private static XMLSerializer $oInstance; + private PropertyTypeCompiler $oCompiler; - protected function __construct() + public function __construct() { - } - - final public static function GetInstance(): XMLSerializer - { - if (!isset(static::$oInstance)) { - static::$oInstance = new XMLSerializer(); - } - - return static::$oInstance; + $this->oCompiler = \MetaModel::GetService('PropertyTypeCompiler'); } public function Serialize(mixed $value, DesignElement $oParentNode, string $sId, string $sType): void { - $sPropertyTypeXML = PropertyTypeCompiler::GetInstance()->GetXMLContent($sId, $sType); + $sPropertyTypeXML = $this->oCompiler->GetXMLContent($sId, $sType); $this->SerializeForPropertyType($value, $oParentNode, $sPropertyTypeXML); } public function Deserialize(DesignElement $oDOMNode, string $sId, string $sType): mixed { - $sPropertyTypeXML = PropertyTypeCompiler::GetInstance()->GetXMLContent($sId, $sType); + $sPropertyTypeXML = $this->oCompiler->GetXMLContent($sId, $sType); return $this->DeserializeForPropertyType($oDOMNode, $sPropertyTypeXML); } public function SerializeForPropertyType(mixed $value, DesignElement $oParentNode, string $sPropertyTypeXML): void { - $oPropertyType = PropertyTypeCompiler::GetInstance()->CompilePropertyTypeFromXML($sPropertyTypeXML); + $oPropertyType = $this->oCompiler->CompilePropertyTypeFromXML($sPropertyTypeXML); $oPropertyType->SerializeToDOMNode($value, $oParentNode); } public function DeserializeForPropertyType(DesignElement $oParentNode, string $sPropertyTypeXML): mixed { - $oPropertyType = PropertyTypeCompiler::GetInstance()->CompilePropertyTypeFromXML($sPropertyTypeXML); + $oPropertyType = $this->oCompiler->CompilePropertyTypeFromXML($sPropertyTypeXML); return $oPropertyType->DeserializeFromDOMNode($oParentNode); } diff --git a/sources/Service/ServiceLocator/service-locator-runtime.php b/sources/Service/ServiceLocator/service-locator-runtime.php index 9dad7bba4..dbb71f122 100644 --- a/sources/Service/ServiceLocator/service-locator-runtime.php +++ b/sources/Service/ServiceLocator/service-locator-runtime.php @@ -8,14 +8,18 @@ use Combodo\iTop\Application\Dashlet\Service\DashletService; use Combodo\iTop\Forms\Block\FormBlockService; use Combodo\iTop\Forms\FormBuilder\FormFactoryBuilderService; +use Combodo\iTop\PropertyType\Compiler\PropertyTypeCompiler; use Combodo\iTop\PropertyType\PropertyTypeService; +use Combodo\iTop\PropertyType\Serializer\XMLSerializer; use Combodo\iTop\Service\Cache\DataModelDependantCache; use Symfony\Component\Security\Csrf\CsrfTokenManager; return [ 'ModelReflection' => ModelReflectionRuntime::class, 'DashletService' => DashletService::class, + 'PropertyTypeCompiler' => PropertyTypeCompiler::class, 'PropertyTypeService' => PropertyTypeService::class, + 'XMLSerializer' => XMLSerializer::class, 'DataModelDependantCache' => DataModelDependantCache::class, 'FormBlockService' => FormBlockService::class, 'CsrfTokenManager' => CsrfTokenManager::class, diff --git a/tests/php-unit-tests/unitary-tests/sources/Application/Dashboard/ValueType/DashboardSerializerTest.php b/tests/php-unit-tests/unitary-tests/sources/Application/Dashboard/ValueType/DashboardSerializerTest.php index b8bbe49cb..199140228 100644 --- a/tests/php-unit-tests/unitary-tests/sources/Application/Dashboard/ValueType/DashboardSerializerTest.php +++ b/tests/php-unit-tests/unitary-tests/sources/Application/Dashboard/ValueType/DashboardSerializerTest.php @@ -37,7 +37,8 @@ class DashboardSerializerTest extends ItopDataTestCase $oRootNode->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $oDOMDocument->appendChild($oRootNode); - Combodo\iTop\PropertyType\Serializer\XMLSerializer::GetInstance()->Serialize($normalizedValue, $oRootNode, 'DashboardGrid', 'Dashboard'); + $oXMLSerializer = MetaModel::GetService('XMLSerializer'); + $oXMLSerializer->Serialize($normalizedValue, $oRootNode, 'DashboardGrid', 'Dashboard'); $sActualXML = $oDOMDocument->saveXML(); diff --git a/tests/php-unit-tests/unitary-tests/sources/PropertyType/Compiler/FormsCompilerTest.php b/tests/php-unit-tests/unitary-tests/sources/PropertyType/Compiler/FormsCompilerTest.php index 1a2111099..60280119b 100644 --- a/tests/php-unit-tests/unitary-tests/sources/PropertyType/Compiler/FormsCompilerTest.php +++ b/tests/php-unit-tests/unitary-tests/sources/PropertyType/Compiler/FormsCompilerTest.php @@ -24,7 +24,8 @@ class FormsCompilerTest extends ItopDataTestCase */ public function testCompileFormFromXML(string $sXMLContent, string $sExpectedPHP) { - $sProducedPHP = PropertyTypeCompiler::GetInstance()->CompileFormFromXML($sXMLContent); + $oCompiler = MetaModel::GetService('PropertyTypeCompiler'); + $sProducedPHP = $oCompiler->CompileFormFromXML($sXMLContent); $this->AssertPHPCodeIsValid($sProducedPHP); $sMessage = $this->dataName(); @@ -669,7 +670,8 @@ PHP, { $this->expectException($sExpectedClass); $this->expectExceptionMessage($sExpectedMessage); - PropertyTypeCompiler::GetInstance()->CompileFormFromXML($sXMLContent); + $oCompiler = MetaModel::GetService('PropertyTypeCompiler'); + $oCompiler->CompileFormFromXML($sXMLContent); } public function CompileFormFromInvalidXMLProvider() @@ -885,7 +887,8 @@ class FormFor__basic_test_for_icon extends Combodo\iTop\Forms\Block\Base\FormBlo PHP; - $sProducedPHP = PropertyTypeCompiler::GetInstance()->CompileFormFromXML($sXMLContent); + $oCompiler = MetaModel::GetService('PropertyTypeCompiler'); + $sProducedPHP = $oCompiler->CompileFormFromXML($sXMLContent); $this->AssertPHPCodeIsValid($sProducedPHP); $this->assertStringStartsWith($sExpectedStart, $sProducedPHP); @@ -920,7 +923,8 @@ class FormFor__basic_test_for_class extends Combodo\iTop\Forms\Block\Base\FormBl PHP; - $sProducedPHP = PropertyTypeCompiler::GetInstance()->CompileFormFromXML($sXMLContent); + $oCompiler = MetaModel::GetService('PropertyTypeCompiler'); + $sProducedPHP = $oCompiler->CompileFormFromXML($sXMLContent); $this->AssertPHPCodeIsValid($sProducedPHP); $this->assertStringStartsWith($sExpectedStart, $sProducedPHP); diff --git a/tests/php-unit-tests/unitary-tests/sources/PropertyType/Serializer/XMLSerializerTest.php b/tests/php-unit-tests/unitary-tests/sources/PropertyType/Serializer/XMLSerializerTest.php index c9b301458..d06e657e4 100644 --- a/tests/php-unit-tests/unitary-tests/sources/PropertyType/Serializer/XMLSerializerTest.php +++ b/tests/php-unit-tests/unitary-tests/sources/PropertyType/Serializer/XMLSerializerTest.php @@ -34,7 +34,8 @@ class XMLSerializerTest extends ItopDataTestCase $oDOMDocument->appendChild($oRootNode); - Combodo\iTop\PropertyType\Serializer\XMLSerializer::GetInstance()->SerializeForPropertyType($normalizedValue, $oRootNode, $sPropertyTypeXML); + $oXMLSerializer = MetaModel::GetService('XMLSerializer'); + $oXMLSerializer->SerializeForPropertyType($normalizedValue, $oRootNode, $sPropertyTypeXML); $sActualXML = $oDOMDocument->saveXML(); @@ -372,7 +373,8 @@ XML, /** @var \Combodo\iTop\DesignElement $oRoot */ $oRoot = $oDoc->firstChild; - $aActualValue = Combodo\iTop\PropertyType\Serializer\XMLSerializer::GetInstance()->DeserializeForPropertyType($oRoot, $sPropertyTypeXML); + $oXMLSerializer = MetaModel::GetService('XMLSerializer'); + $aActualValue = $oXMLSerializer->DeserializeForPropertyType($oRoot, $sPropertyTypeXML); $this->assertEquals($normalizedValue, $aActualValue); }