Skip to content

Commit d2768c9

Browse files
committed
Merge remote-tracking branch 'remotes/origin/MAGETWO-44333' into BugFestW5
2 parents c8712db + d0a1e0c commit d2768c9

File tree

9 files changed

+153
-133
lines changed

9 files changed

+153
-133
lines changed

app/code/Magento/Search/Api/SearchInterface.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,11 @@
55
*/
66
namespace Magento\Search\Api;
77

8+
use Magento\Framework\Api\Search\SearchInterface as FrameworkSearchInterface;
9+
810
/**
911
* Search API for all requests
10-
*
11-
* @api
1212
*/
13-
interface SearchInterface
13+
interface SearchInterface extends FrameworkSearchInterface
1414
{
15-
/**
16-
* Make Full Text Search and return found Documents
17-
*
18-
* @param \Magento\Framework\Api\Search\SearchCriteriaInterface $searchCriteria
19-
* @return \Magento\Framework\Api\Search\SearchResultInterface
20-
*/
21-
public function search(\Magento\Framework\Api\Search\SearchCriteriaInterface $searchCriteria);
2215
}

app/code/Magento/Search/Model/Search.php

Lines changed: 5 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -5,98 +5,12 @@
55
*/
66
namespace Magento\Search\Model;
77

8-
use Magento\Framework\Api\Search\SearchCriteriaInterface;
9-
use Magento\Framework\App\Config\ScopeConfigInterface;
10-
use Magento\Framework\Search\Request\Builder;
11-
use Magento\Framework\Search\SearchEngineInterface;
8+
use Magento\Framework\Search\Search as FrameworkSearch;
129
use Magento\Search\Api\SearchInterface;
13-
use Magento\Store\Model\ScopeInterface;
14-
use Magento\Store\Model\StoreManagerInterface;
1510

16-
class Search implements SearchInterface
11+
/**
12+
* Search extended implementation for WebApi
13+
*/
14+
class Search extends FrameworkSearch implements SearchInterface
1715
{
18-
/**
19-
* @var Builder
20-
*/
21-
private $requestBuilder;
22-
23-
/**
24-
* @var StoreManagerInterface
25-
*/
26-
private $storeManager;
27-
28-
/**
29-
* @var SearchEngineInterface
30-
*/
31-
private $searchEngine;
32-
33-
/**
34-
* @var SearchResponseBuilder
35-
*/
36-
private $searchResponseBuilder;
37-
38-
/**
39-
* @param Builder $requestBuilder
40-
* @param StoreManagerInterface $storeManager
41-
* @param SearchEngineInterface $searchEngine
42-
* @param SearchResponseBuilder $searchResponseBuilder
43-
*/
44-
public function __construct(
45-
Builder $requestBuilder,
46-
StoreManagerInterface $storeManager,
47-
SearchEngineInterface $searchEngine,
48-
SearchResponseBuilder $searchResponseBuilder
49-
) {
50-
$this->requestBuilder = $requestBuilder;
51-
$this->storeManager = $storeManager;
52-
$this->searchEngine = $searchEngine;
53-
$this->searchResponseBuilder = $searchResponseBuilder;
54-
}
55-
56-
/**
57-
* {@inheritdoc}
58-
*/
59-
public function search(SearchCriteriaInterface $searchCriteria)
60-
{
61-
$this->requestBuilder->setRequestName($searchCriteria->getRequestName());
62-
63-
$storeId = $this->storeManager->getStore(true)->getId();
64-
$this->requestBuilder->bindDimension('scope', $storeId);
65-
66-
foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
67-
foreach ($filterGroup->getFilters() as $filter) {
68-
$this->addFieldToFilter($filter->getField(), $filter->getValue());
69-
}
70-
}
71-
72-
$this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize());
73-
$this->requestBuilder->setSize($searchCriteria->getPageSize());
74-
$request = $this->requestBuilder->create();
75-
$searchResponse = $this->searchEngine->search($request);
76-
77-
return $this->searchResponseBuilder->build($searchResponse)
78-
->setSearchCriteria($searchCriteria);
79-
}
80-
81-
/**
82-
* Apply attribute filter to facet collection
83-
*
84-
* @param string $field
85-
* @param null $condition
86-
* @return $this
87-
*/
88-
private function addFieldToFilter($field, $condition = null)
89-
{
90-
if (!is_array($condition) || !in_array(key($condition), ['from', 'to'])) {
91-
$this->requestBuilder->bind($field, $condition);
92-
} else {
93-
if (!empty($condition['from'])) {
94-
$this->requestBuilder->bind("{$field}.from", $condition['from']);
95-
}
96-
if (!empty($condition['to'])) {
97-
$this->requestBuilder->bind("{$field}.to", $condition['to']);
98-
}
99-
}
100-
return $this;
101-
}
10216
}

