123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogSearch\Model\Search;
- use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
- use Magento\CatalogSearch\Model\Adapter\Mysql\Filter\AliasResolver;
- use Magento\CatalogSearch\Model\Search\FilterMapper\FilterStrategyInterface;
- use Magento\Eav\Model\Config as EavConfig;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\App\ResourceConnection as AppResource;
- use Magento\Framework\DB\Select;
- use Magento\Framework\Search\Request\FilterInterface;
- use Magento\Framework\Search\RequestInterface;
- use Magento\Store\Model\StoreManagerInterface;
- /**
- * Responsibility of the TableMapper is to collect all filters from the search query
- * and pass them one by one for processing in the FilterContext,
- * which will apply them to the Select
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- * @api
- * @since 100.0.2
- * @deprecated 101.0.0
- * @see \Magento\ElasticSearch
- */
- class TableMapper
- {
- /**
- * @var FilterStrategyInterface
- */
- private $filterStrategy;
- /**
- * @var AliasResolver
- */
- private $aliasResolver;
- /**
- * @var AliasResolver
- */
- private $filtersExtractor;
- /**
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- * @param AppResource $resource
- * @param StoreManagerInterface $storeManager
- * @param CollectionFactory $attributeCollectionFactory
- * @param EavConfig $eavConfig
- * @param ScopeConfigInterface $scopeConfig
- * @param FilterStrategyInterface $filterStrategy
- * @param AliasResolver $aliasResolver
- * @param FiltersExtractor $filtersExtractor
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function __construct(
- AppResource $resource,
- StoreManagerInterface $storeManager,
- CollectionFactory $attributeCollectionFactory,
- EavConfig $eavConfig = null,
- ScopeConfigInterface $scopeConfig = null,
- FilterStrategyInterface $filterStrategy = null,
- AliasResolver $aliasResolver = null,
- FiltersExtractor $filtersExtractor = null
- ) {
- if (null === $filterStrategy) {
- $filterStrategy = ObjectManager::getInstance()->get(FilterStrategyInterface::class);
- }
- if (null === $aliasResolver) {
- $aliasResolver = ObjectManager::getInstance()->get(AliasResolver::class);
- }
- if (null === $filtersExtractor) {
- $filtersExtractor = ObjectManager::getInstance()->get(FiltersExtractor::class);
- }
- $this->filterStrategy = $filterStrategy;
- $this->aliasResolver = $aliasResolver;
- $this->filtersExtractor = $filtersExtractor;
- }
- /**
- * @param Select $select
- * @param RequestInterface $request
- * @return Select
- * @throws \LogicException
- */
- public function addTables(Select $select, RequestInterface $request)
- {
- $appliedFilters = [];
- $filters = $this->filtersExtractor->extractFiltersFromQuery($request->getQuery());
- foreach ($filters as $filter) {
- $alias = $this->aliasResolver->getAlias($filter);
- if (!array_key_exists($alias, $appliedFilters)) {
- $isApplied = $this->filterStrategy->apply($filter, $select);
- if ($isApplied) {
- $appliedFilters[$alias] = true;
- }
- }
- }
- return $select;
- }
- /**
- * This method is deprecated.
- * Please use \Magento\CatalogSearch\Model\Adapter\Mysql\Filter\AliasResolver::getAlias() instead.
- *
- * @deprecated 100.1.6
- * @see AliasResolver::getAlias()
- *
- * @param FilterInterface $filter
- * @return string
- */
- public function getMappingAlias(FilterInterface $filter)
- {
- return $this->aliasResolver->getAlias($filter);
- }
- }
|