add filter on domain name

This commit is contained in:
Nicolas Lœuillet 2015-08-18 17:28:12 +02:00
parent b71ebd9af9
commit 443cecd2d8
3 changed files with 45 additions and 2 deletions

View file

@ -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()

View file

@ -77,8 +77,16 @@
<label for="entry_filter_readingTime_right_number">{% trans %}to{% endtrans %}</label>
</div>
<div class="col s12">
<label>{% trans %}Create at{% endtrans %}</label>
<label>{% trans %}Domain name{% endtrans %}</label>
</div>
<div class="input-field col s6">
{{ form_widget(form.domainName, {'type': 'text'}) }}
<label for="entry_filter_domainName">{% trans %}www.website.com{% endtrans %}</label>
</div>
<div class="input-field col s6">

View file

@ -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]'));
}
}