Skip to content

Commit 2321ece

Browse files
einorlersaimaz
authored andcommitted
Fix range filter preprocess search (#254)
* Bumped development version to 2.1 * Fix doc * implemented filtering results when retrieving bounds in range filter * fixed tests
1 parent ab879a9 commit 2321ece

File tree

5 files changed

+25
-11
lines changed

5 files changed

+25
-11
lines changed

Filter/ViewData.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public function setState(FilterState $state)
9292
}
9393

9494
/**
95-
* @return string
95+
* @return array
9696
*/
9797
public function getTags()
9898
{

Filter/Widget/Range/Range.php

+20-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace ONGR\FilterManagerBundle\Filter\Widget\Range;
1313

14+
use ONGR\ElasticsearchDSL\Aggregation\Bucketing\FilterAggregation;
1415
use ONGR\ElasticsearchDSL\Aggregation\Metric\StatsAggregation;
1516
use ONGR\ElasticsearchDSL\Search;
1617
use ONGR\ElasticsearchBundle\Result\DocumentIterator;
@@ -58,9 +59,17 @@ public function getState(Request $request)
5859
*/
5960
public function preProcessSearch(Search $search, Search $relatedSearch, FilterState $state = null)
6061
{
61-
$stateAgg = new StatsAggregation($state->getName());
62-
$stateAgg->setField($this->getDocumentField());
63-
$search->addAggregation($stateAgg);
62+
$aggregation = new StatsAggregation($state->getName());
63+
$aggregation->setField($this->getDocumentField());
64+
65+
if ($relatedSearch->getPostFilters()) {
66+
$filterAggregation = new FilterAggregation($state->getName() . '-filter');
67+
$filterAggregation->setFilter($relatedSearch->getPostFilters());
68+
$filterAggregation->addAggregation($aggregation);
69+
$aggregation = $filterAggregation;
70+
}
71+
72+
$search->addAggregation($aggregation);
6473
}
6574

6675
/**
@@ -69,9 +78,15 @@ public function preProcessSearch(Search $search, Search $relatedSearch, FilterSt
6978
public function getViewData(DocumentIterator $result, ViewData $data)
7079
{
7180
$name = $data->getState()->getName();
81+
$aggregation = $result->getAggregation($name);
82+
83+
if (!$aggregation) {
84+
$aggregation = $result->getAggregation($name . '-filter')->getAggregation($name);
85+
}
86+
7287
/** @var $data ViewData\RangeAwareViewData */
73-
$data->setMinBounds($result->getAggregation($name)['min']);
74-
$data->setMaxBounds($result->getAggregation($name)['max']);
88+
$data->setMinBounds($aggregation['min']);
89+
$data->setMaxBounds($aggregation['max']);
7590

7691
return $data;
7792
}

Tests/Functional/Filter/Widget/Range/DateRangeTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public function testBoundsFormation()
120120

121121
$result = $manager->handleRequest(new Request(['limit' => 'blue']))->getFilters()['date_range_filter'];
122122

123-
$this->assertEquals('2001-09-11', $result->getMinBounds()->format('Y-m-d'));
124-
$this->assertEquals('2005-10-11', $result->getMaxBounds()->format('Y-m-d'));
123+
$this->assertEquals('2002-09-12', $result->getMinBounds()->format('Y-m-d'));
124+
$this->assertEquals('2004-09-11', $result->getMaxBounds()->format('Y-m-d'));
125125
}
126126
}

Tests/Functional/Filter/Widget/Range/RangeTest.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ public function getTestResultsData()
121121
*/
122122
public function testFilter($expectedChoices, $query = [])
123123
{
124-
125124
$manager = $this->getContainer()->get(ONGRFilterManagerExtension::getFilterManagerId('range'));
126125
$result = $manager->handleRequest(new Request($query))->getResult();
127126

@@ -141,6 +140,6 @@ public function testFilterWithRelatedSearch()
141140
$priceViewData = $result->getFilters()['price_range'];
142141

143142
$this->assertEquals(1, floor($priceViewData->getMinBounds()));
144-
$this->assertEquals(5, ceil($priceViewData->getMaxBounds()));
143+
$this->assertEquals(3, ceil($priceViewData->getMaxBounds()));
145144
}
146145
}

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"minimum-stability": "dev",
3030
"extra": {
3131
"branch-alias": {
32-
"dev-master": "2.0-dev"
32+
"dev-master": "2.1-dev"
3333
}
3434
}
3535
}

0 commit comments

Comments
 (0)