![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Search/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Search; use Magento\Framework\Api\Search\SearchInterface; use Magento\Framework\Api\Search\SearchCriteriaInterface; use Magento\Framework\App\ScopeResolverInterface; use Magento\Framework\Search\Request\Builder; /** * Search API for all requests. */ class Search implements SearchInterface { /** * @var Builder */ private $requestBuilder; /** * @var ScopeResolverInterface */ private $scopeResolver; /** * @var SearchEngineInterface */ private $searchEngine; /** * @var SearchResponseBuilder */ private $searchResponseBuilder; /** * @param Builder $requestBuilder * @param ScopeResolverInterface $scopeResolver * @param SearchEngineInterface $searchEngine * @param SearchResponseBuilder $searchResponseBuilder */ public function __construct( Builder $requestBuilder, ScopeResolverInterface $scopeResolver, SearchEngineInterface $searchEngine, SearchResponseBuilder $searchResponseBuilder ) { $this->requestBuilder = $requestBuilder; $this->scopeResolver = $scopeResolver; $this->searchEngine = $searchEngine; $this->searchResponseBuilder = $searchResponseBuilder; } /** * @inheritdoc */ public function search(SearchCriteriaInterface $searchCriteria) { $this->requestBuilder->setRequestName($searchCriteria->getRequestName()); $scope = $this->scopeResolver->getScope()->getId(); $this->requestBuilder->bindDimension('scope', $scope); foreach ($searchCriteria->getFilterGroups() as $filterGroup) { foreach ($filterGroup->getFilters() as $filter) { $this->addFieldToFilter($filter->getField(), $filter->getValue()); } } $this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize()); $this->requestBuilder->setSize($searchCriteria->getPageSize()); /** * This added in Backward compatibility purposes. * Temporary solution for an existing API of a fulltext search request builder. * It must be moved to different API. * Scope to split Search request builder API in MC-16461. */ if (method_exists($this->requestBuilder, 'setSort')) { $this->requestBuilder->setSort($searchCriteria->getSortOrders()); } $request = $this->requestBuilder->create(); $searchResponse = $this->searchEngine->search($request); return $this->searchResponseBuilder->build($searchResponse) ->setSearchCriteria($searchCriteria); } /** * Apply attribute filter to facet collection * * @param string $field * @param string|array|null $condition * @return $this */ private function addFieldToFilter($field, $condition = null) { if (!is_array($condition) || !in_array(key($condition), ['from', 'to'], true)) { $this->requestBuilder->bind($field, $condition); } else { if (!empty($condition['from'])) { $this->requestBuilder->bind("{$field}.from", $condition['from']); } if (!empty($condition['to'])) { $this->requestBuilder->bind("{$field}.to", $condition['to']); } } return $this; } }