]> git.immae.eu Git - github/wallabag/wallabag.git/blob - src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php
cabb3eca3678170cf7acd5456419f928066d20a8
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Event / Subscriber / CustomDoctrineORMSubscriber.php
1 <?php
2
3 namespace Wallabag\CoreBundle\Event\Subscriber;
4
5 use Lexik\Bundle\FormFilterBundle\Event\GetFilterConditionEvent;
6 use Lexik\Bundle\FormFilterBundle\Event\Subscriber\DoctrineORMSubscriber;
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 }