]>
Commit | Line | Data |
---|---|---|
26864574 NL |
1 | <?php |
2 | ||
b0b893ea | 3 | namespace Wallabag\CoreBundle\Form\Type; |
26864574 | 4 | |
619cc453 JB |
5 | use Doctrine\ORM\EntityRepository; |
6 | use Lexik\Bundle\FormFilterBundle\Filter\Query\QueryInterface; | |
5c895a7f JB |
7 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\NumberRangeFilterType; |
8 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\DateRangeFilterType; | |
9 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\TextFilterType; | |
10 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\CheckboxFilterType; | |
11 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType; | |
26864574 NL |
12 | use Symfony\Component\Form\AbstractType; |
13 | use Symfony\Component\Form\FormBuilderInterface; | |
14 | use Symfony\Component\OptionsResolver\OptionsResolver; | |
1d76102a | 15 | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; |
26864574 NL |
16 | |
17 | class 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 | |
1d76102a | 26 | * @param TokenStorage $token |
d4ebe5c5 | 27 | */ |
1d76102a | 28 | public function __construct(EntityRepository $entryRepository, TokenStorage $token) |
d4ebe5c5 JB |
29 | { |
30 | $this->repository = $entryRepository; | |
1d76102a | 31 | $this->user = $token->getToken()->getUser(); |
d4ebe5c5 JB |
32 | } |
33 | ||
26864574 NL |
34 | public function buildForm(FormBuilderInterface $builder, array $options) |
35 | { | |
3c5b025a | 36 | $builder |
0d42217e JB |
37 | ->add('readingTime', NumberRangeFilterType::class, array( |
38 | 'label' => 'entry.filters.reading_time.label', | |
39 | )) | |
5c895a7f | 40 | ->add('createdAt', DateRangeFilterType::class, array( |
3c5b025a NL |
41 | 'left_date_options' => array( |
42 | 'attr' => array( | |
8ce32af6 JB |
43 | 'placeholder' => 'dd/mm/yyyy', |
44 | ), | |
3c5b025a | 45 | 'format' => 'dd/MM/yyyy', |
8ce32af6 | 46 | 'widget' => 'single_text', |
3c5b025a NL |
47 | ), |
48 | 'right_date_options' => array( | |
49 | 'attr' => array( | |
8ce32af6 JB |
50 | 'placeholder' => 'dd/mm/yyyy', |
51 | ), | |
3c5b025a | 52 | 'format' => 'dd/MM/yyyy', |
8ce32af6 | 53 | 'widget' => 'single_text', |
7d6c3edc | 54 | ), |
0d42217e | 55 | 'label' => 'entry.filters.created_at.label', |
7d6c3edc JB |
56 | ) |
57 | ) | |
5c895a7f | 58 | ->add('domainName', TextFilterType::class, array( |
8ce32af6 | 59 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
1d76102a JB |
60 | $value = $values['value']; |
61 | if (strlen($value) <= 2 || empty($value)) { | |
62 | return; | |
63 | } | |
64 | $expression = $filterQuery->getExpr()->like($field, $filterQuery->getExpr()->literal('%'.$value.'%')); | |
8ce32af6 | 65 | |
1d76102a | 66 | return $filterQuery->createCondition($expression); |
a3bcd60a | 67 | }, |
0d42217e JB |
68 | 'label' => 'entry.filters.domain_label', |
69 | )) | |
70 | ->add('isArchived', CheckboxFilterType::class, array( | |
71 | 'label' => 'entry.filters.archived_label', | |
72 | )) | |
73 | ->add('isStarred', CheckboxFilterType::class, array( | |
74 | 'label' => 'entry.filters.starred_label', | |
89659c9e | 75 | )) |
5c895a7f | 76 | ->add('previewPicture', CheckboxFilterType::class, array( |
a3bcd60a | 77 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
497e0cad | 78 | if (false === $values['value']) { |
616f9fea NL |
79 | return; |
80 | } | |
81 | ||
a3bcd60a NL |
82 | $expression = $filterQuery->getExpr()->isNotNull($field); |
83 | ||
84 | return $filterQuery->createCondition($expression); | |
85 | }, | |
0d42217e | 86 | 'label' => 'entry.filters.preview_picture_label', |
d4ebe5c5 | 87 | )) |
5c895a7f JB |
88 | ->add('language', ChoiceFilterType::class, array( |
89 | 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), | |
90 | 'choices_as_values' => true, | |
0d42217e | 91 | 'label' => 'entry.filters.language_label', |
d4ebe5c5 JB |
92 | )) |
93 | ; | |
26864574 NL |
94 | } |
95 | ||
619cc453 | 96 | public function getBlockPrefix() |
26864574 NL |
97 | { |
98 | return 'entry_filter'; | |
99 | } | |
100 | ||
101 | public function configureOptions(OptionsResolver $resolver) | |
102 | { | |
103 | $resolver->setDefaults(array( | |
8ce32af6 JB |
104 | 'csrf_protection' => false, |
105 | 'validation_groups' => array('filtering'), | |
26864574 NL |
106 | )); |
107 | } | |
108 | } |