app/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
<preference for="Magento\Framework\Api\ImageProcessorInterface" type="Magento\Framework\Api\ImageProcessor" />
140140
<preference for="Magento\Framework\Code\Reader\ClassReaderInterface" type="Magento\Framework\Code\Reader\ClassReader" />
141141
<preference for="Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface" type="Magento\Framework\Stdlib\DateTime\DateTimeFormatter"/>
142+
<preference for="Magento\Framework\Api\Search\SearchInterface" type="Magento\Framework\Search\Search"/>
142143
<type name="Magento\Framework\Model\ResourceModel\Db\TransactionManager" shared="false" />
143144
<type name="Magento\Framework\Logger\Handler\Base">
144145
<arguments>

dev/tests/api-functional/testsuite/Magento/Search/Api/SearchTest.php renamed to dev/tests/api-functional/testsuite/Magento/Framework/Api/Search/SearchTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Search\Api;
6+
namespace Magento\Framework\Api\Search;
77

88
use Magento\TestFramework\TestCase\WebapiAbstract;
99

@@ -15,7 +15,7 @@ class SearchTest extends WebapiAbstract
1515

1616
/**
1717
* @magentoApiDataFixture Magento/Catalog/_files/product_simple.php
18-
* @covers \Magento\Search\Model\Search::search
18+
* @covers \Magento\Framework\Search\Search::search
1919
*/
2020
public function testCatalogSearch()
2121
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Api\Search;
7+
8+
/**
9+
* Search API for all requests
10+
*
11+
* @api
12+
*/
13+
interface SearchInterface
14+
{
15+
/**
16+
* Make Full Text Search and return found Documents
17+
*
18+
* @param \Magento\Framework\Api\Search\SearchCriteriaInterface $searchCriteria
19+
* @return \Magento\Framework\Api\Search\SearchResultInterface
20+
*/
21+
public function search(\Magento\Framework\Api\Search\SearchCriteriaInterface $searchCriteria);
22+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Search;
7+
8+
use Magento\Framework\Api\Search\SearchInterface;
9+
use Magento\Framework\Api\Search\SearchCriteriaInterface;
10+
use Magento\Framework\App\ScopeResolverInterface;
11+
use Magento\Framework\Search\Request\Builder;
12+
13+
class Search implements SearchInterface
14+
{
15+
/**
16+
* @var Builder
17+
*/
18+
private $requestBuilder;
19+
20+
/**
21+
* @var ScopeResolverInterface
22+
*/
23+
private $scopeResolver;
24+
25+
/**
26+
* @var SearchEngineInterface
27+
*/
28+
private $searchEngine;
29+
30+
/**
31+
* @var SearchResponseBuilder
32+
*/
33+
private $searchResponseBuilder;
34+
35+
/**
36+
* @param Builder $requestBuilder
37+
* @param ScopeResolverInterface $scopeResolver
38+
* @param SearchEngineInterface $searchEngine
39+
* @param SearchResponseBuilder $searchResponseBuilder
40+
*/
41+
public function __construct(
42+
Builder $requestBuilder,
43+
ScopeResolverInterface $scopeResolver,
44+
SearchEngineInterface $searchEngine,
45+
SearchResponseBuilder $searchResponseBuilder
46+
) {
47+
$this->requestBuilder = $requestBuilder;
48+
$this->scopeResolver = $scopeResolver;
49+
$this->searchEngine = $searchEngine;
50+
$this->searchResponseBuilder = $searchResponseBuilder;
51+
}
52+
53+
/**
54+
* {@inheritdoc}
55+
*/
56+
public function search(SearchCriteriaInterface $searchCriteria)
57+
{
58+
$this->requestBuilder->setRequestName($searchCriteria->getRequestName());
59+
60+
$scope = $this->scopeResolver->getScope();
61+
$this->requestBuilder->bindDimension('scope', $scope);
62+
63+
foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
64+
foreach ($filterGroup->getFilters() as $filter) {
65+
$this->addFieldToFilter($filter->getField(), $filter->getValue());
66+
}
67+
}
68+
69+
$this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize());
70+
$this->requestBuilder->setSize($searchCriteria->getPageSize());
71+
$request = $this->requestBuilder->create();
72+
$searchResponse = $this->searchEngine->search($request);
73+
74+
return $this->searchResponseBuilder->build($searchResponse)
75+
->setSearchCriteria($searchCriteria);
76+
}
77+
78+
/**
79+
* Apply attribute filter to facet collection
80+
*
81+
* @param string $field
82+
* @param string|array|null $condition
83+
* @return $this
84+
*/
85+
private function addFieldToFilter($field, $condition = null)
86+
{
87+
if (!is_array($condition) || !in_array(key($condition), ['from', 'to'])) {
88+
$this->requestBuilder->bind($field, $condition);
89+
} else {
90+
if (!empty($condition['from'])) {
91+
$this->requestBuilder->bind("{$field}.from", $condition['from']);
92+
}
93+
if (!empty($condition['to'])) {
94+
$this->requestBuilder->bind("{$field}.to", $condition['to']);
95+
}
96+
}
97+
98+
return $this;
99+
}
100+
}

