mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-20 15:52:24 +02:00
SDK Form demonstrator dynamic field without dependency
This commit is contained in:
@@ -45,9 +45,9 @@ abstract class AbstractType extends SymfonyAbstractType
|
|||||||
*
|
*
|
||||||
* @return array|null null if field is not present
|
* @return array|null null if field is not present
|
||||||
*/
|
*/
|
||||||
public function BuildOptions(array $aUserOptions, array $aModelData): ?array
|
public function BuildOptions(array $aUserOptions, array $aModelData = []): ?array
|
||||||
{
|
{
|
||||||
return null;
|
return $aUserOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ class FormBuilder implements FormBuilderInterface, \IteratorAggregate
|
|||||||
$aPrerequisites = $oType->GetPrerequisites($options);
|
$aPrerequisites = $oType->GetPrerequisites($options);
|
||||||
if (is_null($aPrerequisites)) {
|
if (is_null($aPrerequisites)) {
|
||||||
$this->oDependencies->Add($child, $type);
|
$this->oDependencies->Add($child, $type);
|
||||||
|
$options = $oType->BuildOptions($options);
|
||||||
$this->builder->add($child, $type, $options);
|
$this->builder->add($child, $type, $options);
|
||||||
} else {
|
} else {
|
||||||
$this->oDependencies->Add($child, $type, $aPrerequisites, $options);
|
$this->oDependencies->Add($child, $type, $aPrerequisites, $options);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class AttCodeGroupByType extends AbstractType
|
|||||||
return SymfonyChoiceType::class;
|
return SymfonyChoiceType::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function BuildOptions(array $aUserOptions, array $aModelData): ?array
|
public function BuildOptions(array $aUserOptions, array $aModelData = []): ?array
|
||||||
{
|
{
|
||||||
$oModelReflection = new \ModelReflectionRuntime();
|
$oModelReflection = new \ModelReflectionRuntime();
|
||||||
$sClassOrOql = $aModelData[$aUserOptions['source_class']];
|
$sClassOrOql = $aModelData[$aUserOptions['source_class']];
|
||||||
|
|||||||
@@ -4,37 +4,38 @@
|
|||||||
* @license http://opensource.org/licenses/AGPL-3.0
|
* @license http://opensource.org/licenses/AGPL-3.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Combodo\iTop\Forms\FormType\Attribute;
|
namespace Combodo\iTop\Forms\FormType\Orm\Attribute;
|
||||||
|
|
||||||
use Combodo\iTop\Forms\FormType\Base\AbstractType;
|
use Combodo\iTop\Forms\FormType\Base\AbstractType;
|
||||||
use Combodo\iTop\Forms\FormType\FormTypeException;
|
use Combodo\iTop\Forms\FormType\FormTypeException;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType as SymfonyChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType as SymfonyChoiceType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use ValueSetObjects;
|
use ValueSetObjects;
|
||||||
|
|
||||||
class ExternalKeyType extends AbstractType
|
class ExternalKeyType extends AbstractType
|
||||||
{
|
{
|
||||||
|
public function getParent()
|
||||||
|
{
|
||||||
|
return SymfonyChoiceType::class;
|
||||||
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
parent::configureOptions($resolver);
|
parent::configureOptions($resolver);
|
||||||
$resolver->setRequired('class');
|
|
||||||
$resolver->setAllowedTypes('class', 'string');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function BuildOptions(array $aUserOptions, array $aModelData = []): ?array
|
||||||
{
|
{
|
||||||
$oModelReflection = new \ModelReflectionRuntime();
|
$oModelReflection = new \ModelReflectionRuntime();
|
||||||
$sClass = $options['class'];
|
$sClass = $aUserOptions['class'];
|
||||||
if (!$oModelReflection->IsValidClass($sClass)) {
|
if (!$oModelReflection->IsValidClass($sClass)) {
|
||||||
throw new FormTypeException("Unknown class $sClass");
|
throw new FormTypeException("Unknown class $sClass");
|
||||||
}
|
}
|
||||||
$oValueSet = new ValueSetObjects("SELECT `$sClass`");
|
$oValueSet = new ValueSetObjects("SELECT `$sClass`");
|
||||||
$aUserOptions['choices'] = array_flip($oValueSet->GetValues([]));
|
$aOptions['choices'] = array_flip($oValueSet->GetValues([]));
|
||||||
$aUserOptions['multiple'] = false;
|
$aOptions['multiple'] = false;
|
||||||
$aUserOptions['inherit_data'] = true;
|
|
||||||
$builder->add('selected', SymfonyChoiceType::class, $aUserOptions);
|
return $aOptions;
|
||||||
parent::buildForm($builder, $options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,7 @@ class ValuesFromAttcodeType extends AbstractType
|
|||||||
return SymfonyChoiceType::class;
|
return SymfonyChoiceType::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function BuildOptions(array $aUserOptions, array $aModelData): ?array
|
public function BuildOptions(array $aUserOptions, array $aModelData = []): ?array
|
||||||
{
|
{
|
||||||
$sAttCode = $aModelData[$aUserOptions['source_attcode']] ?? null;
|
$sAttCode = $aModelData[$aUserOptions['source_attcode']] ?? null;
|
||||||
if (utils::IsNullOrEmptyString($sAttCode)) {
|
if (utils::IsNullOrEmptyString($sAttCode)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user