]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php
manage assets through npm
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Form / Type / EntryFilterType.php
index ec36503b721fe84a6fa3738c6a5f8c5d8bc2cc17..f3f848e9a6db0f667e5e80a0e9b308192a1dfc86 100644 (file)
@@ -34,28 +34,42 @@ class EntryFilterType extends AbstractType
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
         $builder
-            ->add('readingTime', NumberRangeFilterType::class, array(
+            ->add('readingTime', NumberRangeFilterType::class, [
+                'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
+                    $value = $values['value'];
+
+                    if (null === $value['left_number'][0] || null === $value['right_number'][0]) {
+                        return;
+                    }
+
+                    $min = (int) ($value['left_number'][0] * $this->user->getConfig()->getReadingSpeed());
+                    $max = (int) ($value['right_number'][0] * $this->user->getConfig()->getReadingSpeed());
+
+                    $expression = $filterQuery->getExpr()->between($field, $min, $max);
+
+                    return $filterQuery->createCondition($expression);
+                },
                 'label' => 'entry.filters.reading_time.label',
-            ))
-            ->add('createdAt', DateRangeFilterType::class, array(
-                    'left_date_options' => array(
-                        'attr' => array(
+            ])
+            ->add('createdAt', DateRangeFilterType::class, [
+                    'left_date_options' => [
+                        'attr' => [
                             'placeholder' => 'dd/mm/yyyy',
-                        ),
+                        ],
                         'format' => 'dd/MM/yyyy',
                         'widget' => 'single_text',
-                    ),
-                    'right_date_options' => array(
-                        'attr' => array(
+                    ],
+                    'right_date_options' => [
+                        'attr' => [
                             'placeholder' => 'dd/mm/yyyy',
-                        ),
+                        ],
                         'format' => 'dd/MM/yyyy',
                         'widget' => 'single_text',
-                    ),
+                    ],
                     'label' => 'entry.filters.created_at.label',
-                )
+                ]
             )
-            ->add('domainName', TextFilterType::class, array(
+            ->add('domainName', TextFilterType::class, [
                 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
                     $value = $values['value'];
                     if (strlen($value) <= 2 || empty($value)) {
@@ -66,14 +80,26 @@ class EntryFilterType extends AbstractType
                     return $filterQuery->createCondition($expression);
                 },
                 'label' => 'entry.filters.domain_label',
-            ))
-            ->add('isArchived', CheckboxFilterType::class, array(
+            ])
+            ->add('isArchived', CheckboxFilterType::class, [
                 'label' => 'entry.filters.archived_label',
-            ))
-            ->add('isStarred', CheckboxFilterType::class, array(
+            ])
+            ->add('isStarred', CheckboxFilterType::class, [
                 'label' => 'entry.filters.starred_label',
-            ))
-            ->add('previewPicture', CheckboxFilterType::class, array(
+            ])
+            ->add('isUnread', CheckboxFilterType::class, [
+                'label' => 'entry.filters.unread_label',
+                'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
+                    if (false === $values['value']) {
+                        return;
+                    }
+
+                    $expression = $filterQuery->getExpr()->eq('e.isArchived', 'false');
+
+                    return $filterQuery->createCondition($expression);
+                },
+            ])
+            ->add('previewPicture', CheckboxFilterType::class, [
                 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
                     if (false === $values['value']) {
                         return;
@@ -84,12 +110,12 @@ class EntryFilterType extends AbstractType
                     return $filterQuery->createCondition($expression);
                 },
                 'label' => 'entry.filters.preview_picture_label',
-            ))
-            ->add('language', ChoiceFilterType::class, array(
+            ])
+            ->add('language', ChoiceFilterType::class, [
                 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())),
                 'choices_as_values' => true,
                 'label' => 'entry.filters.language_label',
-            ))
+            ])
         ;
     }
 
@@ -100,9 +126,9 @@ class EntryFilterType extends AbstractType
 
     public function configureOptions(OptionsResolver $resolver)
     {
-        $resolver->setDefaults(array(
+        $resolver->setDefaults([
             'csrf_protection' => false,
-            'validation_groups' => array('filtering'),
-        ));
+            'validation_groups' => ['filtering'],
+        ]);
     }
 }