diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index cfcf6c8397..9695848290 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -492,7 +492,9 @@ return array( 'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeChoiceFormBlock' => $baseDir . '/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeValueChoiceFormBlock' => $baseDir . '/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php', '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\\Expression\\AbstractExpressionFormBlock' => $baseDir . '/sources/Forms/Block/Expression/AbstractExpressionFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Expression\\BooleanExpressionFormBlock' => $baseDir . '/sources/Forms/Block/Expression/BooleanExpressionFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Expression\\IntegerExpressionFormBlock' => $baseDir . '/sources/Forms/Block/Expression/IntegerExpressionFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\FormBlockException' => $baseDir . '/sources/Forms/Block/FormBlockException.php', 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyHandler' => $baseDir . '/sources/Forms/FormBuilder/DependencyHandler.php', 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => $baseDir . '/sources/Forms/FormBuilder/DependencyMap.php', @@ -515,7 +517,6 @@ return array( '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', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index b9ac234ec9..f311fe0a66 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -873,7 +873,9 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f 'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeChoiceFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeValueChoiceFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/DataModel/AttributeValueChoiceFormBlock.php', '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\\Expression\\AbstractExpressionFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Expression/AbstractExpressionFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Expression\\BooleanExpressionFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Expression/BooleanExpressionFormBlock.php', + 'Combodo\\iTop\\Forms\\Block\\Expression\\IntegerExpressionFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Expression/IntegerExpressionFormBlock.php', 'Combodo\\iTop\\Forms\\Block\\FormBlockException' => __DIR__ . '/../..' . '/sources/Forms/Block/FormBlockException.php', 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyHandler' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyHandler.php', 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyMap.php', @@ -896,7 +898,6 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f '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', diff --git a/sources/Forms/Block/Expression/ExpressionFormBlock.php b/sources/Forms/Block/Expression/AbstractExpressionFormBlock.php similarity index 55% rename from sources/Forms/Block/Expression/ExpressionFormBlock.php rename to sources/Forms/Block/Expression/AbstractExpressionFormBlock.php index 48c9c6feaa..e73196c2f9 100644 --- a/sources/Forms/Block/Expression/ExpressionFormBlock.php +++ b/sources/Forms/Block/Expression/AbstractExpressionFormBlock.php @@ -17,24 +17,12 @@ use Symfony\Component\Form\FormEvents; /** * */ -class ExpressionFormBlock extends AbstractFormBlock +abstract class AbstractExpressionFormBlock extends AbstractFormBlock { public const EXPRESSION_PATTERN = "/:(?\w+)/"; - // Outputs - public const OUTPUT_RESULT = "result"; - public const OUTPUT_RESULT_INVERT = "result_invert"; - - /** @inheritdoc */ - protected function RegisterIO(IORegister $oIORegister): void - { - parent::RegisterIO($oIORegister); - $oIORegister->AddOutput(self::OUTPUT_RESULT, BooleanIOFormat::class); - $oIORegister->AddOutput(self::OUTPUT_RESULT_INVERT, BooleanIOFormat::class); - } - /** @inheritdoc - * @throws \Combodo\iTop\Forms\Block\FormBlockException + * @throws FormBlockException */ public function AllInputsReadyEvent(): void { @@ -48,26 +36,20 @@ class ExpressionFormBlock extends AbstractFormBlock * * @param string $sEventType * - * @return void - * @throws \Combodo\iTop\Forms\Block\FormBlockException + * @return mixed + * @throws FormBlockException */ - public function ComputeExpression(string $sEventType): void + public function ComputeExpression(string $sEventType): mixed { - $sExpression = ''; + $sExpression = $this->GetOption('expression'); try { - $sExpression = $this->GetOption('expression'); - $oExpression = Expression::FromOQL($sExpression); $aParamsToResolve = $oExpression->GetParameters(); $aResolvedParams = []; foreach ($aParamsToResolve as $sParamToResolve) { $aResolvedParams[$sParamToResolve] = $this->GetInputValue($sParamToResolve); } - $result = $oExpression->Evaluate($aResolvedParams); - - $bResult = boolval($result); - $this->GetOutput(self::OUTPUT_RESULT)->SetValue($sEventType, new BooleanIOFormat($bResult)); - $this->GetOutput(self::OUTPUT_RESULT_INVERT)->SetValue($sEventType, new BooleanIOFormat(!$bResult)); + return $oExpression->Evaluate($aResolvedParams); } catch (\Exception $e) { throw new FormBlockException('Compute expression '.json_encode($sExpression).' block issue', 0, $e); } diff --git a/sources/Forms/Block/Expression/BooleanExpressionFormBlock.php b/sources/Forms/Block/Expression/BooleanExpressionFormBlock.php new file mode 100644 index 0000000000..50e78e80db --- /dev/null +++ b/sources/Forms/Block/Expression/BooleanExpressionFormBlock.php @@ -0,0 +1,51 @@ +AddOutput(self::OUTPUT_CONDITION_MET, BooleanIOFormat::class); + $oIORegister->AddOutput(self::OUTPUT_CONDITION_UNMET, BooleanIOFormat::class); + } + + /** + * Compute the expression and set the output values. + * + * @param string $sEventType + * + * @return mixed + * @throws FormBlockException + */ + public function ComputeExpression(string $sEventType): mixed + { + $oResult = parent::ComputeExpression($sEventType); + + // Update output + $bResult = boolval($oResult); + $this->GetOutput(self::OUTPUT_CONDITION_MET)->SetValue($sEventType, new BooleanIOFormat($bResult)); + $this->GetOutput(self::OUTPUT_CONDITION_UNMET)->SetValue($sEventType, new BooleanIOFormat(!$bResult)); + + return $oResult; + } + +} diff --git a/sources/Forms/Block/Expression/IntegerExpressionFormBlock.php b/sources/Forms/Block/Expression/IntegerExpressionFormBlock.php new file mode 100644 index 0000000000..1c493daddb --- /dev/null +++ b/sources/Forms/Block/Expression/IntegerExpressionFormBlock.php @@ -0,0 +1,48 @@ +AddOutput(self::OUTPUT_NUMBER, NumberIOFormat::class); + } + + /** + * Compute the expression and set the output values. + * + * @param string $sEventType + * + * @return mixed + * @throws FormBlockException + */ + public function ComputeExpression(string $sEventType): mixed + { + $oResult = parent::ComputeExpression($sEventType); + + // Update output + $iVal = intval($oResult); + $this->GetOutput(self::OUTPUT_NUMBER)->SetValue($sEventType, new NumberIOFormat($iVal)); + + return $oResult; + } + +} diff --git a/sources/Forms/FormBuilder/DependencyMap.php b/sources/Forms/FormBuilder/DependencyMap.php index 4c686f3896..ac80dfb2d9 100644 --- a/sources/Forms/FormBuilder/DependencyMap.php +++ b/sources/Forms/FormBuilder/DependencyMap.php @@ -8,7 +8,7 @@ namespace Combodo\iTop\Forms\FormBuilder; use Combodo\iTop\Forms\Block\AbstractFormBlock; -use Combodo\iTop\Forms\Block\Expression\ExpressionFormBlock; +use Combodo\iTop\Forms\Block\Expression\AbstractExpressionFormBlock; use Combodo\iTop\Forms\Block\FormBlock; use Combodo\iTop\Forms\IO\FormBinding; use Combodo\iTop\Forms\IO\FormInput; @@ -132,7 +132,7 @@ class DependencyMap $this->aBlocksImpactedBy[$sDependsOnName][$oImpactedBlock->GetName()] = $oImpactedBlock; // TODO - if ($oImpactedBlock instanceof ExpressionFormBlock) { + if ($oImpactedBlock instanceof AbstractExpressionFormBlock) { foreach ($oImpactedBlock->GetOutputs() as $oOutput) { foreach ($oOutput->GetBindings() as $oBinding) { $this->AddToBlockImpactedBy($sDependsOnName, $oBinding->oDestinationIO->GetOwnerBlock());