]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php
Merge branch 'master' into 2.1
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Form / Type / EntryFilterType.php
index bc59c9a1461ac86bb095246b78d1637fa671bf9f..3c597b5db51a44af1619364297776df744c8ef3c 100644 (file)
@@ -36,17 +36,26 @@ class EntryFilterType extends AbstractType
         $builder
             ->add('readingTime', NumberRangeFilterType::class, [
                 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
-                    $value = $values['value'];
+                    $lower = $values['value']['left_number'][0];
+                    $upper = $values['value']['right_number'][0];
+
+                    $min = (int) ($lower * $this->user->getConfig()->getReadingSpeed());
+                    $max = (int) ($upper * $this->user->getConfig()->getReadingSpeed());
 
-                    if (null === $value['left_number'][0] || null === $value['right_number'][0]) {
+                    if (null === $lower && null === $upper) {
+                        // no value? no filter
                         return;
+                    } elseif (null === $lower && null !== $upper) {
+                        // only lower value is defined: query all entries with reading LOWER THAN this value
+                        $expression = $filterQuery->getExpr()->lte($field, $max);
+                    } elseif (null !== $lower && null === $upper) {
+                        // only upper value is defined: query all entries with reading GREATER THAN this value
+                        $expression = $filterQuery->getExpr()->gte($field, $min);
+                    } else {
+                        // both value are defined, perform a between
+                        $expression = $filterQuery->getExpr()->between($field, $min, $max);
                     }
 
-                    $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',