$filters | $filters | ||||
); | ); | ||||
//TOdo utiliser les repositoryQuery ? | //TOdo utiliser les repositoryQuery ? | ||||
if ($this->isInstanceOf(TreeInterface::class)) { | if ($this->isInstanceOf(TreeInterface::class)) { | ||||
$entityId = $searchDto->getRequest()->get('entityId'); | $entityId = $searchDto->getRequest()->get('entityId'); | ||||
$filterManager = $this->get(FilterManager::class); | $filterManager = $this->get(FilterManager::class); | ||||
$this->filtersForm->handleRequest($searchDto->getRequest()); | $this->filtersForm->handleRequest($searchDto->getRequest()); | ||||
/*if (($this->filtersForm->isSubmitted() && $this->filtersForm->isValid())) { | |||||
}*/ | |||||
$filterManager->handleFiltersForm($queryBuilder, $this->filtersForm, $fields, $entityDto); | $filterManager->handleFiltersForm($queryBuilder, $this->filtersForm, $fields, $entityDto); | ||||
DateField::new('createdAt')->setFormat('short') | DateField::new('createdAt')->setFormat('short') | ||||
->hideOnForm(), | ->hideOnForm(), | ||||
TextField::new('visitorFirstName') | TextField::new('visitorFirstName') | ||||
->setTemplatePath('@LcSov/admin/ticket/field/username.html.twig') | |||||
->setTemplatePath('@LcSov/admin/ticket/field/firstname.html.twig') | |||||
->hideOnForm(), | |||||
TextField::new('visitorLastName') | |||||
->setTemplatePath('@LcSov/admin/ticket/field/lastname.html.twig') | |||||
->hideOnForm(), | ->hideOnForm(), | ||||
TextField::new('visitorEmail') | TextField::new('visitorEmail') | ||||
->setTemplatePath('@LcSov/admin/ticket/field/email.html.twig') | ->setTemplatePath('@LcSov/admin/ticket/field/email.html.twig') |
{ | { | ||||
$targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity'); | $targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity'); | ||||
$classImplements = class_implements($targetEntity); | |||||
//todo utiliser choices plutot que query_builder voir ProductCategoriesFilter | |||||
$builder->add( | $builder->add( | ||||
$fieldDto->getProperty(), | $fieldDto->getProperty(), | ||||
EntityType::class, | EntityType::class, | ||||
array( | array( | ||||
'class' => $targetEntity, | 'class' => $targetEntity, | ||||
'placeholder' => '--', | 'placeholder' => '--', | ||||
'query_builder' => function (EntityRepository $repo) use ($classImplements) { | |||||
'query_builder' => function (EntityRepository $repo){ | |||||
return $repo->createQueryBuilder('entity'); | return $repo->createQueryBuilder('entity'); | ||||
}, | }, | ||||
'required' => false, | 'required' => false, | ||||
); | ); | ||||
} | } | ||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, string $filteredValue = null) | |||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, $filteredValue = null) | |||||
{ | { | ||||
if ($filteredValue !== null) { | if ($filteredValue !== null) { | ||||
$queryBuilder->andWhere('entity.'.$fieldProperty.' = :'.$fieldProperty.''); | $queryBuilder->andWhere('entity.'.$fieldProperty.' = :'.$fieldProperty.''); |
); | ); | ||||
$queryBuilder->setParameter( | $queryBuilder->setParameter( | ||||
$this->getFieldPropertySnake($fieldProperty), | $this->getFieldPropertySnake($fieldProperty), | ||||
'%'.$filteredValue.'%' | |||||
$filteredValue | |||||
); | ); | ||||
} else { | } else { | ||||
$queryBuilder->andWhere( | $queryBuilder->andWhere( | ||||
'entity.'.$fieldProperty.' = :'.$fieldProperty.'' | 'entity.'.$fieldProperty.' = :'.$fieldProperty.'' | ||||
); | ); | ||||
$queryBuilder->setParameter($fieldProperty, '%'.$filteredValue.'%'); | |||||
$queryBuilder->setParameter($fieldProperty, $filteredValue); | |||||
} | } | ||||
} | } |
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | ||||
{ | { | ||||
$entity = new $options['entity_class']; | |||||
$choicesFct = 'get'.u($fieldDto->getProperty())->title()->toString().'Choices'; | |||||
if (method_exists($entity, $choicesFct)) { | |||||
$builder->add( | |||||
$fieldDto->getProperty(), | |||||
ChoiceType::class, | |||||
array( | |||||
'required' => false, | |||||
'choices' => $this->translatorAdmin->transChoices( | |||||
$entity->$choicesFct(), | |||||
$options['entity_name'], | |||||
$fieldDto->getProperty() | |||||
), | |||||
'attr' => array( | |||||
'class' => 'select2 input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
if($fieldDto->getCustomOption('choices')){ | |||||
$choices = $fieldDto->getCustomOption('choices'); | |||||
}else if($fieldDto->getFormTypeOption('choices') !=null){ | |||||
$choices = $fieldDto->getFormTypeOption('choices'); | |||||
}else{ | |||||
$choices = array(); | |||||
} | |||||
$builder->add( | |||||
$fieldDto->getProperty(), | |||||
ChoiceType::class, | |||||
array( | |||||
'required' => false, | |||||
'choices' => $choices, | |||||
'attr' => array( | |||||
'class' => 'select2 input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
); | ); | ||||
} | |||||
} | } | ||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, string $filteredValue = null) | public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, string $filteredValue = null) |
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | ||||
{ | { | ||||
$builder->add( | $builder->add( | ||||
$builder->create( | |||||
str_replace('.', '_', $fieldDto->getProperty()), | |||||
FormType::class, | |||||
array('inherit_data' => true) | |||||
$builder->create( | |||||
str_replace('.', '_', $fieldDto->getProperty()), | |||||
FormType::class, | |||||
array('inherit_data' => true) | |||||
) | |||||
->add( | |||||
'dateStart', | |||||
DateType::class, | |||||
array( | |||||
'widget' => 'single_text', | |||||
'required' => false, | |||||
) | |||||
) | ) | ||||
->add( | |||||
'dateStart', | |||||
DateType::class, | |||||
array( | |||||
'widget' => 'single_text', | |||||
'required' => false, | |||||
) | |||||
) | |||||
->add( | |||||
'dateEnd', | |||||
DateType::class, | |||||
array( | |||||
'widget' => 'single_text', | |||||
'required' => false, | |||||
->add( | |||||
'dateEnd', | |||||
DateType::class, | |||||
array( | |||||
'widget' => 'single_text', | |||||
'required' => false, | |||||
) | |||||
) | |||||
) | |||||
) | |||||
); | ); | ||||
} | } | ||||
public function applyFilter( | |||||
QueryBuilder $queryBuilder, | |||||
string $fieldProperty, | |||||
\DateTime $dateStart = null, | |||||
\DateTime $dateEnd = null | |||||
) { | |||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, \DateTime $dateStart = null, \DateTime $dateEnd = null) | |||||
{ | |||||
if ($dateStart) { | if ($dateStart) { | ||||
$queryBuilder->andWhere( | $queryBuilder->andWhere( | ||||
'entity.'.$fieldProperty.' >= :dateStart' | |||||
'entity.' . $fieldProperty . ' >= :dateStart' | |||||
)->setParameter('dateStart', $dateStart); | )->setParameter('dateStart', $dateStart); | ||||
} | } | ||||
if ($dateEnd) { | if ($dateEnd) { | ||||
$dateEnd->setTime(23, 59, 59); | $dateEnd->setTime(23, 59, 59); | ||||
$queryBuilder->andWhere( | $queryBuilder->andWhere( | ||||
'entity.'.$fieldProperty.' <= :dateEnd' | |||||
'entity.' . $fieldProperty . ' <= :dateEnd' | |||||
)->setParameter('dateEnd', $dateEnd); | )->setParameter('dateEnd', $dateEnd); | ||||
} | } | ||||
} | } |
use Doctrine\ORM\EntityManagerInterface; | use Doctrine\ORM\EntityManagerInterface; | ||||
use Doctrine\ORM\QueryBuilder; | use Doctrine\ORM\QueryBuilder; | ||||
use DoctrineExtensions\Query\Mysql\Field; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; | use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; | ||||
} | } | ||||
} | } | ||||
public function getFieldProperty(FieldDto $fieldDto) | |||||
{ | |||||
$property = $fieldDto->getProperty(); | |||||
//TODO pas forcément utile, à discuter | |||||
if ($fieldDto->getCustomOption('filter_on')) { | |||||
$property = $property . '.' . $fieldDto->getCustomOption('filter_on'); | |||||
} | |||||
return $property; | |||||
} | |||||
public function applyFilter(QueryBuilder $queryBuilder, FieldDto $fieldDto, array $filteredValue) | public function applyFilter(QueryBuilder $queryBuilder, FieldDto $fieldDto, array $filteredValue) | ||||
{ | { | ||||
switch ($fieldDto->getFormType()) { | |||||
case CheckboxType::class: | |||||
$checkboxFilter = new CheckboxFilter(); | |||||
$checkboxFilter->applyFilter($queryBuilder, $fieldDto->getProperty(), $filteredValue['value']); | |||||
break; | |||||
case ChoiceType::class: | |||||
$choiceFilter = new ChoiceFilter(); | |||||
$choiceFilter->applyFilter($queryBuilder, $fieldDto->getProperty(), $filteredValue['value']); | |||||
break; | |||||
case IntegerType::class: | |||||
$integerFilter = new IntegerFilter(); | |||||
$integerFilter->applyFilter($queryBuilder, $fieldDto->getProperty(), $filteredValue['value']); | |||||
break; | |||||
case TextareaType::class: | |||||
case TextType::class: | |||||
$textFilter = new TextFilter(); | |||||
$textFilter->applyFilter($queryBuilder, $fieldDto->getProperty(), $filteredValue['value']); | |||||
break; | |||||
case EntityType::class: | |||||
$textFilter = new AssociationFilter(); | |||||
$textFilter->applyFilter($queryBuilder, $fieldDto->getProperty(), $filteredValue['value']); | |||||
break; | |||||
case DateTimeType::class: | |||||
case DateType::class: | |||||
$textFilter = new DateFilter(); | |||||
$textFilter->applyFilter( | |||||
$queryBuilder, | |||||
$fieldDto->getProperty(), | |||||
$filteredValue['dateStart'], | |||||
$filteredValue['dateEnd'] | |||||
); | |||||
break; | |||||
if ($fieldDto->getCustomOption('filter_fqcn')) { | |||||
$filterFqcn = $fieldDto->getCustomOption('filter_fqcn'); | |||||
$customFilter = new $filterFqcn; | |||||
$customFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
} else { | |||||
switch ($this->guessFormType($fieldDto)) { | |||||
case CheckboxType::class: | |||||
$checkboxFilter = new CheckboxFilter(); | |||||
$checkboxFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
break; | |||||
case ChoiceType::class: | |||||
$choiceFilter = new ChoiceFilter(); | |||||
$choiceFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
break; | |||||
case IntegerType::class: | |||||
$integerFilter = new IntegerFilter(); | |||||
$integerFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
break; | |||||
case TextareaType::class: | |||||
case TextType::class: | |||||
$textFilter = new TextFilter(); | |||||
$textFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
break; | |||||
case EntityType::class: | |||||
$textFilter = new AssociationFilter(); | |||||
$textFilter->applyFilter($queryBuilder, $this->getFieldProperty($fieldDto), $filteredValue['value']); | |||||
break; | |||||
case DateTimeType::class: | |||||
case DateType::class: | |||||
$textFilter = new DateFilter(); | |||||
$textFilter->applyFilter( | |||||
$queryBuilder, | |||||
$this->getFieldProperty($fieldDto), | |||||
$filteredValue['dateStart'], | |||||
$filteredValue['dateEnd'] | |||||
); | |||||
break; | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
public | |||||
function getFormField( | |||||
Form $filtersForm, | |||||
string $field, | |||||
string $extraField = null | |||||
): Form | |||||
public function getFormField(Form $filtersForm, string $field, string $extraField = null): Form | |||||
{ | { | ||||
if ($extraField) { | if ($extraField) { | ||||
return $filtersForm->get($field)->get($extraField); | return $filtersForm->get($field)->get($extraField); | ||||
return $filtersForm->get($field); | return $filtersForm->get($field); | ||||
} | } | ||||
} | } | ||||
protected function guessFormType(FieldDto $fieldDto) | |||||
{ | |||||
if ($fieldDto->getCustomOption('filter_type')) { | |||||
return $fieldDto->getCustomOption('filter_type'); | |||||
} else { | |||||
return $fieldDto->getFormType(); | |||||
} | |||||
} | |||||
} | } |
<?php | |||||
namespace Lc\SovBundle\Field\Filter; | |||||
use Doctrine\ORM\QueryBuilder; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto; | |||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; | |||||
use Symfony\Component\Form\FormBuilderInterface; | |||||
/** | |||||
* @author La clic ! <contact@laclic.fr> | |||||
*/ | |||||
class ImageFilter | |||||
{ | |||||
use FilterTrait; | |||||
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | |||||
{ | |||||
$targetEntity = $options['entity_dto']->getPropertyMetadata($fieldDto->getProperty())->get('targetEntity'); | |||||
$builder->add( | |||||
$fieldDto->getProperty(), | |||||
ChoiceType::class, | |||||
array( | |||||
'required' => false, | |||||
'choices' => array( | |||||
'Sans image' => 0, | |||||
'Avec image' => 1, | |||||
), | |||||
'attr' => array( | |||||
'class' => 'select2 input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
); | |||||
} | |||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, $filteredValue = null) | |||||
{ | |||||
if ($filteredValue !== null) { | |||||
if($filteredValue === 1){ | |||||
$queryBuilder->andWhere( | |||||
'entity.' . $fieldProperty . ' IS NOT NULL' | |||||
); | |||||
}else{ | |||||
$queryBuilder->andWhere( | |||||
'entity.' . $fieldProperty . ' IS NULL' | |||||
); | |||||
} | |||||
} | |||||
} | |||||
} |
use FilterTrait; | use FilterTrait; | ||||
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | |||||
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | |||||
{ | { | ||||
$builder->add( | $builder->add( | ||||
str_replace('.', '_', $fieldDto->getProperty()), | |||||
TextType::class, | |||||
array( | |||||
'required' => false, | |||||
'attr' => array( | |||||
'class' => ' input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
str_replace('.', '_', $fieldDto->getProperty()), | |||||
TextType::class, | |||||
array( | |||||
'required' => false, | |||||
'attr' => array( | |||||
'class' => ' input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
); | ); | ||||
} | } | ||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, string $filteredValue= null) | |||||
public function applyFilter(QueryBuilder $queryBuilder, string $fieldProperty, string $filteredValue = null) | |||||
{ | { | ||||
if ($filteredValue !== null) { | if ($filteredValue !== null) { | ||||
$aliasRelation = $this->getFieldPropertyRelationAlias($fieldProperty); | $aliasRelation = $this->getFieldPropertyRelationAlias($fieldProperty); | ||||
if (array_search($aliasRelation, $queryBuilder->getAllAliases()) === false) { | if (array_search($aliasRelation, $queryBuilder->getAllAliases()) === false) { | ||||
$queryBuilder->innerJoin('entity.'.$aliasRelation, $aliasRelation); | |||||
$queryBuilder->innerJoin('entity.' . $aliasRelation, $aliasRelation); | |||||
} | } | ||||
$queryBuilder->andWhere( | $queryBuilder->andWhere( | ||||
$fieldProperty.' LIKE :'.$this->getFieldPropertySnake($fieldProperty).'' | |||||
$fieldProperty . ' LIKE :' . $this->getFieldPropertySnake($fieldProperty) . '' | |||||
); | ); | ||||
$queryBuilder->setParameter( | $queryBuilder->setParameter( | ||||
$this->getFieldPropertySnake($fieldProperty), | |||||
'%'.$filteredValue.'%' | |||||
$this->getFieldPropertySnake($fieldProperty), | |||||
'%' . $filteredValue . '%' | |||||
); | ); | ||||
} else { | } else { | ||||
$queryBuilder->andWhere( | $queryBuilder->andWhere( | ||||
'entity.'.$fieldProperty.' LIKE :'.$fieldProperty.'' | |||||
'entity.' . $fieldProperty . ' LIKE :' . $fieldProperty . '' | |||||
); | ); | ||||
$queryBuilder->setParameter($fieldProperty, '%'.$filteredValue.'%'); | |||||
$queryBuilder->setParameter($fieldProperty, '%' . $filteredValue . '%'); | |||||
} | } | ||||
} | } | ||||
} | } |
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait; | use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait; | ||||
use Lc\SovBundle\Field\Filter\ImageFilter; | |||||
use Lc\SovBundle\Form\Common\FileManagerType; | use Lc\SovBundle\Form\Common\FileManagerType; | ||||
/** | /** | ||||
->setCustomOption('type', 'image') | ->setCustomOption('type', 'image') | ||||
->addCssClass('field-text') | ->addCssClass('field-text') | ||||
->setCustomOption(self::OPTION_MAX_LENGTH, null) | ->setCustomOption(self::OPTION_MAX_LENGTH, null) | ||||
->setCustomOption(self::OPTION_RENDER_AS_HTML, false); | |||||
->setCustomOption(self::OPTION_RENDER_AS_HTML, false) | |||||
->setCustomOption('filter_fqcn', ImageFilter::class); | |||||
} | } | ||||
public function setMaxLength(int $length): self | public function setMaxLength(int $length): self |
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait; | use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait; | ||||
use Lc\SovBundle\Field\Filter\BooleanFilter; | |||||
use Lc\SovBundle\Field\Filter\CheckboxFilter; | |||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; | use Symfony\Component\Form\Extension\Core\Type\ChoiceType; | ||||
/** | /** | ||||
->setFormTypeOption('multiple', false) | ->setFormTypeOption('multiple', false) | ||||
->setFormTypeOption('choices', ['En ligne' => 1, 'Hors ligne' => 0]) | ->setFormTypeOption('choices', ['En ligne' => 1, 'Hors ligne' => 0]) | ||||
->setFormTypeOption('placeholder', false) | ->setFormTypeOption('placeholder', false) | ||||
->setCustomOption('toggle_label', 'En ligne'); | |||||
->setCustomOption('toggle_label', 'En ligne') | |||||
->setCustomOption('filter_fqcn', CheckboxFilter::class); | |||||
$template = 'toggle.html.twig'; | $template = 'toggle.html.twig'; | ||||
if (!$templateToggle) { | if (!$templateToggle) { |
namespace Lc\SovBundle\Form\Common; | namespace Lc\SovBundle\Form\Common; | ||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Doctrine\ORM\EntityRepository; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto; | |||||
use Lc\SovBundle\Field\Filter\AssociationFilter; | use Lc\SovBundle\Field\Filter\AssociationFilter; | ||||
use Lc\SovBundle\Field\Filter\CheckboxFilter; | use Lc\SovBundle\Field\Filter\CheckboxFilter; | ||||
use Lc\SovBundle\Field\Filter\ChoiceFilter; | use Lc\SovBundle\Field\Filter\ChoiceFilter; | ||||
use Lc\SovBundle\Field\Filter\DateFilter; | use Lc\SovBundle\Field\Filter\DateFilter; | ||||
use Lc\SovBundle\Field\Filter\FilterManager; | |||||
use Lc\SovBundle\Field\Filter\IntegerFilter; | use Lc\SovBundle\Field\Filter\IntegerFilter; | ||||
use Lc\SovBundle\Field\Filter\TextFilter; | use Lc\SovBundle\Field\Filter\TextFilter; | ||||
use Lc\SovBundle\Translation\TranslatorAdmin; | use Lc\SovBundle\Translation\TranslatorAdmin; | ||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; | use Symfony\Bridge\Doctrine\Form\Type\EntityType; | ||||
use Symfony\Component\Form\AbstractType; | use Symfony\Component\Form\AbstractType; | ||||
use Symfony\Component\Form\Extension\Core\Type\ButtonType; | |||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; | use Symfony\Component\Form\Extension\Core\Type\CheckboxType; | ||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; | use Symfony\Component\Form\Extension\Core\Type\ChoiceType; | ||||
use Symfony\Component\Form\Extension\Core\Type\DateTimeType; | use Symfony\Component\Form\Extension\Core\Type\DateTimeType; | ||||
use Symfony\Component\Form\Extension\Core\Type\DateType; | use Symfony\Component\Form\Extension\Core\Type\DateType; | ||||
use Symfony\Component\Form\Extension\Core\Type\FormType; | |||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType; | use Symfony\Component\Form\Extension\Core\Type\HiddenType; | ||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType; | use Symfony\Component\Form\Extension\Core\Type\IntegerType; | ||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||||
use Symfony\Component\Form\Extension\Core\Type\TextType; | use Symfony\Component\Form\Extension\Core\Type\TextType; | ||||
use Symfony\Component\Form\FormBuilderInterface; | use Symfony\Component\Form\FormBuilderInterface; | ||||
use Symfony\Component\OptionsResolver\OptionsResolver; | use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
use Symfony\Contracts\Translation\TranslatorInterface; | |||||
use function Symfony\Component\String\u; | use function Symfony\Component\String\u; | ||||
} else { | } else { | ||||
$fieldDto = $field; | $fieldDto = $field; | ||||
} | } | ||||
if ($fieldDto->isDisplayedOn(Crud::PAGE_INDEX)) { | |||||
switch ($fieldDto->getFormType()) { | |||||
case CheckboxType::class: | |||||
$checkboxFilter = new CheckboxFilter(); | |||||
$checkboxFilter->buildProperty($builder, $fieldDto); | |||||
//POurt modifier le type de filtre filter_type | |||||
//Pour désactiver le filtre sur un champ filter à false | |||||
break; | |||||
case ChoiceType::class: | |||||
$choiceFilter = new ChoiceFilter($this->translatorAdmin); | |||||
$choiceFilter->buildProperty($builder, $fieldDto, $options); | |||||
break; | |||||
case IntegerType::class: | |||||
$integerFilter = new IntegerFilter(); | |||||
$integerFilter->buildProperty($builder, $fieldDto); | |||||
if ($fieldDto->isDisplayedOn(Crud::PAGE_INDEX) && $fieldDto->getCustomOption('filter')!==false) { | |||||
if($fieldDto->getCustomOption('filter_fqcn')){ | |||||
$filterFqcn = $fieldDto->getCustomOption('filter_fqcn'); | |||||
$checkboxFilter = new $filterFqcn; | |||||
$checkboxFilter->buildProperty($builder, $fieldDto, $options); | |||||
}else { | |||||
break; | |||||
case TextType::class: | |||||
case TextareaType::class: | |||||
$textFilter = new TextFilter(); | |||||
$textFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case DateTimeType::class: | |||||
case DateType::class: | |||||
$textFilter = new DateFilter(); | |||||
$textFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case EntityType::class: | |||||
//$associationFilter = new AssociationFilter(); | |||||
//$associationFilter->buildProperty($builder, $fieldDto, $options); | |||||
break; | |||||
case 'dateinterval': | |||||
switch ($this->guessFormType($fieldDto)) { | |||||
case CheckboxType::class: | |||||
$checkboxFilter = new CheckboxFilter(); | |||||
$checkboxFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case ChoiceType::class: | |||||
$choiceFilter = new ChoiceFilter($this->translatorAdmin); | |||||
$choiceFilter->buildProperty($builder, $fieldDto, $options); | |||||
break; | |||||
case IntegerType::class: | |||||
$integerFilter = new IntegerFilter(); | |||||
$integerFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case 'float': | |||||
break; | |||||
break; | |||||
case TextType::class: | |||||
case TextareaType::class: | |||||
$textFilter = new TextFilter(); | |||||
$textFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case DateTimeType::class: | |||||
case DateType::class: | |||||
$textFilter = new DateFilter(); | |||||
$textFilter->buildProperty($builder, $fieldDto); | |||||
break; | |||||
case EntityType::class: | |||||
$associationFilter = new AssociationFilter(); | |||||
$associationFilter->buildProperty($builder, $fieldDto, $options); | |||||
break; | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
] | ] | ||||
); | ); | ||||
} | } | ||||
protected function guessFormType(FieldDto $fieldDto){ | |||||
if($fieldDto->getCustomOption('filter_type')){ | |||||
return $fieldDto->getCustomOption('filter_type'); | |||||
}else{ | |||||
return$fieldDto->getFormType(); | |||||
} | |||||
} | |||||
} | } |
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\Newsletter\NewsletterInterface", inversedBy="news") | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\Newsletter\NewsletterInterface") | |||||
*/ | */ | ||||
protected $newsletter; | protected $newsletter; | ||||
save_and_return: Sauvegarder les modifications | save_and_return: Sauvegarder les modifications | ||||
save_and_continue: Sauvegarder et continuer l'édition | save_and_continue: Sauvegarder et continuer l'édition | ||||
save_and_add_another: Créer et ajouter un nouvel élément | save_and_add_another: Créer et ajouter un nouvel élément | ||||
reset: Réinitialiser | |||||
apply: Appliquer | |||||
entity: | entity: | ||||
User: | User: | ||||
label: Utilisateur | label: Utilisateur |
{#{{ entity.instance.getEmail() }}#} | |||||
{% set item = entity.instance %} | |||||
{% if item.user is not null %} | |||||
{{ item.user.email }} | |||||
{% else %} | |||||
{{ item.visitorEmail }} | |||||
{% endif %} |
{% set item = entity.instance %} | |||||
{% if item.user is not null %} | |||||
{{ item.user.firstname }} | |||||
{% else %} | |||||
{{ item.visitorFirstname }} | |||||
{% endif %} |
{% set item = entity.instance %} | |||||
{% if item.user is not null %} | |||||
{{ item.user.lastname }} | |||||
{% else %} | |||||
{{ item.visitorLastname }} | |||||
{% endif %} |
{#{{ entity.instance.user.getUsername() }}#} |
{% set id_modal = 'modal-'~field.value.id %} | {% set id_modal = 'modal-'~field.value.id %} | ||||
<a href="{{ sov_liip(field.value.path, 'big') }}" data-toggle="modal" data-target="#{{ id_modal }}" title="{{ field.value.legend }}"> | <a href="{{ sov_liip(field.value.path, 'big') }}" data-toggle="modal" data-target="#{{ id_modal }}" title="{{ field.value.legend }}"> | ||||
<img src="{{ sov_liip(field.value.path, 'thumbnail') }}" alt="{{ field.value.legend }}"> | |||||
<img src="{{ sov_liip(field.value.path, 'index') }}" alt="{{ field.value.legend }}"> | |||||
</a> | </a> | ||||
{% embed "@LcSov/adminlte/embed/modal.twig" %} | {% embed "@LcSov/adminlte/embed/modal.twig" %} |