add customfield text + fix options in custom fields

This commit is contained in:
Julien Fastré 2014-11-08 11:55:59 +01:00
parent 4c9b6a6a15
commit 99a88e8705
5 changed files with 58 additions and 35 deletions

View File

@ -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()) {

View File

@ -1,19 +0,0 @@
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
namespace;
/**
* Description of CustomFieldChoiceWithOther
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
*/
class CustomFieldChoiceWithOther
{
//put your code here
}

View File

@ -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))
;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}
/**