allow group_by in PickRoleType and PickStatusType

This commit is contained in:
Julien Fastré 2016-04-19 18:36:29 +02:00
parent cf4a0d9e75
commit e774090959
2 changed files with 43 additions and 17 deletions

View File

@ -31,6 +31,8 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
/**
* Allow to pick a choice amongst different choices
@ -71,31 +73,38 @@ class PickRoleType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
{
// create copy for use in Closure
$translatableStringHelper = $this->translatableStringHelper;
// create copy for easier management
$qb = $options['query_builder'];
if ($options['event_type'] instanceof EventType) {
$options['query_builder']->where($qb->expr()->eq('r.type', ':event_type'))
->setParameter('event_type', $options['event_type']);
}
}
if ($options['active_only'] === true) {
$options['query_builder']->andWhere($qb->expr()->eq('r.active', ':active'))
->setParameter('active', true);
}
// if ($options['show_group_type'] === true) {
// $closure = $options['choice_label'];
// $options['choice_label'] = function(Role $r)
// use ($translatableStringHelper, $closure) {
// return $translatableStringHelper->localize($r->get)
//
// }
// }
if ($options['group_by'] === null) {
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($options) {
if ($options['event_type'] === null) {
$form = $event->getForm();
$name = $form->getName();
$config = $form->getConfig();
$type = $config->getType()->getName();
$options = $config->getOptions();
$form->getParent()->add($name, $type, array_replace($options, array(
'group_by' => function(Role $r)
{ return $this->translatableStringHelper->localize($r->getType()->getName()); }
)));
}
}
);
}
}
public function configureOptions(OptionsResolver $resolver)
@ -112,9 +121,6 @@ class PickRoleType extends AbstractType
// add option allow unactive
->setDefault('active_only', true)
->setAllowedTypes('active_only', array('boolean'))
// add possibility to prepend by group_type
->setDefault('show_group_type', false)
->setAllowedTypes('show_group_type', array('boolean'))
;
$qb = $this->roleRepository->createQueryBuilder('r');
@ -122,6 +128,7 @@ class PickRoleType extends AbstractType
$resolver->setDefaults(array(
'class' => Role::class,
'query_builder' => $qb,
'group_by' => null,
'choice_attr' => function(Role $r) {
return array(
'data-event-type' => $r->getType()->getId(),

View File

@ -31,6 +31,8 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
/**
* Allow to pick amongst type
@ -88,7 +90,23 @@ class PickStatusType extends AbstractType
$options['query_builder']->andWhere($qb->expr()->eq('r.active', ':active'))
->setParameter('active', true);
}
if ($options['group_by'] === null && $options['event_type'] === null) {
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) {
$form = $event->getForm();
$name = $form->getName();
$config = $form->getConfig();
$type = $config->getType()->getName();
$options = $config->getOptions();
$form->getParent()->add($name, $type, array_replace($options, array(
'group_by' => function(Status $s)
{ return $this->translatableStringHelper->localize($s->getType()->getName()); }
)));
}
);
}
}
@ -113,6 +131,7 @@ class PickStatusType extends AbstractType
$resolver->setDefaults(array(
'class' => Status::class,
'query_builder' => $qb,
'group_by' => null,
'choice_attr' => function(Status $s) {
return array(
'data-event-type' => $s->getType()->getId()