N°8771 - Add Symfony form component to iTop core

- WIP
This commit is contained in:
Benjamin Dalsass
2025-10-23 13:29:04 +02:00
parent 5dea3f5299
commit 8c3543363e
8 changed files with 75 additions and 20 deletions

View File

@@ -473,6 +473,16 @@ return array(
'Combodo\\iTop\\Form\\Validator\\MultipleChoicesValidator' => $baseDir . '/sources/Form/Validator/MultipleChoicesValidator.php',
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => $baseDir . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => $baseDir . '/sources/Form/Validator/SelectObjectValidator.php',
'Combodo\\iTop\\Forms\\Block\\AbstractFormBlock' => $baseDir . '/sources/Forms/Block/AbstractFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFormBlock' => $baseDir . '/sources/Forms/Block/Base/ChoiceFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\StringFormBlock' => $baseDir . '/sources/Forms/Block/Base/StringFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeChoiceFormBlock' => $baseDir . '/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\DataModel\\OqlFormBlock' => $baseDir . '/sources/Forms/Block/DataModel/OqlFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormBlock' => $baseDir . '/sources/Forms/Block/FormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormInput' => $baseDir . '/sources/Forms/Block/FormInput.php',
'Combodo\\iTop\\Forms\\Block\\FormOutput' => $baseDir . '/sources/Forms/Block/FormOutput.php',
'Combodo\\iTop\\Forms\\Converter\\AbstractConverter' => $baseDir . '/sources/Forms/Converter/AbstractConverter.php',
'Combodo\\iTop\\Forms\\Converter\\OqlToClassName' => $baseDir . '/sources/Forms/Converter/OqlToClassName.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyDescription' => $baseDir . '/sources/Forms/Dependency/DependencyDescription.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyHandler' => $baseDir . '/sources/Forms/Dependency/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => $baseDir . '/sources/Forms/FormBuilder/FormBuilder.php',

View File

@@ -854,6 +854,16 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Form\\Validator\\MultipleChoicesValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/MultipleChoicesValidator.php',
'Combodo\\iTop\\Form\\Validator\\NotEmptyExtKeyValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/NotEmptyExtKeyValidator.php',
'Combodo\\iTop\\Form\\Validator\\SelectObjectValidator' => __DIR__ . '/../..' . '/sources/Form/Validator/SelectObjectValidator.php',
'Combodo\\iTop\\Forms\\Block\\AbstractFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/AbstractFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\ChoiceFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/ChoiceFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\Base\\StringFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/Base/StringFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\DataModel\\AttributeChoiceFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/DataModel/AttributeChoiceFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\DataModel\\OqlFormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/DataModel/OqlFormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormBlock' => __DIR__ . '/../..' . '/sources/Forms/Block/FormBlock.php',
'Combodo\\iTop\\Forms\\Block\\FormInput' => __DIR__ . '/../..' . '/sources/Forms/Block/FormInput.php',
'Combodo\\iTop\\Forms\\Block\\FormOutput' => __DIR__ . '/../..' . '/sources/Forms/Block/FormOutput.php',
'Combodo\\iTop\\Forms\\Converter\\AbstractConverter' => __DIR__ . '/../..' . '/sources/Forms/Converter/AbstractConverter.php',
'Combodo\\iTop\\Forms\\Converter\\OqlToClassName' => __DIR__ . '/../..' . '/sources/Forms/Converter/OqlToClassName.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyDescription' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyDescription.php',
'Combodo\\iTop\\Forms\\Dependency\\DependencyHandler' => __DIR__ . '/../..' . '/sources/Forms/Dependency/DependencyHandler.php',
'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilder.php',

View File

@@ -4,6 +4,7 @@ namespace Combodo\iTop\Forms\Block;
abstract class AbstractFormBlock
{
private string $sName;
private array $aOptions = [];
@@ -13,9 +14,17 @@ abstract class AbstractFormBlock
private array $aFormOutputs = [];
public function __construct(array $aOptions = [])
public function __construct(string $sName, array $aOptions = [])
{
$this->sName = $sName;
$this->aOptions = $aOptions;
$this->InitInputs();
$this->InitOutputs();
}
public function GetName(){
return $this->sName;
}
public function GetOptions(): array
@@ -53,5 +62,8 @@ abstract class AbstractFormBlock
return $this->aFormOutputs[$sName];
}
abstract public function GetFormType(): string;
abstract public function InitInputs(): void;
abstract public function InitOutputs(): void;
}

View File

@@ -3,14 +3,12 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\FormBlock;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class ChoiceFormBlock extends FormBlock
{
public function __construct(array $aOptions = [])
public function GetFormType(): string
{
parent::__construct($aOptions);
return ChoiceType::class;
}
}

View File

@@ -3,9 +3,13 @@
namespace Combodo\iTop\Forms\Block\Base;
use Combodo\iTop\Forms\Block\FormBlock;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class StringFormBlock extends FormBlock
{
public function GetFormType(): string
{
return TextType::class;
}
}

View File

@@ -2,17 +2,15 @@
namespace Combodo\iTop\Forms\Block\DataModel;
use Combodo\iTop\Forms\Block\FormBlock;
use Combodo\iTop\Forms\Block\Base\ChoiceFormBlock;
use Combodo\iTop\Forms\Block\FormInput;
class AttributeChoiceFormBlock extends FormBlock
class AttributeChoiceFormBlock extends ChoiceFormBlock
{
public function __construct(array $aOptions = [])
public function InitInputs(): void
{
parent::__construct($aOptions);
$this->AddInput(new FormInput('class_name', 'string'));
}

View File

@@ -2,20 +2,15 @@
namespace Combodo\iTop\Forms\Block\DataModel;
use Combodo\iTop\Forms\Block\FormBlock;
use Combodo\iTop\Forms\Block\Base\StringFormBlock;
use Combodo\iTop\Forms\Block\FormOutput;
class OqlFormBlock extends FormBlock
class OqlFormBlock extends StringFormBlock
{
public function __construct(array $aOptions = [])
public function InitOutputs(): void
{
parent::__construct($aOptions);
$this->AddOutput(new FormOutput('selected_class', 'string'));
}
}

View File

@@ -2,9 +2,37 @@
namespace Combodo\iTop\Forms\Block;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
class FormBlock extends AbstractFormBlock
{
public function __construct(string $sName, array $aOptions = [])
{
parent::__construct($sName, $aOptions);
}
public function GetFormType(): string
{
return FormType::class;
}
public function InitInputs(): void
{
}
public function InitOutputs(): void
{
}
public function Build(FormBuilderInterface $oBuilder): FormInterface
{
foreach ($this->GetSubFormBlocks() as $oSubForm) {
$oBuilder->add($oSubForm->GetName(), $oSubForm->GetFormType(), $oSubForm->GetOptions());
}
return $oBuilder->getForm();
}
}