order the type alphabetically

Improve also the form "TranslatableActivityType" to use the
TranslatableStringHelper.
This commit is contained in:
2016-03-09 20:54:38 +01:00
parent 97df048dfb
commit 1ab0b95e74
5 changed files with 163 additions and 10 deletions

View File

@@ -25,6 +25,10 @@ namespace Chill\ActivityBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Doctrine\ORM\EntityRepository;
use Chill\ActivityBundle\Entity\ActivityType;
/**
* Description of TranslatableActivityType
@@ -33,14 +37,22 @@ use Symfony\Component\HttpFoundation\RequestStack;
*/
class TranslatableActivityType extends AbstractType
{
/**
* @var RequestStack
*/
private $requestStack;
public function __construct(RequestStack $requestStack)
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
protected $activityTypeRepository;
public function __construct(
TranslatableStringHelper $helper,
EntityRepository $activityTypeRepository
)
{
$this->requestStack = $requestStack;
$this->translatableStringHelper = $helper;
$this->activityTypeRepository = $activityTypeRepository;
}
public function getName()
@@ -50,16 +62,34 @@ class TranslatableActivityType extends AbstractType
public function getParent()
{
return 'entity';
return EntityType::class;
}
public function configureOptions(OptionsResolver $resolver)
{
$locale = $this->requestStack->getCurrentRequest()->getLocale();
// create a local copy for use in closures
$translatableStringHelper = $this->translatableStringHelper;
$types = $this->activityTypeRepository->findAll();
// sort by alphabetical order
usort($types, function(ActivityType $typeA, ActivityType $typeB) use ($translatableStringHelper) {
$strA = $translatableStringHelper->localize($typeA->getName());
$strB = $translatableStringHelper->localize($typeB->getName());
if ($strA === $strB) {
return 0;
}
return $strA < $strB ? -1 : 1;
});
$resolver->setDefaults(
array(
'class' => 'ChillActivityBundle:ActivityType',
'property' => 'name['.$locale.']'
'choices' => $types,
'choice_label' => function (ActivityType $type) use ($translatableStringHelper) {
return $translatableStringHelper->localize($type->getName());
}
)
);
}