<?php
namespace App\Filter\Front;
use App\Enum\ScholarTrainingThematicEnum;
use Spiriit\Bundle\FormFilterBundle\Filter\Doctrine\ORMQuery;
use Spiriit\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class GlobalSearch extends AbstractType
{
public function __construct(
private UrlGeneratorInterface $urlGenerator,
)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->remove('thematic');
$builder
->add('thematic', ChoiceFilterType::class, [
'label' => false,
'choices' => ScholarTrainingThematicEnum::getFormChoices(),
'multiple' => true,
'expanded' => false,
'required' => false,
'attr' => [
'data-selektor' => true,
'data-global-search-selektor' => true,
'data-selektor-placeholder' => 'Rechercher une formation',
'class' => 'd-none',
],
'row_attr' => [
'class' => 'row-thematics',
],
])
->add('name', HiddenType::class, [
'label' => false,
'required' => false,
'apply_filter' => function(ORMQuery $filterQuery, $field, $values) {
if (empty($values['value'])) {
return null;
}
$expr = $filterQuery->getExpr();
$paramName = sprintf('p_%s', str_replace('.', '_', $field));
$expression = $expr->like($field, ':' . $paramName);
return $filterQuery->createCondition($expression, [
$paramName => '%' . $values['value'] . '%',
]);
}
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'csrf_protection' => false,
'method' => 'GET',
'action' => $this->urlGenerator->generate('search_form'),
'allow_extra_fields' => true,
]);
}
public function getBlockPrefix(): string
{
return 'nellapp_global_search';
}
}