app/code/Magento/Search/Model/SearchResponseBuilder.php renamed to lib/internal/Magento/Framework/Search/SearchResponseBuilder.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Search\Model;
6+
namespace Magento\Framework\Search;
77

88
use Magento\Framework\Api\Search\SearchResultInterface;
99
use Magento\Framework\Api\Search\DocumentFactory;
1010
use Magento\Framework\Api\Search\SearchResultFactory;
11-
use Magento\Framework\Search\ResponseInterface;
1211

1312
class SearchResponseBuilder
1413
{

app/code/Magento/Search/Test/Unit/Model/SearchResponseBuilderTest.php renamed to lib/internal/Magento/Framework/Search/Test/Unit/SearchResponseBuilderTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Search\Test\Unit\Model;
6+
namespace Magento\Framework\Search\Test\Unit;
77

88
use Magento\Framework\Api\Search\SearchResultInterface;
99
use Magento\Framework\Search\Response\QueryResponse;
@@ -12,7 +12,7 @@
1212
class SearchResponseBuilderTest extends \PHPUnit_Framework_TestCase
1313
{
1414
/**
15-
* @var \Magento\Search\Model\SearchResponseBuilder
15+
* @var \Magento\Framework\Search\SearchResponseBuilder
1616
*/
1717
private $model;
1818

@@ -36,7 +36,7 @@ protected function setUp()
3636
->disableOriginalConstructor()
3737
->getMock();
3838

39-
$this->model = (new ObjectManager($this))->getObject('Magento\Search\Model\SearchResponseBuilder', [
39+
$this->model = (new ObjectManager($this))->getObject('Magento\Framework\Search\SearchResponseBuilder', [
4040
'documentFactory' => $this->documentFactory,
4141
'searchResultFactory' => $this->searchResultFactory,
4242
]);

0 commit comments

Comments
 (0)