mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-20 07:42:17 +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
|
||||
*/
|
||||
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);
|
||||
if (is_null($aPrerequisites)) {
|
||||
$this->oDependencies->Add($child, $type);
|
||||
$options = $oType->BuildOptions($options);
|
||||
$this->builder->add($child, $type, $options);
|
||||
} else {
|
||||
$this->oDependencies->Add($child, $type, $aPrerequisites, $options);
|
||||
|
||||
@@ -19,7 +19,7 @@ class AttCodeGroupByType extends AbstractType
|
||||
return SymfonyChoiceType::class;
|
||||
}
|
||||
|
||||
public function BuildOptions(array $aUserOptions, array $aModelData): ?array
|
||||
public function BuildOptions(array $aUserOptions, array $aModelData = []): ?array
|
||||
{
|
||||
$oModelReflection = new \ModelReflectionRuntime();
|
||||
$sClassOrOql = $aModelData[$aUserOptions['source_class']];
|
||||
|
||||
@@ -4,37 +4,38 @@
|
||||
* @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\FormTypeException;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType as SymfonyChoiceType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use ValueSetObjects;
|
||||
|
||||
class ExternalKeyType extends AbstractType
|
||||
{
|
||||
public function getParent()
|
||||
{
|
||||
return SymfonyChoiceType::class;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $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();
|
||||
$sClass = $options['class'];
|
||||
$sClass = $aUserOptions['class'];
|
||||
if (!$oModelReflection->IsValidClass($sClass)) {
|
||||
throw new FormTypeException("Unknown class $sClass");
|
||||
}
|
||||
$oValueSet = new ValueSetObjects("SELECT `$sClass`");
|
||||
$aUserOptions['choices'] = array_flip($oValueSet->GetValues([]));
|
||||
$aUserOptions['multiple'] = false;
|
||||
$aUserOptions['inherit_data'] = true;
|
||||
$builder->add('selected', SymfonyChoiceType::class, $aUserOptions);
|
||||
parent::buildForm($builder, $options);
|
||||
$aOptions['choices'] = array_flip($oValueSet->GetValues([]));
|
||||
$aOptions['multiple'] = false;
|
||||
|
||||
return $aOptions;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,7 +18,7 @@ class ValuesFromAttcodeType extends AbstractType
|
||||
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;
|
||||
if (utils::IsNullOrEmptyString($sAttCode)) {
|
||||
|
||||
Reference in New Issue
Block a user