diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Event')
-rw-r--r-- | src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php b/src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php new file mode 100644 index 00000000..cfdbfe97 --- /dev/null +++ b/src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php | |||
@@ -0,0 +1,38 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Event\Subscriber; | ||
4 | |||
5 | use Lexik\Bundle\FormFilterBundle\Event\Subscriber\DoctrineORMSubscriber; | ||
6 | use Lexik\Bundle\FormFilterBundle\Event\GetFilterConditionEvent; | ||
7 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; | ||
8 | |||
9 | /** | ||
10 | * This custom class override the default behavior of LexikFilterBundle on `filter_date_range` | ||
11 | * It converts a date_range to date_time_range to add hour to be able to grab a whole day (from 00:00:00 to 23:59:59). | ||
12 | */ | ||
13 | class CustomDoctrineORMSubscriber extends DoctrineORMSubscriber implements EventSubscriberInterface | ||
14 | { | ||
15 | /** | ||
16 | * @param GetFilterConditionEvent $event | ||
17 | */ | ||
18 | public function filterDateRange(GetFilterConditionEvent $event) | ||
19 | { | ||
20 | $expr = $event->getFilterQuery()->getExpressionBuilder(); | ||
21 | $values = $event->getValues(); | ||
22 | $value = $values['value']; | ||
23 | |||
24 | // left date should start at midnight | ||
25 | if (isset($value['left_date'][0]) && $value['left_date'][0] instanceof \DateTime) { | ||
26 | $value['left_date'][0]->setTime(0, 0, 0); | ||
27 | } | ||
28 | |||
29 | // right adte should end one second before midnight | ||
30 | if (isset($value['right_date'][0]) && $value['right_date'][0] instanceof \DateTime) { | ||
31 | $value['right_date'][0]->setTime(23, 59, 59); | ||
32 | } | ||
33 | |||
34 | if (isset($value['left_date'][0]) || isset($value['right_date'][0])) { | ||
35 | $event->setCondition($expr->dateTimeInRange($event->getField(), $value['left_date'][0], $value['right_date'][0])); | ||
36 | } | ||
37 | } | ||
38 | } | ||