wallabag/src/Wallabag/CoreBundle/Event/Subscriber/CustomDoctrineORMSubscriber.php

36 lines
1.4 KiB
PHP
Raw Normal View History

2015-08-22 13:35:28 +00:00
<?php
namespace Wallabag\CoreBundle\Event\Subscriber;
use Spiriit\Bundle\FormFilterBundle\Event\GetFilterConditionEvent;
use Spiriit\Bundle\FormFilterBundle\Event\Subscriber\DoctrineORMSubscriber;
2015-08-22 13:35:28 +00:00
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* This custom class override the default behavior of SpiriitFormFilterBundle on `filter_date_range`
2015-08-23 20:06:27 +00:00
* 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).
2015-08-22 13:35:28 +00:00
*/
class CustomDoctrineORMSubscriber extends DoctrineORMSubscriber implements EventSubscriberInterface
{
public function filterDateRange(GetFilterConditionEvent $event)
{
2015-08-23 20:06:27 +00:00
$expr = $event->getFilterQuery()->getExpressionBuilder();
2015-08-22 13:35:28 +00:00
$values = $event->getValues();
2015-08-23 20:06:27 +00:00
$value = $values['value'];
2015-08-22 13:35:28 +00:00
// left date should start at midnight
2015-08-23 20:06:27 +00:00
if (isset($value['left_date'][0]) && $value['left_date'][0] instanceof \DateTime) {
2015-08-22 13:35:28 +00:00
$value['left_date'][0]->setTime(0, 0, 0);
}
// right adte should end one second before midnight
2015-08-23 20:06:27 +00:00
if (isset($value['right_date'][0]) && $value['right_date'][0] instanceof \DateTime) {
2015-08-22 13:35:28 +00:00
$value['right_date'][0]->setTime(23, 59, 59);
}
if (isset($value['left_date'][0]) || isset($value['right_date'][0])) {
$event->setCondition($expr->dateTimeInRange($event->getField(), $value['left_date'][0], $value['right_date'][0]));
}
}
}