From 443cecd2d895a7e257a051ea65c6822fdce73b07 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 18 Aug 2015 17:28:12 +0200 Subject: [PATCH] add filter on domain name --- .../CoreBundle/Filter/EntryFilterType.php | 15 +++++++++++- .../themes/material/Entry/entries.html.twig | 8 +++++++ .../Tests/Controller/EntryControllerTest.php | 24 ++++++++++++++++++- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Wallabag/CoreBundle/Filter/EntryFilterType.php b/src/Wallabag/CoreBundle/Filter/EntryFilterType.php index 2fa2f8a0..d1057fb5 100644 --- a/src/Wallabag/CoreBundle/Filter/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Filter/EntryFilterType.php @@ -5,6 +5,8 @@ namespace Wallabag\CoreBundle\Filter; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use Lexik\Bundle\FormFilterBundle\Filter\FilterOperands; +use Lexik\Bundle\FormFilterBundle\Filter\Query\QueryInterface; class EntryFilterType extends AbstractType { @@ -24,7 +26,18 @@ class EntryFilterType extends AbstractType 'placeholder' => 'dd/mm/yyyy'), 'format' => 'dd/MM/yyyy', 'widget' => 'single_text' - ))); + ))) + ->add('domainName', 'filter_text', array( + 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) + { + $value = $values['value']; + if (strlen($value) <= 3 || empty($value)) { + return null; + } + $expression = $filterQuery->getExpr()->like($field, $filterQuery->getExpr()->literal('%'.$value.'%')); + return $filterQuery->createCondition($expression); + } + )); } public function getName() diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 41ce9eee..67061e4c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -77,8 +77,16 @@ +
+ + + +
+
+ {{ form_widget(form.domainName, {'type': 'text'}) }} +
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index 87c16415..8d013ec0 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php @@ -293,7 +293,6 @@ class EntryControllerTest extends WallabagCoreTestCase { $this->logInAs('admin'); $client = $this->getClient(); - $crawler = $client->request('GET', '/config'); $form = $crawler->filter('button[id=config_save]')->form(); @@ -310,4 +309,27 @@ class EntryControllerTest extends WallabagCoreTestCase $this->assertContains($parameters, $client->getResponse()->getContent()); } + + public function testFilterOnDomainName() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/unread/list'); + $form = $crawler->filter('button[id=submit-filter]')->form(); + $data = array( + 'entry_filter[domainName]' => 'monde' + ); + + $crawler = $client->submit($form, $data); + $this->assertCount(1, $crawler->filter('div[class=entry]')); + + $form = $crawler->filter('button[id=submit-filter]')->form(); + $data = array( + 'entry_filter[domainName]' => 'wallabag' + ); + + $crawler = $client->submit($form, $data); + $this->assertCount(0, $crawler->filter('div[class=entry]')); + } } -- 2.41.0