/**
  * {@inheritdoc}
  */
 public function configure($name, array $options, array $metadata, FormConfigInterface $parentConfig)
 {
     // The implementation uses a FormTypeGuesserInterface instance in order
     // to guess the "required" value from different sources (PHPdoc,
     // validation or doctrine metadata, etc.)
     $guessed = $this->guesser->guessRequired($parentConfig->getDataClass(), $name);
     if (null !== $guessed) {
         $options['required'] = $guessed->getValue();
     }
     return $options;
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $entity = $options['entity'];
     $view = $options['view'];
     $entityConfig = $this->configurator->getEntityConfiguration($entity);
     $entityProperties = $entityConfig[$view]['fields'];
     foreach ($entityProperties as $name => $metadata) {
         $formFieldOptions = $metadata['type_options'];
         if ('association' === $metadata['type']) {
             if ($metadata['associationType'] & ClassMetadata::TO_MANY) {
                 $formFieldOptions['attr']['multiple'] = true;
             }
             // supported associations are displayed using advanced JavaScript widgets
             $formFieldOptions['attr']['data-widget'] = 'select2';
         }
         if ('collection' === $metadata['fieldType']) {
             if (!isset($formFieldOptions['allow_add'])) {
                 $formFieldOptions['allow_add'] = true;
             }
             if (!isset($formFieldOptions['allow_delete'])) {
                 $formFieldOptions['allow_delete'] = true;
             }
             // The "delete_empty" option exists as of Sf >= 2.5
             if (class_exists('Symfony\\Component\\Form\\FormErrorIterator')) {
                 if (!isset($formFieldOptions['delete_empty'])) {
                     $formFieldOptions['delete_empty'] = true;
                 }
             }
         } elseif ('checkbox' === $metadata['fieldType'] && !isset($formFieldOptions['required'])) {
             $formFieldOptions['required'] = false;
         }
         if (!isset($formFieldOptions['required'])) {
             if (null !== ($guessRequired = $this->guesser->guessRequired($builder->getOption('data_class'), $name))) {
                 $formFieldOptions['required'] = $guessRequired->getValue();
             }
         }
         // Configure "placeholder" option for entity fields
         if ('association' === $metadata['type'] && $metadata['associationType'] & ClassMetadata::TO_ONE && !isset($formFieldOptions[$placeHolderOptionName = $this->getPlaceholderOptionName()]) && false === $formFieldOptions['required']) {
             $formFieldOptions[$placeHolderOptionName] = 'form.label.empty_value';
         }
         $formFieldOptions['attr']['field_type'] = $metadata['fieldType'];
         $formFieldOptions['attr']['field_css_class'] = $metadata['class'];
         $formFieldOptions['attr']['field_help'] = $metadata['help'];
         $formFieldType = $this->useLegacyFormComponent() ? $metadata['fieldType'] : $this->getFormTypeFqcn($metadata['fieldType']);
         $builder->add($name, $formFieldType, $formFieldOptions);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $entity = $options['entity'];
     $view = $options['view'];
     $entityConfig = $this->configurator->getEntityConfiguration($entity);
     $entityProperties = $entityConfig[$view]['fields'];
     foreach ($entityProperties as $name => $metadata) {
         $formFieldOptions = $metadata['type_options'];
         if ('association' === $metadata['type']) {
             $toManyAssociations = array(ClassMetadata::ONE_TO_MANY, ClassMetadata::MANY_TO_MANY);
             if (in_array($metadata['associationType'], $toManyAssociations)) {
                 $formFieldOptions['attr']['multiple'] = true;
             }
             // supported associations are displayed using advanced JavaScript widgets
             $formFieldOptions['attr']['data-widget'] = 'select2';
         }
         if ('collection' === $metadata['fieldType']) {
             if (!isset($formFieldOptions['allow_add'])) {
                 $formFieldOptions['allow_add'] = true;
             }
             if (!isset($formFieldOptions['allow_delete'])) {
                 $formFieldOptions['allow_delete'] = true;
             }
             if (version_compare(Kernel::VERSION, '2.5.0', '>=')) {
                 if (!isset($formFieldOptions['delete_empty'])) {
                     $formFieldOptions['delete_empty'] = true;
                 }
             }
         } elseif ('checkbox' === $metadata['fieldType'] && !isset($formFieldOptions['required'])) {
             $formFieldOptions['required'] = false;
         }
         if (!isset($formFieldOptions['required'])) {
             if (null !== ($guessRequired = $this->guesser->guessRequired($builder->getOption('data_class'), $name))) {
                 $formFieldOptions['required'] = $guessRequired->getValue();
             }
         }
         $formFieldOptions['attr']['field_type'] = $metadata['fieldType'];
         $formFieldOptions['attr']['field_css_class'] = $metadata['class'];
         $formFieldOptions['attr']['field_help'] = $metadata['help'];
         $formFieldType = $this->useLegacyFormComponent() ? $metadata['fieldType'] : $this->getFormTypeFqcn($metadata['fieldType']);
         $builder->add($name, $formFieldType, $formFieldOptions);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function configure($name, array $options, array $metadata, FormConfigInterface $parentConfig)
 {
     if (!isset($options['class'])) {
         $guessedOptions = $this->guesser->guessType($parentConfig->getDataClass(), $name)->getOptions();
         $options['class'] = $guessedOptions['class'];
         $options['multiple'] = $guessedOptions['multiple'];
         $options['em'] = $guessedOptions['em'];
     }
     if ($metadata['associationType'] & ClassMetadata::TO_MANY) {
         $options['attr']['multiple'] = true;
     }
     // Supported associations are displayed using advanced JavaScript widgets
     $options['attr']['data-widget'] = 'select2';
     // Configure "placeholder" option for entity fields
     if ($metadata['associationType'] & ClassMetadata::TO_ONE && !isset($options[$placeHolderOptionName = $this->getPlaceholderOptionName()]) && false === $options['required']) {
         $options[$placeHolderOptionName] = 'form.label.empty_value';
     }
     return $options;
 }
 /**
  * @dataProvider mappingTestProvider
  *
  * @param array $mapping
  */
 public function testBuildFormMappingUsed(array $mapping)
 {
     $entityName = User::class;
     $fieldName = 'someCustomField';
     $expectedType = 'oro_datetime';
     $this->regularTypeGuesser->expects($this->never())->method('guessType');
     $this->extendTypeGuesser->expects($this->never())->method('guessType');
     $type = new GuessFieldType($this->entityConfigMock, $this->regularTypeGuesser, $mapping);
     $form = $this->factory->create($type, null, ['data_class' => $entityName, 'field_name' => $fieldName]);
     $view = $form->createView();
     $this->assertCount(1, $view->children, 'Failed asserting that there is only one children');
     $fieldView = $view->offsetGet($fieldName);
     $this->assertEquals(sprintf('guess_field_type[%s]', $fieldName), $fieldView->vars['full_name'], 'Failed asserting that field name is correct');
     $this->assertEquals($expectedType, $form[$fieldName]->getConfig()->getType()->getName(), 'Failed asserting that correct underlying type was used');
 }