Fix date filter on same day

Fix #1379
This commit is contained in:
Jeremy Benoist 2015-08-22 15:35:28 +02:00
parent ec00964de2
commit 7d6c3edcdd
3 changed files with 42 additions and 2 deletions

View file

@ -4,6 +4,7 @@ parameters:
security.authentication.provider.dao.class: Wallabag\CoreBundle\Security\Authentication\Provider\WallabagAuthenticationProvider
security.encoder.digest.class: Wallabag\CoreBundle\Security\Authentication\Encoder\WallabagPasswordEncoder
security.validator.user_password.class: Wallabag\CoreBundle\Security\Validator\WallabagUserPasswordValidator
lexik_form_filter.get_filter.doctrine_orm.class: Wallabag\CoreBundle\Event\Subscriber\CustomDoctrineORMSubscriber
services:
# used for tests

View file

@ -0,0 +1,38 @@
<?php
namespace Wallabag\CoreBundle\Event\Subscriber;
use Lexik\Bundle\FormFilterBundle\Event\Subscriber\DoctrineORMSubscriber;
use Lexik\Bundle\FormFilterBundle\Event\GetFilterConditionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* This custom class override the default behavior of LexikFilterBundle on `filter_date_range`
* 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)
*/
class CustomDoctrineORMSubscriber extends DoctrineORMSubscriber implements EventSubscriberInterface
{
/**
* @param GetFilterConditionEvent $event
*/
public function filterDateRange(GetFilterConditionEvent $event)
{
$expr = $event->getFilterQuery()->getExpressionBuilder();
$values = $event->getValues();
$value = $values['value'];
// left date should start at midnight
if (isset($value['left_date'][0]) && $value['left_date'][0] instanceOf \DateTime) {
$value['left_date'][0]->setTime(0, 0, 0);
}
// right adte should end one second before midnight
if (isset($value['right_date'][0]) && $value['right_date'][0] instanceOf \DateTime) {
$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]));
}
}
}

View file

@ -28,7 +28,8 @@ class EntryFilterType extends AbstractType
'format' => 'dd/MM/yyyy',
'widget' => 'single_text',
),
))
)
)
->add('domainName', 'filter_text', array(
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
$value = $values['value'];