N°8772 - compilation of choices from inputs

This commit is contained in:
Eric Espie
2025-12-16 11:03:52 +01:00
parent 2530d59e08
commit 75afd3ba46
8 changed files with 73 additions and 5 deletions

View File

@@ -64,6 +64,10 @@ class Property extends AbstractProperty
$this->GenerateInputs($sInputName, $sValue, $sPrerequisiteExpressions, $sInputs);
}
foreach ($this->oValueType->GetDynamicInputValues() as $sInputName => $sValue) {
$this->GenerateInputs($sInputName, $sValue, $sPrerequisiteExpressions, $sInputs, true);
}
$sLabel = utils::QuoteForPHP($this->sLabel);
$aOptions = [
'label' => $sLabel,
@@ -80,10 +84,11 @@ $sOptions\t\t]){$sInputs};
PHP;
}
private function GenerateInputs(string $sInputName, string $sValue, string &$sPrerequisiteExpressions, string &$sInputs): void
private function GenerateInputs(string $sInputName, string $sValue, string &$sPrerequisiteExpressions, string &$sInputs, bool $bIsDynamic = false): void
{
if (preg_match('/^{{(?<node>\w+)\.(?<output>\w+)}}$/', $sValue, $aMatches) === 1) {
$sInputs .= "\n ->InputDependsOn('$sInputName', '{$aMatches['node']}', '{$aMatches['output']}')";
$sVerb = $bIsDynamic ? 'AddInputDependsOn' : 'InputDependsOn';
$sInputs .= "\n ->$sVerb('$sInputName', '{$aMatches['node']}', '{$aMatches['output']}')";
} elseif (preg_match('/^{{(?<expression>.*)}}$/', $sValue, $aMatches) === 1) {
$sExpression = $aMatches['expression'];
$sBindings = '';
@@ -125,8 +130,8 @@ PHP;
PHP;
$sInputs .= "\n ->InputDependsOn('$sInputName', '{$this->sId}_{$sInputName}_expression', 'result')";
$sVerb = $bIsDynamic ? 'AddInputDependsOn' : 'InputDependsOn';
$sInputs .= "\n ->$sVerb('$sInputName', '{$this->sId}_{$sInputName}_expression', 'result')";
} else {
$sInputs .= "\n ->SetInputValue('$sInputName', ".utils::QuoteForPHP($sValue).")";
}

View File

@@ -22,6 +22,7 @@ abstract class AbstractValueType
protected array $aInputs = [];
protected array $aOutputs = [];
protected array $aInputValues = [];
protected array $aDynamicInputValues = [];
protected array $aFormBlockOptionsForPHP = [];
public function InitFromDomNode(DesignElement $oDomNode): void
@@ -56,6 +57,11 @@ abstract class AbstractValueType
return $this->aInputs[$sInputName]->GetDataType();
}
public function GetDynamicInputValues(): array
{
return $this->aDynamicInputValues;
}
public function GetOutputs(): array
{
return $this->aOutputs;

View File

@@ -0,0 +1,33 @@
<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\PropertyTree\ValueType;
use Combodo\iTop\DesignElement;
use Combodo\iTop\Forms\Block\Base\ChoiceFromInputsBlock;
use Combodo\iTop\PropertyTree\ValueType\AbstractValueType;
use utils;
class ValueTypeChoiceFromInput extends AbstractValueType
{
public function GetFormBlockClass(): string
{
return ChoiceFromInputsBlock::class;
}
public function InitFromDomNode(DesignElement $oDomNode): void
{
parent::InitFromDomNode($oDomNode);
foreach ($oDomNode->GetNodes('values/value') as $oValueNode) {
/** @var DesignElement $oValueNode */
$sValue = $oValueNode->GetAttribute('id');
$sLabel = $oValueNode->GetChildText('label');
$this->aDynamicInputValues[$sValue] = $sLabel;
}
}
}

View File

@@ -104,6 +104,7 @@ class_alias(\Combodo\iTop\PropertyTree\CollectionOfTrees::class, 'Combodo-Collec
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeAggregateFunction::class, 'Combodo-ValueTypeAggregateFunction');
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeChoice::class, 'Combodo-ValueTypeChoice');
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeChoiceFromInput::class, 'Combodo-ValueTypeChoiceFromInput');
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeClass::class, 'Combodo-ValueTypeClass');
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeClassAttribute::class, 'Combodo-ValueTypeClassAttribute');
class_alias(\Combodo\iTop\PropertyTree\ValueType\ValueTypeClassAttributeGroupBy::class, 'Combodo-ValueTypeClassAttributeGroupBy');