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