diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php
index 083bdff12..7a43db95a 100644
--- a/lib/composer/autoload_classmap.php
+++ b/lib/composer/autoload_classmap.php
@@ -481,6 +481,7 @@ return array(
'Combodo\\iTop\\Forms\\Block\\AbstractTypeFormBlock' => $baseDir . '/sources/Forms/Block/AbstractTypeFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\CheckboxFormBlock' => $baseDir . '/sources/Forms/Block/Base/CheckboxFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFormBlock' => $baseDir . '/sources/Forms/Block/Base/ChoiceFormBlock.php',
+ 'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFromInputs' => $baseDir . '/sources/Forms/Block/Base/ChoiceFromInputs.php',
'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',
@@ -493,26 +494,6 @@ return array(
'Combodo\\iTop\\Forms\\Block\\DataModel\\OqlFormBlock' => $baseDir . '/sources/Forms/Block/DataModel/OqlFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Expression\\ExpressionFormBlock' => $baseDir . '/sources/Forms/Block/Expression/ExpressionFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormBlockException' => $baseDir . '/sources/Forms/Block/FormBlockException.php',
- 'Combodo\\iTop\\Forms\\Block\\FormBlockIOException' => $baseDir . '/sources/Forms/Block/IO/FormBlockIOException.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\ChoiceFormType' => $baseDir . '/sources/Forms/Block/FormType/ChoiceFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\CollectionFormType' => $baseDir . '/sources/Forms/Block/FormType/CollectionFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\FormType' => $baseDir . '/sources/Forms/Block/FormType/FormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\FormTypeHelper' => $baseDir . '/sources/Forms/Block/FormType/FormTypeHelper.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\OqlFormType' => $baseDir . '/sources/Forms/Block/FormType/OqlFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\AbstractFormIO' => $baseDir . '/sources/Forms/Block/IO/AbstractFormIO.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\AbstractConverter' => $baseDir . '/sources/Forms/Block/IO/Converter/AbstractConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\ChoiceValueToLabelConverter' => $baseDir . '/sources/Forms/Block/IO/Converter/ChoiceValueToLabelConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\OqlToClassConverter' => $baseDir . '/sources/Forms/Block/IO/Converter/OqlToClassConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\StringToAttributeConverter' => $baseDir . '/sources/Forms/Block/IO/Converter/StringToAttributeConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\StringToBooleanConverter' => $baseDir . '/sources/Forms/Block/IO/Converter/StringToBooleanConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormBinding' => $baseDir . '/sources/Forms/Block/IO/FormBinding.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormInput' => $baseDir . '/sources/Forms/Block/IO/FormInput.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormOutput' => $baseDir . '/sources/Forms/Block/IO/FormOutput.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\AttributeIOFormat' => $baseDir . '/sources/Forms/Block/IO/Format/AttributeIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\BooleanIOFormat' => $baseDir . '/sources/Forms/Block/IO/Format/BooleanIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\ClassIOFormat' => $baseDir . '/sources/Forms/Block/IO/Format/ClassIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\NumberIOFormat' => $baseDir . '/sources/Forms/Block/IO/Format/NumberIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\RawFormat' => $baseDir . '/sources/Forms/Block/IO/Format/RawFormat.php',
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyHandler' => $baseDir . '/sources/Forms/FormBuilder/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => $baseDir . '/sources/Forms/FormBuilder/DependencyMap.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => $baseDir . '/sources/Forms/FormBuilder/FormBuilder.php',
@@ -521,11 +502,33 @@ return array(
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => $baseDir . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormTypeFactory' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormTypeFactory.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\ChoiceFormType' => $baseDir . '/sources/Forms/FormType/Base/ChoiceFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\CollectionFormType' => $baseDir . '/sources/Forms/FormType/Base/CollectionFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\FormType' => $baseDir . '/sources/Forms/FormType/Base/FormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\DataModel\\OqlFormType' => $baseDir . '/sources/Forms/FormType/DataModel/OqlFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\FormTypeHelper' => $baseDir . '/sources/Forms/FormType/FormTypeHelper.php',
'Combodo\\iTop\\Forms\\Forms' => $baseDir . '/sources/Forms/Forms.php',
'Combodo\\iTop\\Forms\\FormsException' => $baseDir . '/sources/Forms/FormsException.php',
'Combodo\\iTop\\Forms\\IFormBlock' => $baseDir . '/sources/Forms/IFormBlock.php',
+ 'Combodo\\iTop\\Forms\\IO\\AbstractFormIO' => $baseDir . '/sources/Forms/IO/AbstractFormIO.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\AbstractConverter' => $baseDir . '/sources/Forms/IO/Converter/AbstractConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\ChoiceValueToLabelConverter' => $baseDir . '/sources/Forms/IO/Converter/ChoiceValueToLabelConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\OqlToClassConverter' => $baseDir . '/sources/Forms/IO/Converter/OqlToClassConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\StringToAttributeConverter' => $baseDir . '/sources/Forms/IO/Converter/StringToAttributeConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\StringToBooleanConverter' => $baseDir . '/sources/Forms/IO/Converter/StringToBooleanConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormBinding' => $baseDir . '/sources/Forms/IO/FormBinding.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormBlockIOException' => $baseDir . '/sources/Forms/IO/FormBlockIOException.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormInput' => $baseDir . '/sources/Forms/IO/FormInput.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormOutput' => $baseDir . '/sources/Forms/IO/FormOutput.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\AttributeIOFormat' => $baseDir . '/sources/Forms/IO/Format/AttributeIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\BooleanIOFormat' => $baseDir . '/sources/Forms/IO/Format/BooleanIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\ClassIOFormat' => $baseDir . '/sources/Forms/IO/Format/ClassIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\NumberIOFormat' => $baseDir . '/sources/Forms/IO/Format/NumberIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\RawFormat' => $baseDir . '/sources/Forms/IO/Format/RawFormat.php',
+ 'Combodo\\iTop\\Forms\\Register\\IORegister' => $baseDir . '/sources/Forms/Register/IORegister.php',
+ 'Combodo\\iTop\\Forms\\Register\\Option' => $baseDir . '/sources/Forms/Register/Option.php',
+ 'Combodo\\iTop\\Forms\\Register\\OptionsRegister' => $baseDir . '/sources/Forms/Register/OptionsRegister.php',
'Combodo\\iTop\\Forms\\Twig\\Extension\\FormCompatibilityExtension' => $baseDir . '/sources/Forms/Twig/Extension/FormCompatibilityExtension.php',
- 'Combodo\\iTop\\ItopSdkFormDemonstrator\\Form\\Block\\ExpressionFormBlock' => $baseDir . '/sources/Forms/Block/Base/ExpressionFormBlock.php',
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => $baseDir . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
'Combodo\\iTop\\Renderer\\BlockRenderer' => $baseDir . '/sources/Renderer/BlockRenderer.php',
'Combodo\\iTop\\Renderer\\Bootstrap\\BsFieldRendererMappings' => $baseDir . '/sources/Renderer/Bootstrap/BsFieldRendererMappings.php',
diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php
index 43ed66156..64f111092 100644
--- a/lib/composer/autoload_static.php
+++ b/lib/composer/autoload_static.php
@@ -862,6 +862,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Forms\\Block\\AbstractTypeFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/AbstractTypeFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\CheckboxFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/CheckboxFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/ChoiceFormBlock.php',
+ 'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFromInputs' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/ChoiceFromInputs.php',
'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',
@@ -874,26 +875,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Forms\\Block\\DataModel\\OqlFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/DataModel/OqlFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Expression\\ExpressionFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Expression/ExpressionFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormBlockException' => __DIR__ . '/../..' . '/sources/Forms/Block/FormBlockException.php',
- 'Combodo\\iTop\\Forms\\Block\\FormBlockIOException' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/FormBlockIOException.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\ChoiceFormType' => __DIR__ . '/../..' . '/sources/Forms/Block/FormType/ChoiceFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\CollectionFormType' => __DIR__ . '/../..' . '/sources/Forms/Block/FormType/CollectionFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\FormType' => __DIR__ . '/../..' . '/sources/Forms/Block/FormType/FormType.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\FormTypeHelper' => __DIR__ . '/../..' . '/sources/Forms/Block/FormType/FormTypeHelper.php',
- 'Combodo\\iTop\\Forms\\Block\\FormType\\OqlFormType' => __DIR__ . '/../..' . '/sources/Forms/Block/FormType/OqlFormType.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\AbstractFormIO' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/AbstractFormIO.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\AbstractConverter' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Converter/AbstractConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\ChoiceValueToLabelConverter' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Converter/ChoiceValueToLabelConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\OqlToClassConverter' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Converter/OqlToClassConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\StringToAttributeConverter' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Converter/StringToAttributeConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Converter\\StringToBooleanConverter' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Converter/StringToBooleanConverter.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormBinding' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/FormBinding.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormInput' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/FormInput.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\FormOutput' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/FormOutput.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\AttributeIOFormat' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Format/AttributeIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\BooleanIOFormat' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Format/BooleanIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\ClassIOFormat' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Format/ClassIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\NumberIOFormat' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Format/NumberIOFormat.php',
- 'Combodo\\iTop\\Forms\\Block\\IO\\Format\\RawFormat' => __DIR__ . '/../..' . '/sources/Forms/Block/IO/Format/RawFormat.php',
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyHandler' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyMap.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilder.php',
@@ -902,11 +883,33 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormTypeExtension.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormType.php',
'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormTypeFactory' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormTypeFactory.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\ChoiceFormType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/ChoiceFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\CollectionFormType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/CollectionFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\Base\\FormType' => __DIR__ . '/../..' . '/sources/Forms/FormType/Base/FormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\DataModel\\OqlFormType' => __DIR__ . '/../..' . '/sources/Forms/FormType/DataModel/OqlFormType.php',
+ 'Combodo\\iTop\\Forms\\FormType\\FormTypeHelper' => __DIR__ . '/../..' . '/sources/Forms/FormType/FormTypeHelper.php',
'Combodo\\iTop\\Forms\\Forms' => __DIR__ . '/../..' . '/sources/Forms/Forms.php',
'Combodo\\iTop\\Forms\\FormsException' => __DIR__ . '/../..' . '/sources/Forms/FormsException.php',
'Combodo\\iTop\\Forms\\IFormBlock' => __DIR__ . '/../..' . '/sources/Forms/IFormBlock.php',
+ 'Combodo\\iTop\\Forms\\IO\\AbstractFormIO' => __DIR__ . '/../..' . '/sources/Forms/IO/AbstractFormIO.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\AbstractConverter' => __DIR__ . '/../..' . '/sources/Forms/IO/Converter/AbstractConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\ChoiceValueToLabelConverter' => __DIR__ . '/../..' . '/sources/Forms/IO/Converter/ChoiceValueToLabelConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\OqlToClassConverter' => __DIR__ . '/../..' . '/sources/Forms/IO/Converter/OqlToClassConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\StringToAttributeConverter' => __DIR__ . '/../..' . '/sources/Forms/IO/Converter/StringToAttributeConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\Converter\\StringToBooleanConverter' => __DIR__ . '/../..' . '/sources/Forms/IO/Converter/StringToBooleanConverter.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormBinding' => __DIR__ . '/../..' . '/sources/Forms/IO/FormBinding.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormBlockIOException' => __DIR__ . '/../..' . '/sources/Forms/IO/FormBlockIOException.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormInput' => __DIR__ . '/../..' . '/sources/Forms/IO/FormInput.php',
+ 'Combodo\\iTop\\Forms\\IO\\FormOutput' => __DIR__ . '/../..' . '/sources/Forms/IO/FormOutput.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\AttributeIOFormat' => __DIR__ . '/../..' . '/sources/Forms/IO/Format/AttributeIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\BooleanIOFormat' => __DIR__ . '/../..' . '/sources/Forms/IO/Format/BooleanIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\ClassIOFormat' => __DIR__ . '/../..' . '/sources/Forms/IO/Format/ClassIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\NumberIOFormat' => __DIR__ . '/../..' . '/sources/Forms/IO/Format/NumberIOFormat.php',
+ 'Combodo\\iTop\\Forms\\IO\\Format\\RawFormat' => __DIR__ . '/../..' . '/sources/Forms/IO/Format/RawFormat.php',
+ 'Combodo\\iTop\\Forms\\Register\\IORegister' => __DIR__ . '/../..' . '/sources/Forms/Register/IORegister.php',
+ 'Combodo\\iTop\\Forms\\Register\\Option' => __DIR__ . '/../..' . '/sources/Forms/Register/Option.php',
+ 'Combodo\\iTop\\Forms\\Register\\OptionsRegister' => __DIR__ . '/../..' . '/sources/Forms/Register/OptionsRegister.php',
'Combodo\\iTop\\Forms\\Twig\\Extension\\FormCompatibilityExtension' => __DIR__ . '/../..' . '/sources/Forms/Twig/Extension/FormCompatibilityExtension.php',
- 'Combodo\\iTop\\ItopSdkFormDemonstrator\\Form\\Block\\ExpressionFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/ExpressionFormBlock.php',
'Combodo\\iTop\\PhpParser\\Evaluation\\PhpExpressionEvaluator' => __DIR__ . '/../..' . '/sources/PhpParser/Evaluation/PhpExpressionEvaluator.php',
'Combodo\\iTop\\Renderer\\BlockRenderer' => __DIR__ . '/../..' . '/sources/Renderer/BlockRenderer.php',
'Combodo\\iTop\\Renderer\\Bootstrap\\BsFieldRendererMappings' => __DIR__ . '/../..' . '/sources/Renderer/Bootstrap/BsFieldRendererMappings.php',
diff --git a/sources/Forms/Block/AbstractFormBlock.php b/sources/Forms/Block/AbstractFormBlock.php
index 3458cb569..37b8f32be 100644
--- a/sources/Forms/Block/AbstractFormBlock.php
+++ b/sources/Forms/Block/AbstractFormBlock.php
@@ -7,13 +7,13 @@
namespace Combodo\iTop\Forms\Block;
use Combodo\iTop\Forms\Block\Base\FormBlock;
-use Combodo\iTop\Forms\Block\IO\AbstractFormIO;
-use Combodo\iTop\Forms\Block\IO\Converter\AbstractConverter;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
-use Combodo\iTop\Forms\Block\IO\FormInput;
-use Combodo\iTop\Forms\Block\IO\FormOutput;
+use Combodo\iTop\Forms\IO\AbstractFormIO;
+use Combodo\iTop\Forms\IO\Format\RawFormat;
+use Combodo\iTop\Forms\IO\FormInput;
+use Combodo\iTop\Forms\IO\FormOutput;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Combodo\iTop\Forms\IFormBlock;
-use Forms\BlockIO;
/**
* Abstract form block.
@@ -30,49 +30,38 @@ abstract class AbstractFormBlock implements IFormBlock
/** @var null|FormBlock */
private ?FormBlock $oParent = null;
- /** @var array form options */
- private array $aOptions = [];
+ /** @var OptionsRegister */
+ private OptionsRegister $oOptionsRegister;
- /** @var array form dynamic options */
- protected array $aDynamicOptions = [];
-
- /** @var array form block inputs */
- private array $aFormInputs = [];
-
- /** @var array form block outputs */
- private array $aFormOutputs = [];
-
- /** @var bool flag indicating the form insertion */
- private bool $bIsAddedToForm = false;
+ /** @var IORegister */
+ private IORegister $oIORegister;
/**
* Constructor.
*
* @param string $sName
- * @param array $aUserOptions
+ * @param array $aOptions
*/
- public function __construct(private readonly string $sName, protected array $aUserOptions = [])
+ public function __construct(private readonly string $sName, array $aOptions = [])
{
- // Compute options
- $this->aOptions = $aUserOptions;
- $this->InitBlockOptions($this->aOptions);
+ // Register options
+ $this->RegisterOptions($this->oOptionsRegister = new OptionsRegister());
+ $this->SetOptions($aOptions);
+ $this->AfterOptionsRegistered($this->oOptionsRegister);
- // Initialize block inputs
- $this->InitInputs();
-
- // Initialize block outputs
- $this->InitOutputs();
+ // Register IO
+ $this->RegisterIO($this->oIORegister = new IORegister($this));
+ $this->AfterIORegistered($this->oIORegister);
}
/**
- * Initialize options.
- *
- * @param array $aUserOptions
+ * Return the form block name.
*
+ * @return string
*/
- public function InitBlockOptions(array &$aUserOptions): void
+ public function GetName(): string
{
- $aUserOptions['form_block'] = $this;
+ return $this->sName;
}
/**
@@ -108,13 +97,36 @@ abstract class AbstractFormBlock implements IFormBlock
}
/**
- * Return the form block name.
+ * Register options.
+ *
+ * @param OptionsRegister $oOptionsRegister
*
- * @return string
*/
- public function GetName(): string
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- return $this->sName;
+ $oOptionsRegister->SetOption('form_block', $this);
+ }
+
+ /**
+ * @param array $aOptions
+ *
+ * @return void
+ */
+ private function SetOptions(array $aOptions): void
+ {
+ foreach ($aOptions as $sOptionName => $mOptionValue) {
+ $this->oOptionsRegister->SetOption($sOptionName, $mOptionValue);
+ }
+ }
+
+ /**
+ * @param OptionsRegister $oOptionsRegister
+ *
+ * @return void
+ */
+ protected function AfterOptionsRegistered(OptionsRegister $oOptionsRegister): void
+ {
+
}
/**
@@ -125,27 +137,43 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function GetOptions(): array
{
- return $this->aOptions;
- }
-
- public function GetOptionsMergedWithDynamic(string $sEventType = null): array
- {
- return array_merge($this->GetDynamicOptions(), $this->GetOptions());
- }
-
- public function GetDynamicOptions(string $sEventType = null): array
- {
- return $this->aDynamicOptions;
+ return $this->oOptionsRegister->GetOptions();
}
/**
- * @param string|null $sEventType
+ * @param string $sOption
+ *
+ * @return mixed
+ */
+ public function GetOption(string $sOption): mixed
+ {
+ return $this->oOptionsRegister->GetOption($sOption);
+ }
+
+ /**
+ * @param OptionsRegister $oOptionsRegister
*
* @return void
*/
- public function UpdateDynamicOptions(string $sEventType = null): void
+ public function UpdateOptions(OptionsRegister $oOptionsRegister): void
{
- $this->aDynamicOptions = [];
+
+ }
+
+ /**
+ * @return array
+ */
+ public function GetBoundInputsBindings(): array
+ {
+ return $this->oIORegister->GetBoundInputsBindings();
+ }
+
+ /**
+ * @return array
+ */
+ public function GetBoundOutputBindings(): array
+ {
+ return $this->oIORegister->GetBoundOutputBindings();
}
/**
@@ -158,9 +186,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function AddInput(string $sName, string $sType): AbstractFormBlock
{
- $oFormInput = new FormInput($sName, $sType, $this);
- $this->aFormInputs[$oFormInput->GetName()] = $oFormInput;
-
+ $this->oIORegister->AddInput($sName, $sType);
return $this;
}
@@ -176,12 +202,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function AddInputDependsOn(string $sName, string $sOutputBlockName, string $sOutputName): AbstractFormBlock
{
- $oOutputBlock = $this->GetParent()->Get($sOutputBlockName);
- $oBlockOutput = $oOutputBlock->GetOutput($sOutputName);
-
- $this->AddInput($sName, $oBlockOutput->GetDataType());
- $this->DependsOn($sName, $sOutputBlockName, $sOutputName);
-
+ $this->oIORegister->AddInputDependsOn($sName, $sOutputBlockName, $sOutputName);
return $this;
}
@@ -195,11 +216,20 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function GetInput(string $sName): FormInput
{
- if (!array_key_exists($sName, $this->aFormInputs)) {
- throw new FormBlockException('Missing input '.$sName.' for '.$this->sName);
- }
+ return $this->oIORegister->GetInput($sName);
+ }
- return $this->aFormInputs[$sName];
+ /**
+ * Get an input value.
+ *
+ * @param string $sName
+ *
+ * @return mixed
+ * @throws FormBlockException
+ */
+ public function GetInputValue(string $sName): mixed
+ {
+ return $this->oIORegister->GetInput($sName)->GetValue();
}
/**
@@ -213,9 +243,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function AddOutput(string $sName, string $sType, AbstractConverter $oConverter = null): AbstractFormBlock
{
- $oFormOutput = new FormOutput($sName, $sType, $this, $oConverter);
- $this->aFormOutputs[$oFormOutput->GetName()] = $oFormOutput;
-
+ $this->oIORegister->AddOutput($sName, $sType, $oConverter);
return $this;
}
@@ -229,11 +257,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function GetOutput(string $sName): FormOutput
{
- if (!array_key_exists($sName, $this->aFormOutputs)) {
- throw new FormBlockException('Missing output '.$sName.' for '.$this->sName);
- }
-
- return $this->aFormOutputs[$sName];
+ return $this->oIORegister->GetOutput($sName);
}
/**
@@ -243,7 +267,17 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function GetInputs(): array
{
- return $this->aFormInputs;
+ return $this->oIORegister->GetInputs();
+ }
+
+ public function GetBoundInputs(): array
+ {
+ return $this->oIORegister->GetBoundInputs();
+ }
+
+ public function GetBoundOutputs(): array
+ {
+ return $this->oIORegister->GetBoundOutputs();
}
/**
@@ -253,7 +287,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function GetOutputs(): array
{
- return $this->aFormOutputs;
+ return $this->oIORegister->GetOutputs();
}
/**
@@ -268,12 +302,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function DependsOn(string $sInputName, string $sOutputBlockName, string $sOutputName): AbstractFormBlock
{
-
- $oOutputBlock = $this->GetParent()->Get($sOutputBlockName);
- $oFormInput = $this->GetInput($sInputName);
- $oFormOutput = $oOutputBlock->GetOutput($sOutputName);
- $oFormOutput->BindToInput($oFormInput);
-
+ $this->oIORegister->DependsOn($sInputName, $sOutputBlockName, $sOutputName);
return $this;
}
@@ -288,10 +317,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function DependsOnParent(string $sInputName, string $sParentInputName): AbstractFormBlock
{
- $oFormInput = $this->GetInput($sInputName);
- $oParentFormInput = $this->GetParent()->GetInput($sParentInputName);
- $oParentFormInput->BindToInput($oFormInput);
-
+ $this->oIORegister->DependsOnParent($sInputName, $sParentInputName);
return $this;
}
@@ -306,10 +332,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function ImpactParent(string $sOutputName, string $sParentOutputName): AbstractFormBlock
{
- $oFormOutput = $this->GetOutput($sOutputName);
- $oParentFormOutput = $this->GetParent()->GetOutput($sParentOutputName);
- $oFormOutput->BindToOutput($oParentFormOutput);
-
+ $this->oIORegister->ImpactParent($sOutputName, $sParentOutputName);
return $this;
}
@@ -320,13 +343,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function HasDependenciesBlocks(): bool
{
- foreach ($this->aFormInputs as $oFormInput) {
- if ($oFormInput->IsBound()) {
- return true;
- }
- }
-
- return false;
+ return $this->oIORegister->HasDependenciesBlocks();
}
/**
@@ -336,74 +353,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function ImpactDependentsBlocks(): bool
{
- /** @var FormOutput $oFormOutput */
- foreach ($this->aFormOutputs as $oFormOutput) {
- if (count($oFormOutput->GetBindings()) > 0) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Get bound inputs bindings.
- *
- * @return array
- */
- public function GetBoundInputsBindings(): array
- {
- $aBindings = [];
-
- /** @var FormInput $oFormInput */
- foreach ($this->aFormInputs as $oFormInput) {
- if ($oFormInput->IsBound()) {
- $aBindings[$oFormInput->GetName()] = $oFormInput->GetBinding();
- }
- }
-
- return $aBindings;
- }
-
- /**
- * Get bound outputs bindings.
- *
- * @return array
- */
- public function GetBoundOutputBindings(): array
- {
- $aBindings = [];
-
- /** @var FormInput $oFormInput */
- foreach ($this->aFormOutputs as $oFormOutput) {
- if ($oFormOutput->IsBound()) {
- $aBindings[$oFormOutput->GetName()] = $oFormOutput->GetBinding();
- }
- }
-
- return $aBindings;
- }
-
- /**
- * The block has been added to its parent.
- *
- * @return bool
- */
- public function IsAdded(): bool
- {
- return $this->bIsAddedToForm;
- }
-
- /**
- * Indicate that the block has been added to its parent.
- *
- * @param bool $bIsAdded
- *
- * @return void
- */
- public function SetAdded(bool $bIsAdded): void
- {
- $this->bIsAddedToForm = $bIsAdded;
+ return $this->oIORegister->ImpactDependentsBlocks();
}
/**
@@ -415,15 +365,7 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function IsInputsDataReady(string $sType = null): bool
{
- foreach ($this->aFormInputs as $oFormInput) {
- if ($oFormInput->IsBound()) {
- if (!$oFormInput->IsEventDataReady($sType)) {
- return false;
- }
- }
- }
-
- return true;
+ return $this->oIORegister->IsInputsDataReady($sType);
}
/**
@@ -436,34 +378,24 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function ComputeOutputs(string $sEventType, mixed $oData): void
{
- /** Iterate throw output @var FormOutput $oFormOutput */
- foreach ($this->aFormOutputs as $oFormOutput) {
-
- // Compute the output value
- $oFormOutput->ComputeValue($sEventType, $oData);
-
- }
-
- }
-
-
- /**
- * Initialize inputs.
- *
- * @return void
- */
- public function InitInputs(): void
- {
+ $this->oIORegister->ComputeOutputs($sEventType, $oData);
}
/**
- * Initialize outputs.
+ * Register IO.
+ *
+ * @param IORegister $oIORegister
*
* @return void
*/
- public function InitOutputs(): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- $this->AddOutput(self::OUTPUT_VALUE, RawFormat::class);
+ $oIORegister->AddOutput(self::OUTPUT_VALUE, RawFormat::class);
+ }
+
+ protected function AfterIORegistered(IORegister $oIORegister): void
+ {
+
}
/**
@@ -476,6 +408,7 @@ abstract class AbstractFormBlock implements IFormBlock
public function BindingReceivedEvent(AbstractFormIO $oBlockIO): void
{
if ($this->IsInputsDataReady()) {
+ $this->UpdateOptions($this->oOptionsRegister);
$this->AllInputsReadyEvent();
}
}
diff --git a/sources/Forms/Block/AbstractTypeFormBlock.php b/sources/Forms/Block/AbstractTypeFormBlock.php
index 1d9835542..8f91c3f3b 100644
--- a/sources/Forms/Block/AbstractTypeFormBlock.php
+++ b/sources/Forms/Block/AbstractTypeFormBlock.php
@@ -6,12 +6,17 @@
namespace Combodo\iTop\Forms\Block;
-use Combodo\iTop\Forms\Block\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\Register\IORegister;
abstract class AbstractTypeFormBlock extends AbstractFormBlock
{
// Inputs
public const INPUT_VISIBLE = 'visible';
+ public const INPUT_ENABLE = 'enable';
+
+ /** @var bool flag indicating the form insertion */
+ private bool $bIsAddedToForm = false;
/**
* Return the form type.
@@ -20,15 +25,12 @@ abstract class AbstractTypeFormBlock extends AbstractFormBlock
*/
abstract public function GetFormType(): string;
- /**
- * Initialize inputs.
- *
- * @return void
- */
- public function InitInputs(): void
+ /** @inheritdoc */
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitInputs();
- $this->AddInput(self::INPUT_VISIBLE, BooleanIOFormat::class);
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddInput(self::INPUT_VISIBLE, BooleanIOFormat::class);
+ $oIORegister->AddInput(self::INPUT_ENABLE, BooleanIOFormat::class);
}
/**
@@ -56,4 +58,26 @@ abstract class AbstractTypeFormBlock extends AbstractFormBlock
{
return true;
}
+
+ /**
+ * The block has been added to its parent.
+ *
+ * @return bool
+ */
+ public function IsAdded(): bool
+ {
+ return $this->bIsAddedToForm;
+ }
+
+ /**
+ * Indicate that the block has been added to its parent.
+ *
+ * @param bool $bIsAdded
+ *
+ * @return void
+ */
+ public function SetAdded(bool $bIsAdded): void
+ {
+ $this->bIsAddedToForm = $bIsAdded;
+ }
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/CheckboxFormBlock.php b/sources/Forms/Block/Base/CheckboxFormBlock.php
index a64a00f40..40c84e526 100644
--- a/sources/Forms/Block/Base/CheckboxFormBlock.php
+++ b/sources/Forms/Block/Base/CheckboxFormBlock.php
@@ -7,8 +7,10 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
-use Combodo\iTop\Forms\Block\IO\Converter\StringToBooleanConverter;
-use Combodo\iTop\Forms\Block\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\IO\Converter\StringToBooleanConverter;
+use Combodo\iTop\Forms\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
/**
@@ -27,16 +29,16 @@ class CheckboxFormBlock extends AbstractTypeFormBlock
}
/** @inheritdoc */
- function InitBlockOptions(array &$aUserOptions): void
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
- $aUserOptions['required'] = false;
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('required', false);
}
/** @inheritdoc */
- function InitOutputs(): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_CHECKED, BooleanIOFormat::class, new StringToBooleanConverter());
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddOutput(self::OUTPUT_CHECKED, BooleanIOFormat::class, new StringToBooleanConverter());
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/ChoiceFormBlock.php b/sources/Forms/Block/Base/ChoiceFormBlock.php
index b97b0459f..c2fbbcac7 100644
--- a/sources/Forms/Block/Base/ChoiceFormBlock.php
+++ b/sources/Forms/Block/Base/ChoiceFormBlock.php
@@ -7,9 +7,10 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
-use Combodo\iTop\Forms\Block\FormType\ChoiceFormType;
-use Combodo\iTop\Forms\Block\IO\Converter\ChoiceValueToLabelConverter;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
+use Combodo\iTop\Forms\FormType\Base\ChoiceFormType;
+use Combodo\iTop\Forms\IO\Converter\ChoiceValueToLabelConverter;
+use Combodo\iTop\Forms\IO\Format\RawFormat;
+use Combodo\iTop\Forms\Register\IORegister;
/**
* Form block for choices.
@@ -26,9 +27,10 @@ class ChoiceFormBlock extends AbstractTypeFormBlock
return ChoiceFormType::class;
}
- public function InitOutputs(): void
+ /** @inheritdoc */
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_LABEL, RawFormat::class, new ChoiceValueToLabelConverter($this));
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddOutput(self::OUTPUT_LABEL, RawFormat::class, new ChoiceValueToLabelConverter($this));
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/ChoiceFromInputs.php b/sources/Forms/Block/Base/ChoiceFromInputs.php
new file mode 100644
index 000000000..f93597bb3
--- /dev/null
+++ b/sources/Forms/Block/Base/ChoiceFromInputs.php
@@ -0,0 +1,32 @@
+GetInputs() as $oInput) {
+ if($oInput->HasValue()){
+ $aChoices[strval($oInput->GetValue())] = $oInput->GetName();
+ }
+ }
+ $oOptionsRegister->SetOption('choices', $aChoices);
+ }
+}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/CollectionBlock.php b/sources/Forms/Block/Base/CollectionBlock.php
index 88281a514..f4be6e6fe 100644
--- a/sources/Forms/Block/Base/CollectionBlock.php
+++ b/sources/Forms/Block/Base/CollectionBlock.php
@@ -7,8 +7,10 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
-use Combodo\iTop\Forms\Block\FormType\CollectionFormType;
-use Combodo\iTop\Forms\Block\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\FormType\Base\CollectionFormType;
+use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
/**
* Collection form type.
@@ -19,16 +21,8 @@ class CollectionBlock extends AbstractTypeFormBlock
// Inputs
public const INPUT_CLASS_NAME = 'class_name';
- /**
- * Constructor.
- *
- * @param string $sName
- * @param array $aOptions
- */
- public function __construct(string $sName, array $aOptions = [])
- {
- parent::__construct($sName, $aOptions);
- }
+ /** @var FormBlock block */
+ protected AbstractTypeFormBlock $oPrototypeBlock;
/** @inheritdoc */
public function GetFormType(): string
@@ -36,47 +30,54 @@ class CollectionBlock extends AbstractTypeFormBlock
return CollectionFormType::class;
}
- /** @inheritdoc */
- public function InitInputs(): void
+ /**
+ * Get the prototype block.
+ *
+ * @return AbstractTypeFormBlock
+ */
+ public function GetPrototypeBlock(): AbstractTypeFormBlock
{
- parent::InitInputs();
- $this->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
+ return $this->oPrototypeBlock;
}
- protected $oBlock;
-
- public function GetOptions(): array
+ /** @inheritdoc */
+ protected function RegisterIO(IORegister $oIORegister): void
{
- $aOptions = parent::GetOptions();
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
+ }
- // Convert block information in type information
- if(isset($aOptions['block_entry_type'])) {
- $aOptions['prototype'] = true;
- $aOptions['allow_add'] = true;
- $aOptions['prototype_options'] = [
- 'label' => false
- ];
- }
+ /** @inheritdoc */
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
+ {
+ parent::RegisterOptions($oOptionsRegister);
- $sBlockEntryType = $aOptions['block_entry_type'];
- $sBlockEntryOptions = $aOptions['block_entry_options'];
- $this->oBlock = new ($sBlockEntryType)('prototype', $sBlockEntryOptions);
+ $oOptionsRegister->SetOption('prototype', true);
+ $oOptionsRegister->SetOption('allow_add', true);
+ $oOptionsRegister->SetOption('prototype_options', [
+ 'label' => false
+ ]);
-// $this->HandleBlockDependencies();
+ // not type options
+ $oOptionsRegister->SetOption('block_entry_type', FormBlock::class, false);
+ $oOptionsRegister->SetOption('block_entry_options', [], false);
+ }
+
+ /** @inheritdoc */
+ protected function AfterOptionsRegistered(OptionsRegister $oOptionsRegister): void
+ {
+ parent::AfterOptionsRegistered($oOptionsRegister);
+
+ $sBlockEntryType = $this->GetOption('block_entry_type');
+ $sBlockEntryOptions = $this->GetOption('block_entry_options');
+ $this->oPrototypeBlock = new ($sBlockEntryType)('prototype', $sBlockEntryOptions);
+
+ // $this->HandleBlockDependencies();
// $this->oBlock->SetParent($this->GetParent());
// $oBlock->DependsOn('company', 'company', AbstractFormBlock::OUTPUT_VALUE);
- unset($aOptions['block_entry_type']);
- unset($aOptions['block_entry_options']);
- $aOptions['entry_type'] = $this->oBlock->GetFormType();
- $aOptions['entry_options'] = $this->oBlock->GetOptions();
-
- return $aOptions;
- }
-
- public function HandleBlockDependencies(): void
- {
-
+ $oOptionsRegister->SetOption('entry_type', $this->oPrototypeBlock->GetFormType());
+ $oOptionsRegister->SetOption('entry_options', $this->oPrototypeBlock->GetOptions());
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/DateFormBlock.php b/sources/Forms/Block/Base/DateFormBlock.php
index 0b5853c7d..99714accd 100644
--- a/sources/Forms/Block/Base/DateFormBlock.php
+++ b/sources/Forms/Block/Base/DateFormBlock.php
@@ -7,6 +7,7 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Symfony\Component\Form\Extension\Core\Type\DateType;
/**
@@ -21,9 +22,10 @@ class DateFormBlock extends AbstractTypeFormBlock
return DateType::class;
}
- public function InitBlockOptions(array &$aUserOptions): void
+ /** @inheritdoc */
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
- $aUserOptions['widget'] = 'single_text';
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('widget', 'single_text');
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/DateTimeFormBlock.php b/sources/Forms/Block/Base/DateTimeFormBlock.php
index 556023f53..68e0f277e 100644
--- a/sources/Forms/Block/Base/DateTimeFormBlock.php
+++ b/sources/Forms/Block/Base/DateTimeFormBlock.php
@@ -7,6 +7,7 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
/**
@@ -21,9 +22,10 @@ class DateTimeFormBlock extends AbstractTypeFormBlock
return DateTimeType::class;
}
- public function InitBlockOptions(array &$aUserOptions): void
+ /** @inheritdoc */
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
- $aUserOptions['widget'] = 'single_text';
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('widget', 'single_text');
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/ExpressionFormBlock.php b/sources/Forms/Block/Base/ExpressionFormBlock.php
deleted file mode 100644
index 1401caf68..000000000
--- a/sources/Forms/Block/Base/ExpressionFormBlock.php
+++ /dev/null
@@ -1,96 +0,0 @@
-AddOutput(self::OUTPUT_RESULT, BooleanIOFormat::class);
-// $this->AddOutput(self::OUTPUT_RAW, RawFormat::class);
- }
-
-// public function InputHasChanged()
-// {
-// if (!$this->IsInputsDataReady()) {
-// return;
-// }
-// $sExpression = $this->GetOptions()['expression'];
-// $sValue = preg_replace_callback(
-// "/\[\[(?[^\]]+)]]/",
-// function(array $aMatches): string {
-// return $this->GetInput($aMatches['input'])->GetValue();
-// },
-// $sExpression);
-//
-// foreach ($this->GetInputs() as $oFormInput) {
-// IssueLog::Info($oFormInput->GetName().' = '.$oFormInput->GetValue());
-// }
-// IssueLog::Info("Result of [$sExpression] is [$sValue]");
-//
-// $result = '';
-// eval('$result = '.$sValue.';');
-// IssueLog::Info("Result of [$sExpression] is eval to [$result]");
-//
-// $this->GetOutput(self::OUTPUT_RESULT)->SetValue(FormEvents::POST_SUBMIT, new BooleanIOFormat($result));
-// $this->GetOutput(self::OUTPUT_VALUE)->SetValue(FormEvents::POST_SUBMIT, new RawFormat($result));
-// }
-
-
-
- public function InputHasChanged()
- {
- if (!$this->IsInputsDataReady()) {
- return;
- }
- $sExpression = $this->GetOptions()['expression'];
-
- $this->Compute($sExpression, FormEvents::POST_SET_DATA);
- $this->Compute($sExpression, FormEvents::POST_SUBMIT);
- }
-
- public function Compute(string $sExpression, string $sEventType): void
- {
- try{
- $sValue = preg_replace_callback(
- "/\[\[(?[^\]]+)]]/",
- function(array $aMatches) use ($sEventType): ?string {
- $oInput = $this->GetInput($aMatches['input']);
- if(!$oInput->HasEventValue($sEventType)){
- throw new FormsException('Unable to compute expression: input '.$aMatches['input'].' has no value for event '.$sEventType.'.');
- }
- return $oInput->GetValue($sEventType);
- },
- $sExpression);
-
- $result = '';
- eval('$result = '.$sValue.';');
-
- $this->GetOutput(self::OUTPUT_RESULT)->SetValue($sEventType, new BooleanIOFormat($result));
- $this->GetOutput(self::OUTPUT_VALUE)->SetValue($sEventType, new RawFormat($result));
- }
- catch(\Exception $e){
- IssueLog::Exception('Compute expression block issue', $e);
- }
- }
-
-}
\ No newline at end of file
diff --git a/sources/Forms/Block/Base/FormBlock.php b/sources/Forms/Block/Base/FormBlock.php
index b34fc5a35..4e0936239 100644
--- a/sources/Forms/Block/Base/FormBlock.php
+++ b/sources/Forms/Block/Base/FormBlock.php
@@ -9,11 +9,13 @@ namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
use Combodo\iTop\Forms\Block\FormBlockException;
-use Combodo\iTop\Forms\Block\FormType\FormType;
+use Combodo\iTop\Forms\FormType\Base\FormType;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Combodo\iTop\Forms\FormBuilder\DependencyMap;
use Combodo\iTop\Forms\FormsException;
use Exception;
use ReflectionClass;
+use ReflectionException;
/**
* Complex form type.
@@ -53,15 +55,11 @@ class FormBlock extends AbstractTypeFormBlock
}
/** @inheritdoc */
- public function InitBlockOptions(array &$aUserOptions): void
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
-
- $aUserOptions['compound'] = true;
- $aUserOptions['attr'] = [
- 'class' => 'form',
- ];
-
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('compound', true);
+ $oOptionsRegister->SetOptionArrayValue('attr', 'class', 'form');
}
/**
@@ -69,12 +67,13 @@ class FormBlock extends AbstractTypeFormBlock
*
* @param string $sName block name
* @param string $sType block class name
+ * @param array $aSymfonyOptions options
* @param array $aOptions options
*
* @return $this
- * @throws \ReflectionException
+ * @throws ReflectionException
*/
- public function Add(string $sName, string $sType, array $aOptions): AbstractFormBlock
+ public function Add(string $sName, string $sType, array $aSymfonyOptions, array $aOptions = []): AbstractFormBlock
{
$oRef = new ReflectionClass($sType);
if($oRef->isSubclassOf(AbstractFormBlock::class) === false){
@@ -82,7 +81,7 @@ class FormBlock extends AbstractTypeFormBlock
}
$aOptions['priority'] = -count($this->aChildrenBlocks);
- $oSubFormBlock = new ($sType)($sName, $aOptions);
+ $oSubFormBlock = new ($sType)($sName, $aSymfonyOptions, $aOptions);
$this->aChildrenBlocks[$sName] = $oSubFormBlock;
$oSubFormBlock->SetParent($this);
diff --git a/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php b/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php
index a5028bbf0..f0b2b163a 100644
--- a/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php
+++ b/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php
@@ -7,12 +7,11 @@
namespace Combodo\iTop\Forms\Block\DataModel;
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
-use Combodo\iTop\Forms\Block\FormBlockException;
-use Combodo\iTop\Forms\Block\IO\Converter\StringToAttributeConverter;
-use Combodo\iTop\Forms\Block\IO\Format\AttributeIOFormat;
-use Combodo\iTop\Forms\Block\IO\Format\ClassIOFormat;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
-use CoreException;
+use Combodo\iTop\Forms\IO\Converter\StringToAttributeConverter;
+use Combodo\iTop\Forms\IO\Format\AttributeIOFormat;
+use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use MetaModel;
/**
@@ -29,31 +28,31 @@ class AttributeChoiceFormBlock extends ChoiceFormBlock
public const OUTPUT_ATTRIBUTE = 'attribute';
/** @inheritdoc */
- public function InitBlockOptions(array &$aUserOptions): void
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
-
- $aUserOptions['placeholder'] = 'Select an attribute...';
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('placeholder', 'Select an attribute...');
}
/** @inheritdoc */
- public function InitInputs(): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitInputs();
- $this->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
- }
-
- /** @inheritdoc */
- public function InitOutputs(): void
- {
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_ATTRIBUTE, AttributeIOFormat::class, new StringToAttributeConverter());
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
+ $oIORegister->AddOutput(self::OUTPUT_ATTRIBUTE, AttributeIOFormat::class, new StringToAttributeConverter());
}
/** @inheritdoc */
- public function UpdateDynamicOptions(string $sEventType = null): void
+ public function UpdateOptions(OptionsRegister $oOptionsRegister): void
{
- $oClass = $this->GetInput(self::INPUT_CLASS_NAME)->GetValue($sEventType);
+ parent::UpdateOptions($oOptionsRegister);
+
+ $oClass = $this->GetInputValue(self::INPUT_CLASS_NAME);
+
+ if($oClass === null){
+ $oOptionsRegister->SetOption('choices', []);
+ return;
+ }
$aAttributeCodes = MetaModel::GetAttributesList($oClass);
@@ -63,7 +62,7 @@ class AttributeChoiceFormBlock extends ChoiceFormBlock
$aAttributes[$oAttribute->GetLabel()] = $sAttributeCode;
}
- $this->aDynamicOptions['choices'] = $aAttributes;
+ $oOptionsRegister->SetOption('choices', $aAttributes);
}
}
\ No newline at end of file
diff --git a/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php b/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php
index 6d557febb..0d5ce92a2 100644
--- a/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php
+++ b/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php
@@ -7,10 +7,11 @@
namespace Combodo\iTop\Forms\Block\DataModel;
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
-use Combodo\iTop\Forms\Block\FormBlockException;
-use Combodo\iTop\Forms\Block\IO\Format\AttributeIOFormat;
-use Combodo\iTop\Forms\Block\IO\Format\ClassIOFormat;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
+use Combodo\iTop\Forms\IO\Format\AttributeIOFormat;
+use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\IO\Format\RawFormat;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
use Exception;
use MetaModel;
@@ -29,41 +30,36 @@ class AttributeValueChoiceFormBlock extends ChoiceFormBlock
public const OUTPUT_VALUE = 'value';
/** @inheritdoc */
- public function InitBlockOptions(array &$aUserOptions): void
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitBlockOptions($aUserOptions);
- $aUserOptions['multiple'] = true;
- $aUserOptions['attr'] = [
- 'size' => 5,
- 'style' => 'height: auto;',
- ];
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('multiple', true);
+ $oOptionsRegister->SetOptionArrayValue('attr', 'size', 5);
+ $oOptionsRegister->SetOptionArrayValue('attr', 'style', 'height: auto;');
}
/** @inheritdoc */
- public function InitInputs(): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitInputs();
- $this->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
- $this->AddInput(self::INPUT_ATTRIBUTE, AttributeIOFormat::class);
- }
-
- /** @inheritdoc */
- public function InitOutputs(): void
- {
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_VALUE, RawFormat::class);
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddInput(self::INPUT_CLASS_NAME, ClassIOFormat::class);
+ $oIORegister->AddInput(self::INPUT_ATTRIBUTE, AttributeIOFormat::class);
+ $oIORegister->AddOutput(self::OUTPUT_VALUE, RawFormat::class);
}
/** @inheritdoc */
- public function UpdateDynamicOptions(string $sEventType = null): void
+ public function UpdateOptions(OptionsRegister $oOptionsRegister): void
{
- $oClassName = $this->GetInput(self::INPUT_CLASS_NAME)->GetValue($sEventType);
- $oAttribute = $this->GetInput(self::INPUT_ATTRIBUTE)->GetValue($sEventType);
+ parent::UpdateOptions($oOptionsRegister);
+
+ $oClassName = $this->GetInputValue(self::INPUT_CLASS_NAME);
+ $oAttribute = $this->GetInputValue(self::INPUT_ATTRIBUTE);
try{
$oAttDef = MetaModel::GetAttributeDef(strval($oClassName), strval($oAttribute));
$aValues = $oAttDef->GetAllowedValues();
- $this->aDynamicOptions['choices'] = array_flip($aValues ?? []);
+
+ $oOptionsRegister->SetOption('choices', array_flip($aValues ?? []));
}
catch(Exception){}
}
diff --git a/sources/Forms/Block/DataModel/OqlFormBlock.php b/sources/Forms/Block/DataModel/OqlFormBlock.php
index 53097773e..d0a2f524f 100644
--- a/sources/Forms/Block/DataModel/OqlFormBlock.php
+++ b/sources/Forms/Block/DataModel/OqlFormBlock.php
@@ -7,9 +7,11 @@
namespace Combodo\iTop\Forms\Block\DataModel;
use Combodo\iTop\Forms\Block\Base\TextAreaFormBlock;
-use Combodo\iTop\Forms\Block\FormType\OqlFormType;
-use Combodo\iTop\Forms\Block\IO\Converter\OqlToClassConverter;
-use Combodo\iTop\Forms\Block\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\FormType\DataModel\OqlFormType;
+use Combodo\iTop\Forms\IO\Converter\OqlToClassConverter;
+use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\Register\IORegister;
+use Combodo\iTop\Forms\Register\OptionsRegister;
/**
* Form block for oql expression.
@@ -28,16 +30,18 @@ class OqlFormBlock extends TextAreaFormBlock
}
/** @inheritdoc */
- public function InitOutputs(): void
+ protected function RegisterOptions(OptionsRegister $oOptionsRegister): void
{
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_SELECTED_CLASS, ClassIOFormat::class, new OqlToClassConverter());
+ parent::RegisterOptions($oOptionsRegister);
+ $oOptionsRegister->SetOption('with_ai_button', true);
}
/** @inheritdoc */
- public function InitBlockOptions(array &$aUserOptions): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitBlockOptions($aUserOptions);
- $aUserOptions['with_ai_button'] = true;
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddOutput(self::OUTPUT_SELECTED_CLASS, ClassIOFormat::class, new OqlToClassConverter());
}
+
+
}
\ No newline at end of file
diff --git a/sources/Forms/Block/Expression/ExpressionFormBlock.php b/sources/Forms/Block/Expression/ExpressionFormBlock.php
index ec1dbdf95..6a23c2804 100644
--- a/sources/Forms/Block/Expression/ExpressionFormBlock.php
+++ b/sources/Forms/Block/Expression/ExpressionFormBlock.php
@@ -7,8 +7,9 @@
namespace Combodo\iTop\Forms\Block\Expression;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
-use Combodo\iTop\Forms\Block\IO\Format\BooleanIOFormat;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
+use Combodo\iTop\Forms\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\IO\Format\RawFormat;
+use Combodo\iTop\Forms\Register\IORegister;
use Combodo\iTop\Forms\FormsException;
use IssueLog;
use Symfony\Component\Form\FormEvents;
@@ -25,17 +26,17 @@ class ExpressionFormBlock extends AbstractFormBlock
const OUTPUT_RESULT_INVERT = "result_invert";
/** @inheritdoc */
- public function InitOutputs(): void
+ protected function RegisterIO(IORegister $oIORegister): void
{
- parent::InitOutputs();
- $this->AddOutput(self::OUTPUT_RESULT, BooleanIOFormat::class);
- $this->AddOutput(self::OUTPUT_RESULT_INVERT, BooleanIOFormat::class);
+ parent::RegisterIO($oIORegister);
+ $oIORegister->AddOutput(self::OUTPUT_RESULT, BooleanIOFormat::class);
+ $oIORegister->AddOutput(self::OUTPUT_RESULT_INVERT, BooleanIOFormat::class);
}
-
/** @inheritdoc */
public function AllInputsReadyEvent(): void
{
+ parent::AllInputsReadyEvent();
$this->ComputeExpression(FormEvents::POST_SET_DATA);
$this->ComputeExpression(FormEvents::POST_SUBMIT);
}
@@ -50,7 +51,7 @@ class ExpressionFormBlock extends AbstractFormBlock
public function ComputeExpression(string $sEventType): void
{
try{
- $sExpression = $this->GetOptions()['expression'];
+ $sExpression = $this->GetOption('expression');
$sValue = preg_replace_callback(
self::EXPRESSION_PATTERN,
diff --git a/sources/Forms/FormBuilder/DependencyHandler.php b/sources/Forms/FormBuilder/DependencyHandler.php
index d54a39203..18143b7b1 100644
--- a/sources/Forms/FormBuilder/DependencyHandler.php
+++ b/sources/Forms/FormBuilder/DependencyHandler.php
@@ -29,7 +29,6 @@ class DependencyHandler
/** @var array events */
private array $aEvents = [];
- private readonly string $sName;
private readonly FormBuilder $oFormBuilder;
private readonly FormBlock $oFormBlock;
private readonly array $aDependentBlocks;
@@ -43,7 +42,6 @@ class DependencyHandler
*/
public function __construct(FormBuilder $oFormBuilder, FormBlock $oFormBlock, array $aDependentBlocks)
{
- $this->sName = $oFormBuilder->getName();
$this->aDependentBlocks = $aDependentBlocks;
$this->oFormBuilder = $oFormBuilder;
$this->oFormBlock = $oFormBlock;
@@ -61,6 +59,36 @@ class DependencyHandler
self::$aDependencyHandlers[] = $this;
}
+ /**
+ * Get the form name.
+ *
+ * @return string
+ */
+ public function GetName(): string
+ {
+ return $this->oFormBuilder->getName();
+ }
+
+ /**
+ * Get the debug data.
+ *
+ * @return array
+ */
+ public function GetDebugData(): array
+ {
+ return $this->aEvents;
+ }
+
+ /**
+ * Get the dependencies map.
+ *
+ * @return DependencyMap
+ */
+ public function GetMap(): DependencyMap
+ {
+ return $this->oDependenciesMap;
+ }
+
/**
* Add form ready listener.
*
@@ -148,9 +176,8 @@ class DependencyHandler
// When dependencies met, add the dependent field if not already done or options changed
if ($oDependentBlock->IsVisible($sEventType) && $oDependentBlock->IsInputsDataReady($sEventType)) {
- // Get the dependent field options
- $oDependentBlock->UpdateDynamicOptions($sEventType);
- $aOptions = $oDependentBlock->GetOptionsMergedWithDynamic($sEventType);
+ // Get the Symfony options
+ $aOptions = $oDependentBlock->GetOptions();
// Add the listener callback to the dependent field if it is also a dependency for another field
if ($this->oDependenciesMap->HasBlocksImpactedBy($oDependentBlock->getName())) {
@@ -192,29 +219,16 @@ class DependencyHandler
}
/**
- * Get the debug data.
+ * Add a debug event.
*
- * @return array
+ * @param string $sEvent
+ * @param string $sForm
+ * @param mixed $oValue
+ *
+ * @return void
*/
- public function GetDebugData(): array
- {
- return $this->aEvents;
- }
-
- public function GetMap(): DependencyMap
- {
- return $this->oDependenciesMap;
- }
-
-
- public function GetName(): string
- {
- return $this->sName;
- }
-
private function AddEvent(string $sEvent, string $sForm, mixed $oValue = 'NA'): void
{
-
$this->aEvents[] = [
'builder' => $this->oFormBuilder->getName(),
'event' => $sEvent,
diff --git a/sources/Forms/FormBuilder/DependencyMap.php b/sources/Forms/FormBuilder/DependencyMap.php
index e7a2e6ebf..d369e0825 100644
--- a/sources/Forms/FormBuilder/DependencyMap.php
+++ b/sources/Forms/FormBuilder/DependencyMap.php
@@ -9,9 +9,9 @@ namespace Combodo\iTop\Forms\FormBuilder;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
use Combodo\iTop\Forms\Block\Expression\ExpressionFormBlock;
use Combodo\iTop\Forms\Block\FormBlock;
-use Combodo\iTop\Forms\Block\IO\FormBinding;
-use Combodo\iTop\Forms\Block\IO\FormInput;
-use Combodo\iTop\Forms\Block\IO\FormOutput;
+use Combodo\iTop\Forms\IO\FormBinding;
+use Combodo\iTop\Forms\IO\FormInput;
+use Combodo\iTop\Forms\IO\FormOutput;
/**
* Dependencies handler.
diff --git a/sources/Forms/Block/FormType/ChoiceFormType.php b/sources/Forms/FormType/Base/ChoiceFormType.php
similarity index 98%
rename from sources/Forms/Block/FormType/ChoiceFormType.php
rename to sources/Forms/FormType/Base/ChoiceFormType.php
index 2f3726eb2..164f052f8 100644
--- a/sources/Forms/Block/FormType/ChoiceFormType.php
+++ b/sources/Forms/FormType/Base/ChoiceFormType.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\FormType;
+namespace Combodo\iTop\Forms\FormType\Base;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Event\PreSetDataEvent;
diff --git a/sources/Forms/Block/FormType/CollectionFormType.php b/sources/Forms/FormType/Base/CollectionFormType.php
similarity index 95%
rename from sources/Forms/Block/FormType/CollectionFormType.php
rename to sources/Forms/FormType/Base/CollectionFormType.php
index 9a1efd559..352ab7863 100644
--- a/sources/Forms/Block/FormType/CollectionFormType.php
+++ b/sources/Forms/FormType/Base/CollectionFormType.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\FormType;
+namespace Combodo\iTop\Forms\FormType\Base;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
diff --git a/sources/Forms/Block/FormType/FormType.php b/sources/Forms/FormType/Base/FormType.php
similarity index 93%
rename from sources/Forms/Block/FormType/FormType.php
rename to sources/Forms/FormType/Base/FormType.php
index 5b228aa23..23a78b0d3 100644
--- a/sources/Forms/Block/FormType/FormType.php
+++ b/sources/Forms/FormType/Base/FormType.php
@@ -4,10 +4,11 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\FormType;
+namespace Combodo\iTop\Forms\FormType\Base;
use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
use Combodo\iTop\Forms\Block\Base\FormBlock;
+use Combodo\iTop\Forms\FormType\FormTypeHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
diff --git a/sources/Forms/Block/FormType/OqlFormType.php b/sources/Forms/FormType/DataModel/OqlFormType.php
similarity index 96%
rename from sources/Forms/Block/FormType/OqlFormType.php
rename to sources/Forms/FormType/DataModel/OqlFormType.php
index dcbfc699a..aeebdabed 100644
--- a/sources/Forms/Block/FormType/OqlFormType.php
+++ b/sources/Forms/FormType/DataModel/OqlFormType.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\FormType;
+namespace Combodo\iTop\Forms\FormType\DataModel;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
diff --git a/sources/Forms/Block/FormType/FormTypeHelper.php b/sources/Forms/FormType/FormTypeHelper.php
similarity index 98%
rename from sources/Forms/Block/FormType/FormTypeHelper.php
rename to sources/Forms/FormType/FormTypeHelper.php
index 8c71c3c14..33ee45479 100644
--- a/sources/Forms/Block/FormType/FormTypeHelper.php
+++ b/sources/Forms/FormType/FormTypeHelper.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\FormType;
+namespace Combodo\iTop\Forms\FormType;
use Combodo\iTop\Forms\Block\Base\FormBlock;
use Symfony\Component\Form\FormInterface;
diff --git a/sources/Forms/Block/IO/AbstractFormIO.php b/sources/Forms/IO/AbstractFormIO.php
similarity index 99%
rename from sources/Forms/Block/IO/AbstractFormIO.php
rename to sources/Forms/IO/AbstractFormIO.php
index f2e928876..6ef401cd2 100644
--- a/sources/Forms/Block/IO/AbstractFormIO.php
+++ b/sources/Forms/IO/AbstractFormIO.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO;
+namespace Combodo\iTop\Forms\IO;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
use Symfony\Component\Form\FormEvents;
diff --git a/sources/Forms/Block/IO/Converter/AbstractConverter.php b/sources/Forms/IO/Converter/AbstractConverter.php
similarity index 87%
rename from sources/Forms/Block/IO/Converter/AbstractConverter.php
rename to sources/Forms/IO/Converter/AbstractConverter.php
index 14e37f4f3..a0783e930 100644
--- a/sources/Forms/Block/IO/Converter/AbstractConverter.php
+++ b/sources/Forms/IO/Converter/AbstractConverter.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO\Converter;
+namespace Combodo\iTop\Forms\IO\Converter;
/**
* Output converter.
diff --git a/sources/Forms/Block/IO/Converter/ChoiceValueToLabelConverter.php b/sources/Forms/IO/Converter/ChoiceValueToLabelConverter.php
similarity index 75%
rename from sources/Forms/Block/IO/Converter/ChoiceValueToLabelConverter.php
rename to sources/Forms/IO/Converter/ChoiceValueToLabelConverter.php
index a862de9f6..4af8780d5 100644
--- a/sources/Forms/Block/IO/Converter/ChoiceValueToLabelConverter.php
+++ b/sources/Forms/IO/Converter/ChoiceValueToLabelConverter.php
@@ -4,10 +4,10 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO\Converter;
+namespace Combodo\iTop\Forms\IO\Converter;
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
-use Combodo\iTop\Forms\Block\IO\Format\RawFormat;
+use Combodo\iTop\Forms\IO\Format\RawFormat;
/**
*
@@ -28,7 +28,7 @@ class ChoiceValueToLabelConverter extends AbstractConverter
return null;
}
- $aOptions = array_flip($this->oChoiceBlock->GetOptionsMergedWithDynamic()['choices']);
+ $aOptions = array_flip($this->oChoiceBlock->GetOption('choices'));
return new RawFormat($aOptions[$oData]);
}
diff --git a/sources/Forms/Block/IO/Converter/OqlToClassConverter.php b/sources/Forms/IO/Converter/OqlToClassConverter.php
similarity index 88%
rename from sources/Forms/Block/IO/Converter/OqlToClassConverter.php
rename to sources/Forms/IO/Converter/OqlToClassConverter.php
index e1d3a0f88..3a31986c5 100644
--- a/sources/Forms/Block/IO/Converter/OqlToClassConverter.php
+++ b/sources/Forms/IO/Converter/OqlToClassConverter.php
@@ -4,9 +4,9 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO\Converter;
+namespace Combodo\iTop\Forms\IO\Converter;
-use Combodo\iTop\Forms\Block\IO\Format\ClassIOFormat;
+use Combodo\iTop\Forms\IO\Format\ClassIOFormat;
use MetaModel;
use Symfony\Component\Filesystem\Exception\IOException;
diff --git a/sources/Forms/Block/IO/Converter/StringToAttributeConverter.php b/sources/Forms/IO/Converter/StringToAttributeConverter.php
similarity index 78%
rename from sources/Forms/Block/IO/Converter/StringToAttributeConverter.php
rename to sources/Forms/IO/Converter/StringToAttributeConverter.php
index 6d8272418..be8804921 100644
--- a/sources/Forms/Block/IO/Converter/StringToAttributeConverter.php
+++ b/sources/Forms/IO/Converter/StringToAttributeConverter.php
@@ -4,9 +4,9 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO\Converter;
+namespace Combodo\iTop\Forms\IO\Converter;
-use Combodo\iTop\Forms\Block\IO\Format\AttributeIOFormat;
+use Combodo\iTop\Forms\IO\Format\AttributeIOFormat;
/**
* String to attribute converter.
diff --git a/sources/Forms/Block/IO/Converter/StringToBooleanConverter.php b/sources/Forms/IO/Converter/StringToBooleanConverter.php
similarity index 77%
rename from sources/Forms/Block/IO/Converter/StringToBooleanConverter.php
rename to sources/Forms/IO/Converter/StringToBooleanConverter.php
index aab4ffab0..57ee42e8c 100644
--- a/sources/Forms/Block/IO/Converter/StringToBooleanConverter.php
+++ b/sources/Forms/IO/Converter/StringToBooleanConverter.php
@@ -4,9 +4,9 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO\Converter;
+namespace Combodo\iTop\Forms\IO\Converter;
-use Combodo\iTop\Forms\Block\IO\Format\BooleanIOFormat;
+use Combodo\iTop\Forms\IO\Format\BooleanIOFormat;
/**
* OQL expression to class converter.
diff --git a/sources/Forms/Block/IO/FormBinding.php b/sources/Forms/IO/FormBinding.php
similarity index 95%
rename from sources/Forms/Block/IO/FormBinding.php
rename to sources/Forms/IO/FormBinding.php
index 04f78cce5..45e2e662c 100644
--- a/sources/Forms/Block/IO/FormBinding.php
+++ b/sources/Forms/IO/FormBinding.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO;
+namespace Combodo\iTop\Forms\IO;
/**
*
diff --git a/sources/Forms/Block/IO/FormBlockIOException.php b/sources/Forms/IO/FormBlockIOException.php
similarity index 85%
rename from sources/Forms/Block/IO/FormBlockIOException.php
rename to sources/Forms/IO/FormBlockIOException.php
index 5fd40589b..d8c5d875a 100644
--- a/sources/Forms/Block/IO/FormBlockIOException.php
+++ b/sources/Forms/IO/FormBlockIOException.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block;
+namespace Combodo\iTop\Forms\IO;
use Combodo\iTop\Forms\FormsException;
diff --git a/sources/Forms/Block/IO/FormInput.php b/sources/Forms/IO/FormInput.php
similarity index 96%
rename from sources/Forms/Block/IO/FormInput.php
rename to sources/Forms/IO/FormInput.php
index 8e071f006..94a0572ac 100644
--- a/sources/Forms/Block/IO/FormInput.php
+++ b/sources/Forms/IO/FormInput.php
@@ -4,7 +4,7 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO;
+namespace Combodo\iTop\Forms\IO;
/**
*
diff --git a/sources/Forms/Block/IO/FormOutput.php b/sources/Forms/IO/FormOutput.php
similarity index 95%
rename from sources/Forms/Block/IO/FormOutput.php
rename to sources/Forms/IO/FormOutput.php
index 86b25beec..02fdbe17c 100644
--- a/sources/Forms/Block/IO/FormOutput.php
+++ b/sources/Forms/IO/FormOutput.php
@@ -4,10 +4,10 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
-namespace Combodo\iTop\Forms\Block\IO;
+namespace Combodo\iTop\Forms\IO;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
-use Combodo\iTop\Forms\Block\IO\Converter\AbstractConverter;
+use Combodo\iTop\Forms\IO\Converter\AbstractConverter;
/**
*
diff --git a/sources/Forms/Block/IO/Format/AttributeIOFormat.php b/sources/Forms/IO/Format/AttributeIOFormat.php
similarity index 90%
rename from sources/Forms/Block/IO/Format/AttributeIOFormat.php
rename to sources/Forms/IO/Format/AttributeIOFormat.php
index 2e16d42a8..f3edc77e1 100644
--- a/sources/Forms/Block/IO/Format/AttributeIOFormat.php
+++ b/sources/Forms/IO/Format/AttributeIOFormat.php
@@ -1,6 +1,6 @@
oFormBlock);
+ $this->aInputs[$oFormInput->GetName()] = $oFormInput;
+ }
+
+ /**
+ * Add an input connected to another block.
+ *
+ * @param string $sName the input name
+ * @param string $sOutputBlockName
+ * @param string $sOutputName
+ *
+ * @return AbstractFormBlock
+ * @throws FormBlockException
+ */
+ public function AddInputDependsOn(string $sName, string $sOutputBlockName, string $sOutputName): self
+ {
+ $oOutputBlock = $this->oFormBlock->GetParent()->Get($sOutputBlockName);
+ $oBlockOutput = $oOutputBlock->GetOutput($sOutputName);
+
+ $this->AddInput($sName, $oBlockOutput->GetDataType());
+ $this->DependsOn($sName, $sOutputBlockName, $sOutputName);
+
+ return $this;
+ }
+
+ /**
+ * Attach an input to a block output.
+ *
+ * @param string $sInputName the input name
+ * @param string $sOutputBlockName the dependency block name
+ * @param string $sOutputName the dependency output name
+ *
+ * @return $this
+ * @throws FormBlockException
+ */
+ public function DependsOn(string $sInputName, string $sOutputBlockName, string $sOutputName): self
+ {
+ $oOutputBlock = $this->oFormBlock->GetParent()->Get($sOutputBlockName);
+ $oFormInput = $this->GetInput($sInputName);
+ $oFormOutput = $oOutputBlock->GetOutput($sOutputName);
+ $oFormOutput->BindToInput($oFormInput);
+
+ return $this;
+ }
+
+ /**
+ * Attach an output to a parent block output.
+ *
+ * @param string $sOutputName output name
+ * @param string $sParentOutputName parent output name
+ *
+ * @return $this
+ * @throws FormBlockException
+ */
+ public function ImpactParent(string $sOutputName, string $sParentOutputName): self
+ {
+ $oFormOutput = $this->GetOutput($sOutputName);
+ $oParentFormOutput = $this->oFormBlock->GetParent()->GetOutput($sParentOutputName);
+ $oFormOutput->BindToOutput($oParentFormOutput);
+
+ return $this;
+ }
+
+ public function AddOutput(string $sName, string $sType, AbstractConverter $oConverter = null): void
+ {
+ $oFormOutput = new FormOutput($sName, $sType, $this->oFormBlock, $oConverter);
+ $this->aOutputs[$oFormOutput->GetName()] = $oFormOutput;
+ }
+
+ /**
+ * Get an input.
+ *
+ * @param string $sName
+ *
+ * @return FormInput
+ * @throws FormBlockException
+ */
+ public function GetInput(string $sName): FormInput
+ {
+ if (!array_key_exists($sName, $this->aInputs)) {
+ throw new FormBlockException('Missing input '.$sName.' for '.$this->oFormBlock->GetName());
+ }
+
+ return $this->aInputs[$sName];
+ }
+
+ /**
+ * @return array
+ */
+ public function GetInputs(): array
+ {
+ return $this->aInputs;
+ }
+
+ /**
+ * @return array
+ */
+ public function GetBoundInputs(): array
+ {
+ $aInputs = [];
+
+ /** @var FormInput $oFormInput */
+ foreach ($this->aInputs as $oFormInput) {
+ if ($oFormInput->IsBound() || $oFormInput->HasBindingOut()) {
+ $aInputs[] = $oFormInput;
+ }
+ }
+
+ return $aInputs;
+ }
+
+ /**
+ * @return array
+ */
+ public function GetBoundOutputs(): array
+ {
+ $aOutputs = [];
+
+ /** @var FormOutput $oFormOutput */
+ foreach ($this->aOutputs as $oFormOutput) {
+ if ($oFormOutput->IsBound() || $oFormOutput->HasBindingOut()) {
+ $aOutputs[] = $oFormOutput;
+ }
+ }
+
+ return $aOutputs;
+ }
+
+ /**
+ * Get an output.
+ *
+ * @param string $sName output name
+ *
+ * @return FormOutput
+ * @throws FormBlockException
+ */
+ public function GetOutput(string $sName): FormOutput
+ {
+ if (!array_key_exists($sName, $this->aOutputs)) {
+ throw new FormBlockException('Missing output '.$sName.' for '.$this->oFormBlock->GetName());
+ }
+
+ return $this->aOutputs[$sName];
+ }
+
+ /**
+ * @return array
+ */
+ public function GetOutputs(): array
+ {
+ return $this->aOutputs;
+ }
+
+ /**
+ * Check existence of one or more dependencies.
+ *
+ * @return bool
+ */
+ public function HasDependenciesBlocks(): bool
+ {
+ foreach ($this->aInputs as $oFormInput) {
+ if ($oFormInput->IsBound()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check existence of one or more dependents blocks.
+ *
+ * @return bool
+ */
+ public function ImpactDependentsBlocks(): bool
+ {
+ /** @var FormOutput $oFormOutput */
+ foreach ($this->aOutputs as $oFormOutput) {
+ if (count($oFormOutput->GetBindings()) > 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Get bound inputs bindings.
+ *
+ * @return array
+ */
+ public function GetBoundInputsBindings(): array
+ {
+ $aBindings = [];
+
+ /** @var FormInput $oFormInput */
+ foreach ($this->aInputs as $oFormInput) {
+ if ($oFormInput->IsBound()) {
+ $aBindings[$oFormInput->GetName()] = $oFormInput->GetBinding();
+ }
+ }
+
+ return $aBindings;
+ }
+
+ /**
+ * Get bound outputs bindings.
+ *
+ * @return array
+ */
+ public function GetBoundOutputBindings(): array
+ {
+ $aBindings = [];
+
+ /** @var FormInput $oFormInput */
+ foreach ($this->aOutputs as $oFormOutput) {
+ if ($oFormOutput->IsBound()) {
+ $aBindings[$oFormOutput->GetName()] = $oFormOutput->GetBinding();
+ }
+ }
+
+ return $aBindings;
+ }
+
+ /**
+ * Inputs data ready.
+ *
+ * @param string|null $sType
+ *
+ * @return bool
+ */
+ public function IsInputsDataReady(string $sType = null): bool
+ {
+ foreach ($this->aInputs as $oFormInput) {
+ if ($oFormInput->IsBound()) {
+ if (!$oFormInput->IsEventDataReady($sType)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Compute outputs values.
+ *
+ * @param string $sEventType
+ * @param mixed $oData
+ *
+ * @return void
+ */
+ public function ComputeOutputs(string $sEventType, mixed $oData): void
+ {
+ /** Iterate throw output @var FormOutput $oFormOutput */
+ foreach ($this->aOutputs as $oFormOutput) {
+
+ // Compute the output value
+ $oFormOutput->ComputeValue($sEventType, $oData);
+
+ }
+
+ }
+
+ /**
+ * Attach an input to a parent block input.
+ *
+ * @param string $sInputName input name
+ * @param string $sParentInputName parent input name
+ *
+ * @return $this
+ * @throws FormBlockException
+ */
+ public function DependsOnParent(string $sInputName, string $sParentInputName): self
+ {
+ $oFormInput = $this->GetInput($sInputName);
+ $oParentFormInput = $this->oFormBlock->GetParent()->GetInput($sParentInputName);
+ $oParentFormInput->BindToInput($oFormInput);
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/sources/Forms/Register/Option.php b/sources/Forms/Register/Option.php
new file mode 100644
index 000000000..077879717
--- /dev/null
+++ b/sources/Forms/Register/Option.php
@@ -0,0 +1,10 @@
+aOptions[$sOptionName])){
+ $this->aOptions[$sOptionName]->oValue = $mDefaultValue;
+ }
+ else{
+ $this->aOptions[$sOptionName] = new Option($sOptionName, $mDefaultValue, $bTypeOption);
+ }
+ }
+
+ /**
+ * Set an option array value.
+ *
+ * @param string $sOptionName
+ * @param string $sArrayKey
+ * @param mixed $mDefaultValue
+ *
+ * @return void
+ */
+ public function SetOptionArrayValue(string $sOptionName, string $sArrayKey, mixed $mDefaultValue = null): void
+ {
+ // Initialization of the option as an array if not set
+ if(!isset($this->aOptions[$sOptionName])){
+ $this->SetOption($sOptionName, []);
+ }
+
+ $this->aOptions[$sOptionName]->oValue[$sArrayKey] = $mDefaultValue;
+ }
+
+ /**
+ * Get all options.
+ *
+ * @return array
+ */
+ public function GetOptions(): array
+ {
+ $aOptions = array_filter($this->aOptions, fn ($oElement) => $oElement->bIsTypeOption);
+ return array_map( fn ($oElement) => $oElement->oValue, $aOptions);
+ }
+
+ /**
+ * Get a type option.
+ *
+ * @param string $sOption
+ *
+ * @return mixed
+ */
+ public function GetOption(string $sOption): mixed
+ {
+ return $this->aOptions[$sOption]->oValue;
+ }
+
+ /**
+ * Check if an option exists.
+ *
+ * @param string $sOption
+ *
+ * @return bool
+ */
+ public function HasOption(string $sOption): bool
+ {
+ return array_key_exists($sOption, $this->aOptions);
+ }
+}
\ No newline at end of file
diff --git a/tests/php-unit-tests/unitary-tests/sources/Forms/Block.php b/tests/php-unit-tests/unitary-tests/sources/Forms/Block.php
index e82c51251..7036c48f5 100644
--- a/tests/php-unit-tests/unitary-tests/sources/Forms/Block.php
+++ b/tests/php-unit-tests/unitary-tests/sources/Forms/Block.php
@@ -7,6 +7,7 @@
namespace Forms;
use Combodo\iTop\Forms\Block\AbstractFormBlock;
+use Combodo\iTop\Forms\Block\AbstractTypeFormBlock;
use Combodo\iTop\Forms\Block\Base\CheckboxFormBlock;
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
use Combodo\iTop\Forms\Block\Base\FormBlock;
@@ -38,8 +39,10 @@ class Block extends ItopDataTestCase
$aFormBlocks = InterfaceDiscovery::GetInstance()->FindItopClasses(iFormBlock::class);
foreach ($aFormBlocks as $sFormBlock) {
$oChoiceBlock = new($sFormBlock)($sFormBlock);
- $oClass = new \ReflectionClass($oChoiceBlock->GetFormType());
- $this->assertTrue($oClass->isSubclassOf(AbstractType::class));
+ if($oChoiceBlock instanceof AbstractTypeFormBlock){
+ $oClass = new \ReflectionClass($oChoiceBlock->GetFormType());
+ $this->assertTrue($oClass->isSubclassOf(AbstractType::class));
+ }
}
}
@@ -63,7 +66,7 @@ class Block extends ItopDataTestCase
$aFormBlocks = InterfaceDiscovery::GetInstance()->FindItopClasses(iFormBlock::class);
foreach ($aFormBlocks as $sFormBlock) {
$oChoiceBlock = new($sFormBlock)($sFormBlock);
- $this->assertTrue($oChoiceBlock->GetOptions()['form_block'] === $oChoiceBlock);
+ $this->assertTrue($oChoiceBlock->GetOption('form_block') === $oChoiceBlock);
}
}
@@ -79,7 +82,7 @@ class Block extends ItopDataTestCase
$oFormBlock = new FormBlock('formBlock');
$oFormBlock->Add('allow_age', CheckboxFormBlock::class, []);
$oBirthdateBlock = $oFormBlock->Add('birthdate', TextFormBlock::class, [])
- ->DependsOn(AbstractFormBlock::INPUT_VISIBLE, 'allow_age', CheckboxFormBlock::OUTPUT_CHECKED);
+ ->DependsOn(AbstractTypeFormBlock::INPUT_VISIBLE, 'allow_age', CheckboxFormBlock::OUTPUT_CHECKED);
$this->assertTrue($oBirthdateBlock->HasDependenciesBlocks());
}
@@ -99,7 +102,7 @@ class Block extends ItopDataTestCase
$oFormBlock->Add('lastname', TextFormBlock::class, []);
$oFormBlock->Add('allow_age', CheckboxFormBlock::class, []);
$oFormBlock->Add('birthdate', TextFormBlock::class, [])
- ->DependsOn(AbstractFormBlock::INPUT_VISIBLE, 'allow_age', CheckboxFormBlock::OUTPUT_CHECKED);
+ ->DependsOn(AbstractTypeFormBlock::INPUT_VISIBLE, 'allow_age', CheckboxFormBlock::OUTPUT_CHECKED);
// form builder
$oFormFactoryBuilder = Forms::createFormFactoryBuilder();