Skip to content

Commit fb909a9

Browse files
author
Kopylova,Olga(okopylova)
committed
Merge pull request #384 from magento-ogre/PR_Branch
[Ogre's] Search features, functional test fixes and bug fixes
2 parents 396adca + fb00702 commit fb909a9

File tree

83 files changed

+1944
-532
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1944
-532
lines changed

app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,19 @@
2727
</form>
2828
<script data-template="search-suggest" type="text/x-magento-template">
2929
<ul class="search-global-menu">
30-
<% if (data.items.length) { %>
30+
<li class="item">
31+
<a href="<?php /* @escapeNotVerified */ echo $block->getURL('catalog/product/index/'); ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Products</a>
32+
</li>
33+
<li class="item">
34+
<a href="<?php /* @escapeNotVerified */ echo $block->getURL('sales/order/index/'); ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Orders</a>
35+
</li>
36+
<li class="item">
37+
<a href="<?php /* @escapeNotVerified */ echo $block->getURL('customer/index/index/'); ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Customers</a>
38+
</li>
39+
<li class="item">
40+
<a href="<?php /* @escapeNotVerified */ echo $block->getURL('cms/page/index/'); ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Pages</a>
41+
</li>
42+
<% if (data.items.length) { %>
3143
<% _.each(data.items, function(value){ %>
3244
<li class="item"
3345
<%- data.optionData(value) %>

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.
@@ -59,10 +66,11 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
5966
* @param \Magento\Framework\Stdlib\DateTime $dateTime
6067
* @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
6168
* @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
69+
* @param \Magento\Search\Api\SearchInterface $search
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(
@@ -86,14 +94,16 @@ public function __construct(
8694
\Magento\Framework\Stdlib\DateTime $dateTime,
8795
\Magento\Customer\Api\GroupManagementInterface $groupManagement,
8896
\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation $productLimitation,
89-
\Magento\CatalogSearch\Model\Advanced\Request\Builder $requestBuilder,
90-
\Magento\Search\Model\SearchEngine $searchEngine,
97+
\Magento\Search\Api\SearchInterface $search,
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
}

0 commit comments

Comments
 (0)