Skip to content

Commit 9bc76be

Browse files
committed
Merge remote-tracking branch 'ogresCE/MAGETWO-20037-fix-functional-tests' into PR_Branch
2 parents e0d726a + 79d6505 commit 9bc76be

File tree

21 files changed

+512
-375
lines changed

21 files changed

+512
-375
lines changed

app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced/Collection.php

Lines changed: 75 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
namespace Magento\CatalogSearch\Model\ResourceModel\Advanced;
77

88
use Magento\Catalog\Model\Product;
9+
use Magento\Framework\Api\FilterBuilder;
10+
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
911
use Magento\Framework\Search\Adapter\Mysql\TemporaryStorage;
1012

1113
/**
@@ -23,19 +25,24 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
2325
private $filters = [];
2426

2527
/**
26-
* @var \Magento\CatalogSearch\Model\Advanced\Request\Builder
28+
* @var \Magento\Search\Api\SearchInterface
2729
*/
28-
private $requestBuilder;
30+
private $search;
2931

3032
/**
31-
* @var \Magento\Search\Model\SearchEngine
33+
* @var \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory
3234
*/
33-
private $searchEngine;
35+
private $temporaryStorageFactory;
3436

3537
/**
36-
* @var \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory
38+
* @var SearchCriteriaBuilder
3739
*/
38-
private $temporaryStorageFactory;
40+
private $searchCriteriaBuilder;
41+
42+
/**
43+
* @var FilterBuilder
44+
*/
45+
private $filterBuilder;
3946

