diff --git a/Controller/CustomFieldController.php b/Controller/CustomFieldController.php index adb88edd9..a45938717 100644 --- a/Controller/CustomFieldController.php +++ b/Controller/CustomFieldController.php @@ -189,7 +189,7 @@ class CustomFieldController extends Controller } $deleteForm = $this->createDeleteForm($id); - $editForm = $this->createEditForm($entity); + $editForm = $this->createEditForm($entity, $entity->getType()); $editForm->handleRequest($request); if ($editForm->isValid()) { diff --git a/CustomFields/CustomFieldChoiceWithOther.php b/CustomFields/CustomFieldChoiceWithOther.php deleted file mode 100644 index 9b0085f2f..000000000 --- a/CustomFields/CustomFieldChoiceWithOther.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -class CustomFieldChoiceWithOther -{ - //put your code here -} diff --git a/CustomFields/CustomFieldText.php b/CustomFields/CustomFieldText.php index 3aab4a153..c06841948 100644 --- a/CustomFields/CustomFieldText.php +++ b/CustomFields/CustomFieldText.php @@ -15,9 +15,24 @@ use Symfony\Component\Form\FormBuilderInterface; */ class CustomFieldText implements CustomFieldInterface { + + const MAX_LENGTH = 'maxLength'; + + /** + * Create a form according to the maxLength option + * + * if maxLength < 256 THEN the form type is 'text' + * if not, THEN the form type is textarea + * + * @param FormBuilderInterface $builder + * @param CustomField $customField + */ public function buildForm(FormBuilderInterface $builder, CustomField $customField) { - $builder->add($customField->getSlug(), 'text', array( + $type = ($customField->getOptions()[self::MAX_LENGTH] < 256) ? 'text' + : 'textarea'; + + $builder->add($customField->getSlug(), $type, array( 'label' => $customField->getLabel() )); } @@ -42,8 +57,10 @@ class CustomFieldText implements CustomFieldInterface return 'text field'; } - public function buildOptionsForm(FormBuilderInterface $builder) - { - return null; - } + public function buildOptionsForm(FormBuilderInterface $builder) + { + return $builder + ->add(self::MAX_LENGTH, 'integer', array('empty_data' => 256)) + ; + } } diff --git a/Entity/CustomField.php b/Entity/CustomField.php index 052b2f8a2..a14eb1562 100644 --- a/Entity/CustomField.php +++ b/Entity/CustomField.php @@ -27,7 +27,7 @@ class CustomField /** * @var boolean */ - private $active; + private $active = true; /** * @@ -277,4 +277,12 @@ class CustomField { return $this->customFieldGroup; } + + public function setSlug($slug) + { + $this->slug = $slug; + return $this; + } + + } diff --git a/Form/CustomFieldType.php b/Form/CustomFieldType.php index 9137977ef..861b6c662 100644 --- a/Form/CustomFieldType.php +++ b/Form/CustomFieldType.php @@ -7,6 +7,8 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Chill\CustomFieldsBundle\Service\CustomFieldProvider; use Chill\CustomFieldsBundle\Entity\CustomField; +use Symfony\Component\Form\FormEvent; +use Symfony\Component\Form\FormEvents; class CustomFieldType extends AbstractType { @@ -37,22 +39,37 @@ class CustomFieldType extends AbstractType } $builder - ->add('name', 'text') + ->add('name', 'translatable_string') ->add('active') ->add('customFieldsGroup', 'entity', array( 'class' => 'ChillCustomFieldsBundle:CustomFieldsGroup', 'property' => 'name['.$this->culture.']' )) ->add('ordering', 'number') - ; + ->add('type', 'hidden', array('data' => $options['type'])) + ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) + { + $customField = $event->getData(); + $form = $event->getForm(); + + // check if the customField object is "new" + // If no data is passed to the form, the data is "null". + // This should be considered a new "customField" + if (!$customField || null === $customField->getId()) { + $form->add('slug', 'text'); + } + }); + + + $builder->add( + $this->customFieldProvider + ->getCustomFieldByType($options['type']) + ->buildOptionsForm( + $builder + ->create('options', null, array('compound' => true)) + ) + ); - //add options field - $optionsType = $this->customFieldProvider - ->getCustomFieldByType($options['type']) - ->buildOptionsForm($builder); - if ($optionsType) { - $builder->add('options', $optionsType); - } } /**