mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-27 03:21:01 +00:00
Merge pull request #1393 from wallabag/fix-filter-same-day
Fix date filter on same day
This commit is contained in:
commit
8bb1f3d69a
4 changed files with 51 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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]));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -27,8 +27,9 @@ 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'];
|
||||
|
|
|
@ -278,6 +278,15 @@ class EntryControllerTest extends WallabagCoreTestCase
|
|||
|
||||
$this->assertCount(5, $crawler->filter('div[class=entry]'));
|
||||
|
||||
$data = array(
|
||||
'entry_filter[createdAt][left_date]' => date('d/m/Y'),
|
||||
'entry_filter[createdAt][right_date]' => date('d/m/Y'),
|
||||
);
|
||||
|
||||
$crawler = $client->submit($form, $data);
|
||||
|
||||
$this->assertCount(5, $crawler->filter('div[class=entry]'));
|
||||
|
||||
$data = array(
|
||||
'entry_filter[createdAt][left_date]' => '01/01/1970',
|
||||
'entry_filter[createdAt][right_date]' => '01/01/1970',
|
||||
|
|
Loading…
Reference in a new issue