]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Filter/EntryFilterType.php
Update bundle & stock file
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Filter / EntryFilterType.php
CommitLineData
26864574
NL
1<?php
2
3namespace Wallabag\CoreBundle\Filter;
4
619cc453
JB
5use Doctrine\ORM\EntityRepository;
6use Lexik\Bundle\FormFilterBundle\Filter\Query\QueryInterface;
5c895a7f
JB
7use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\NumberRangeFilterType;
8use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\DateRangeFilterType;
9use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\TextFilterType;
10use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\CheckboxFilterType;
11use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType;
26864574
NL
12use Symfony\Component\Form\AbstractType;
13use Symfony\Component\Form\FormBuilderInterface;
14use Symfony\Component\OptionsResolver\OptionsResolver;
1210dae1 15use Wallabag\UserBundle\Entity\User;
26864574
NL
16
17class EntryFilterType extends AbstractType
18{
d4ebe5c5
JB
19 private $user;
20 private $repository;
21
22 /**
cfb28c9d 23 * Repository & user are used to get a list of language entries for this user.
d4ebe5c5
JB
24 *
25 * @param EntityRepository $entryRepository
26 * @param User $user
27 */
28 public function __construct(EntityRepository $entryRepository, User $user)
29 {
30 $this->repository = $entryRepository;
31 $this->user = $user;
32 }
33
26864574
NL
34 public function buildForm(FormBuilderInterface $builder, array $options)
35 {
3c5b025a 36 $builder
5c895a7f
JB
37 ->add('readingTime', NumberRangeFilterType::class)
38 ->add('createdAt', DateRangeFilterType::class, array(
3c5b025a
NL
39 'left_date_options' => array(
40 'attr' => array(
8ce32af6
JB
41 'placeholder' => 'dd/mm/yyyy',
42 ),
3c5b025a 43 'format' => 'dd/MM/yyyy',
8ce32af6 44 'widget' => 'single_text',
3c5b025a
NL
45 ),
46 'right_date_options' => array(
47 'attr' => array(
8ce32af6
JB
48 'placeholder' => 'dd/mm/yyyy',
49 ),
3c5b025a 50 'format' => 'dd/MM/yyyy',
8ce32af6 51 'widget' => 'single_text',
7d6c3edc
JB
52 ),
53 )
54 )
5c895a7f 55 ->add('domainName', TextFilterType::class, array(
8ce32af6 56 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
443cecd2 57 $value = $values['value'];
1137fae9 58 if (strlen($value) <= 2 || empty($value)) {
8ce32af6 59 return;
443cecd2
NL
60 }
61 $expression = $filterQuery->getExpr()->like($field, $filterQuery->getExpr()->literal('%'.$value.'%'));
8ce32af6 62
443cecd2 63 return $filterQuery->createCondition($expression);
a3bcd60a 64 },
89659c9e 65 ))
5c895a7f
JB
66 ->add('isArchived', CheckboxFilterType::class)
67 ->add('isStarred', CheckboxFilterType::class)
68 ->add('previewPicture', CheckboxFilterType::class, array(
a3bcd60a 69 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
497e0cad 70 if (false === $values['value']) {
616f9fea
NL
71 return;
72 }
73
a3bcd60a
NL
74 $expression = $filterQuery->getExpr()->isNotNull($field);
75
76 return $filterQuery->createCondition($expression);
77 },
d4ebe5c5 78 ))
5c895a7f
JB
79 ->add('language', ChoiceFilterType::class, array(
80 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())),
81 'choices_as_values' => true,
d4ebe5c5
JB
82 ))
83 ;
26864574
NL
84 }
85
619cc453 86 public function getBlockPrefix()
26864574
NL
87 {
88 return 'entry_filter';
89 }
90
91 public function configureOptions(OptionsResolver $resolver)
92 {
93 $resolver->setDefaults(array(
8ce32af6
JB
94 'csrf_protection' => false,
95 'validation_groups' => array('filtering'),
26864574
NL
96 ));
97 }
98}