4047
/**
4148
* Collection constructor.
@@ -58,11 +65,12 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
5865
* @param \Magento\Customer\Model\Session $customerSession
5966
* @param \Magento\Framework\Stdlib\DateTime $dateTime
6067
* @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
68+
* @param \Magento\Search\Api\SearchInterface $search
6169
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation
62-
* @param \Magento\CatalogSearch\Model\Advanced\Request\Builder $requestBuilder
63-
* @param \Magento\Search\Model\SearchEngine $searchEngine
6470
* @param \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory $temporaryStorageFactory
65-
* @param \Zend_Db_Adapter_Abstract $connection
71+
* @param SearchCriteriaBuilder $searchCriteriaBuilder
72+
* @param FilterBuilder $filterBuilder
73+
* @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
6674
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
6775
*/
6876
public function __construct(
@@ -85,15 +93,17 @@ public function __construct(
8593
\Magento\Customer\Model\Session $customerSession,
8694
\Magento\Framework\Stdlib\DateTime $dateTime,
8795
\Magento\Customer\Api\GroupManagementInterface $groupManagement,
96+
\Magento\Search\Api\SearchInterface $search,
8897
\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation,
89-
\Magento\CatalogSearch\Model\Advanced\Request\Builder $requestBuilder,
90-
\Magento\Search\Model\SearchEngine $searchEngine,
9198
\Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory $temporaryStorageFactory,
92-
$connection = null
99+
SearchCriteriaBuilder $searchCriteriaBuilder,
100+
FilterBuilder $filterBuilder,
101+
\Magento\Framework\DB\Adapter\AdapterInterface $connection = null
93102
) {
94-
$this->requestBuilder = $requestBuilder;
95-
$this->searchEngine = $searchEngine;
103+
$this->search = $search;
96104
$this->temporaryStorageFactory = $temporaryStorageFactory;
105+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
106+
$this->filterBuilder = $filterBuilder;
97107
parent::__construct(
98108
$entityFactory,
99109
$logger,
@@ -140,19 +150,18 @@ public function addFieldsToFilter($fields)
140150
protected function _renderFiltersBefore()
141151
{
142152
if ($this->filters) {
143-
$this->requestBuilder->bindDimension('scope', $this->getStoreId());
144-
$this->requestBuilder->setRequestName('advanced_search_container');
145153
foreach ($this->filters as $attributes) {
146154
foreach ($attributes as $attributeCode => $attributeValue) {
147155
$attributeCode = $this->getAttributeCode($attributeCode);
148-
$this->requestBuilder->bindRequestValue($attributeCode, $attributeValue);
156+
$this->addAttributeToSearch($attributeCode, $attributeValue);
149157
}
150158
}
151-
$queryRequest = $this->requestBuilder->create();
152-
$queryResponse = $this->searchEngine->search($queryRequest);
159+
$searchCriteria = $this->searchCriteriaBuilder->create();
160+
$searchCriteria->setRequestName('advanced_search_container');
161+
$searchResult = $this->search->search($searchCriteria);
153162

154163
$temporaryStorage = $this->temporaryStorageFactory->create();
155-
$table = $temporaryStorage->storeDocuments($queryResponse->getIterator());
164+
$table = $temporaryStorage->storeApiDocuments($searchResult->getItems());
156165

157166
$this->getSelect()->joinInner(
158167
[
@@ -162,7 +171,7 @@ protected function _renderFiltersBefore()
162171
[]
163172
);
164173
}
165-
return parent::_renderFiltersBefore();
174+
parent::_renderFiltersBefore();
166175
}
167176

168177
/**
@@ -178,4 +187,49 @@ private function getAttributeCode($attributeCode)
178187

179188
return $attributeCode;
180189
}
190+
191+
/**
192+
* Create a filter and add it to the SearchCriteriaBuilder.
193+
*
194+
* @param string $attributeCode
195+
* @param array|string $attributeValue
196+
* @return void
197+
*/
198+
private function addAttributeToSearch($attributeCode, $attributeValue)
199+
{
200+
if (isset($attributeValue['from']) || isset($attributeValue['to'])) {
201+
$this->addRangeAttributeToSearch($attributeCode, $attributeValue);
202+
} elseif (!is_array($attributeValue)) {
203+
$this->filterBuilder->setField($attributeCode)->setValue($attributeValue);
204+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
205+
} elseif (isset($attributeValue['like'])) {
206+
$this->filterBuilder->setField($attributeCode)->setValue($attributeValue['like']);
207+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
208+
} elseif (isset($attributeValue['in'])) {
209+
$this->filterBuilder->setField($attributeCode)->setValue($attributeValue['in']);
210+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
211+
} elseif (isset($attributeValue['in_set'])) {
212+
$this->filterBuilder->setField($attributeCode)->setValue($attributeValue['in_set']);
213+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
214+
}
215+
}
216+
217+
/**
218+
* Add attributes that have a range (from,to) to the SearchCriteriaBuilder.
219+
*
220+
* @param string $attributeCode
221+
* @param array|string $attributeValue
222+
* @return void
223+
*/
224+
private function addRangeAttributeToSearch($attributeCode, $attributeValue)
225+
{
226+
if (isset($attributeValue['from']) && '' !== $attributeValue['from']) {
227+
$this->filterBuilder->setField("{$attributeCode}.from")->setValue($attributeValue['from']);
228+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
229+
}
230+
if (isset($attributeValue['to']) && '' !== $attributeValue['to']) {
231+
$this->filterBuilder->setField("{$attributeCode}.to")->setValue($attributeValue['to']);
232+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
233+
}
234+
}
181235
}

app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,53 +8,52 @@
88
use Magento\Framework\DB\Select;
99
use Magento\Framework\Exception\StateException;
1010
use Magento\Framework\Search\Adapter\Mysql\TemporaryStorage;
11-
use Magento\Framework\Search\Response\QueryResponse;
1211

1312
/**
1413
* Fulltext Collection
1514
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1615
*/
1716
class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
1817
{
19-
/** @var QueryResponse */
20-
protected $queryResponse;
18+
/**
19+
* @var string
20+
*/
21+
private $queryText;
2122

2223
/**
23-
* Catalog search data
24-
*
25-
* @var \Magento\Search\Model\QueryFactory
24+
* @var string|null
2625
*/
27-
protected $queryFactory = null;
26+
private $order = null;
2827

2928
/**
30-
* @var \Magento\Framework\Search\Request\Builder
29+
* @var string
3130
*/
32-
private $requestBuilder;
31+
private $searchRequestName;
3332

3433
/**
35-
* @var \Magento\Search\Model\SearchEngine
34+
* @var \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory
3635
*/
37-
private $searchEngine;
36+
private $temporaryStorageFactory;
3837

3938
/**
40-
* @var string
39+
* @var \Magento\Search\Api\SearchInterface
4140
*/
42-
private $queryText;
41+
private $search;
4342

4443
/**
45-
* @var string|null
44+
* @var \Magento\Framework\Api\Search\SearchCriteriaBuilder
4645
*/
47-
private $order = null;
46+
private $searchCriteriaBuilder;
4847

4948
/**
50-
* @var string
49+
* @var \Magento\Framework\Api\Search\SearchResultInterface
5150
*/
52-
private $searchRequestName;
51+
private $searchResult;
5352

5453
/**
55-
* @var \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory
54+
* @var \Magento\Framework\Api\FilterBuilder
5655
*/
57-
private $temporaryStorageFactory;
56+
private $filterBuilder;
5857

5958
/**
6059
* @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
@@ -77,11 +76,11 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
7776
* @param \Magento\Framework\Stdlib\DateTime $dateTime
7877
* @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
7978
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation
80-
* @param \Magento\Search\Model\QueryFactory $catalogSearchData
81-
* @param \Magento\Framework\Search\Request\Builder $requestBuilder
82-
* @param \Magento\Search\Model\SearchEngine $searchEngine
8379
* @param \Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory $temporaryStorageFactory
84-
* @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
80+
* @param \Magento\Search\Api\SearchInterface $search
81+
* @param \Magento\Framework\Api\Search\SearchCriteriaBuilder $searchCriteriaBuilder
82+
* @param \Magento\Framework\Api\FilterBuilder $filterBuilder
83+
* @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
8584
* @param string $searchRequestName
8685
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
8786
*/
@@ -106,14 +105,13 @@ public function __construct(
106105
\Magento\Framework\Stdlib\DateTime $dateTime,
107106
\Magento\Customer\Api\GroupManagementInterface $groupManagement,
108107
\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation,
109-
\Magento\Search\Model\QueryFactory $catalogSearchData,
110-
\Magento\Framework\Search\Request\Builder $requestBuilder,
111-
\Magento\Search\Model\SearchEngine $searchEngine,
112108
\Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory $temporaryStorageFactory,
109+
\Magento\Search\Api\SearchInterface $search,
110+
\Magento\Framework\Api\Search\SearchCriteriaBuilder $searchCriteriaBuilder,
111+
\Magento\Framework\Api\FilterBuilder $filterBuilder,
113112
\Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
114113
$searchRequestName = 'catalog_view_container'
115114
) {
116-
$this->queryFactory = $catalogSearchData;
117115
parent::__construct(
118116
$entityFactory,
119117
$logger,
@@ -137,10 +135,11 @@ public function __construct(
137135
$productLimitation,
138136
$connection
139137
);
140-
$this->requestBuilder = $requestBuilder;
141-
$this->searchEngine = $searchEngine;
142138
$this->temporaryStorageFactory = $temporaryStorageFactory;
143139
$this->searchRequestName = $searchRequestName;
140+
$this->search = $search;
141+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
142+
$this->filterBuilder = $filterBuilder;
144143
}
145144

146145
/**
@@ -152,17 +151,24 @@ public function __construct(
152151
*/
153152
public function addFieldToFilter($field, $condition = null)
154153
{
155-
if ($this->queryResponse !== null) {
154+
if ($this->searchResult !== null) {
156155
throw new \RuntimeException('Illegal state');
157156
}
157+
158158
if (!is_array($condition) || !in_array(key($condition), ['from', 'to'])) {
159-
$this->requestBuilder->bind($field, $condition);
159+
$this->filterBuilder->setField($field);
160+
$this->filterBuilder->setValue($condition);
161+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
160162
} else {
161163
if (!empty($condition['from'])) {
162-
$this->requestBuilder->bind("{$field}.from", $condition['from']);
164+
$this->filterBuilder->setField("{$field}.from");
165+
$this->filterBuilder->setValue($condition['from']);
166+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
163167
}
164168
if (!empty($condition['to'])) {
165-
$this->requestBuilder->bind("{$field}.to", $condition['to']);
169+
$this->filterBuilder->setField("{$field}.to");
170+
$this->filterBuilder->setValue($condition['to']);
171+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
166172
}
167173
}
168174
return $this;
@@ -185,26 +191,28 @@ public function addSearchFilter($query)
185191
*/
186192
protected function _renderFiltersBefore()
187193
{
188-
$this->requestBuilder->bindDimension('scope', $this->getStoreId());
189194
if ($this->queryText) {
190-
$this->requestBuilder->bind('search_term', $this->queryText);
195+
$this->filterBuilder->setField('search_term');
196+
$this->filterBuilder->setValue($this->queryText);
197+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
191198
}
192199

193200
$priceRangeCalculation = $this->_scopeConfig->getValue(
194201
\Magento\Catalog\Model\Layer\Filter\Dynamic\AlgorithmFactory::XML_PATH_RANGE_CALCULATION,
195202
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
196203
);
197204
if ($priceRangeCalculation) {
198-
$this->requestBuilder->bind('price_dynamic_algorithm', $priceRangeCalculation);
205+
$this->filterBuilder->setField('price_dynamic_algorithm');
206+
$this->filterBuilder->setValue($priceRangeCalculation);
207+
$this->searchCriteriaBuilder->addFilter($this->filterBuilder->create());
199208
}
200209

201-
$this->requestBuilder->setRequestName($this->searchRequestName);
202-
$queryRequest = $this->requestBuilder->create();
203-
204-
$this->queryResponse = $this->searchEngine->search($queryRequest);
210+
$searchCriteria = $this->searchCriteriaBuilder->create();
211+
$searchCriteria->setRequestName($this->searchRequestName);
212+
$this->searchResult = $this->search->search($searchCriteria);
205213

206214
$temporaryStorage = $this->temporaryStorageFactory->create();
207-
$table = $temporaryStorage->storeDocuments($this->queryResponse->getIterator());
215+
$table = $temporaryStorage->storeApiDocuments($this->searchResult->getItems());
208216

209217
$this->getSelect()->joinInner(
210218
[
@@ -214,7 +222,7 @@ protected function _renderFiltersBefore()
214222
[]
215223
);
216224

217-
$this->_totalRecords = $this->queryResponse->count();
225+
$this->_totalRecords = $this->searchResult->getTotalCount();
218226

219227
if ($this->order && 'relevance' === $this->order['field']) {
220228
$this->getSelect()->order('search_result.'. TemporaryStorage::FIELD_SCORE . ' ' . $this->order['dir']);
@@ -268,7 +276,7 @@ public function getFacetedData($field)
268276
{
269277
$this->_renderFilters();
270278
$result = [];
271-
$aggregations = $this->queryResponse->getAggregations();
279+
$aggregations = $this->searchResult->getAggregations();
272280
$bucket = $aggregations->getBucket($field . '_bucket');
273281
if ($bucket) {
274282
foreach ($bucket->getValues() as $value) {

0 commit comments

Comments
 (0)