SelectContainerBuilder.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogSearch\Model\Search\SelectContainer;
  7. use Magento\CatalogSearch\Model\Search\QueryChecker\FullTextSearchCheck;
  8. use Magento\CatalogSearch\Model\Search\CustomAttributeFilterCheck;
  9. use Magento\CatalogSearch\Model\Search\FiltersExtractor;
  10. use Magento\Framework\App\Config\ScopeConfigInterface;
  11. use Magento\Framework\Search\RequestInterface;
  12. use Magento\Framework\App\ResourceConnection;
  13. use Magento\Store\Model\ScopeInterface;
  14. use Magento\CatalogSearch\Model\Search\FilterMapper\VisibilityFilter;
  15. /**
  16. * Class SelectContainerBuilder
  17. * Class is responsible for SelectContainer creation and filling it with all required data
  18. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  19. * @deprecated 101.0.0
  20. * @see \Magento\ElasticSearch
  21. */
  22. class SelectContainerBuilder
  23. {
  24. /**
  25. * @var SelectContainerFactory
  26. */
  27. private $selectContainerFactory;
  28. /**
  29. * @var FullTextSearchCheck
  30. */
  31. private $fullTextSearchCheck;
  32. /**
  33. * @var CustomAttributeFilterCheck
  34. */
  35. private $customAttributeFilterCheck;
  36. /**
  37. * @var FiltersExtractor
  38. */
  39. private $filtersExtractor;
  40. /**
  41. * @var ScopeConfigInterface
  42. */
  43. private $scopeConfig;
  44. /**
  45. * @var ResourceConnection
  46. */
  47. private $resource;
  48. /**
  49. * @param SelectContainerFactory $selectContainerFactory
  50. * @param FullTextSearchCheck $fullTextSearchCheck
  51. * @param CustomAttributeFilterCheck $customAttributeFilterCheck
  52. * @param FiltersExtractor $filtersExtractor
  53. * @param ScopeConfigInterface $scopeConfig
  54. * @param ResourceConnection $resource
  55. */
  56. public function __construct(
  57. SelectContainerFactory $selectContainerFactory,
  58. FullTextSearchCheck $fullTextSearchCheck,
  59. CustomAttributeFilterCheck $customAttributeFilterCheck,
  60. FiltersExtractor $filtersExtractor,
  61. ScopeConfigInterface $scopeConfig,
  62. ResourceConnection $resource
  63. ) {
  64. $this->selectContainerFactory = $selectContainerFactory;
  65. $this->fullTextSearchCheck = $fullTextSearchCheck;
  66. $this->customAttributeFilterCheck = $customAttributeFilterCheck;
  67. $this->filtersExtractor = $filtersExtractor;
  68. $this->scopeConfig = $scopeConfig;
  69. $this->resource = $resource;
  70. }
  71. /**
  72. * Builds SelectContainer with all required data
  73. *
  74. * @param RequestInterface $request
  75. * @return SelectContainer
  76. * @throws \DomainException
  77. * @throws \InvalidArgumentException
  78. * @throws \Magento\Framework\Exception\LocalizedException
  79. */
  80. public function buildByRequest(RequestInterface $request)
  81. {
  82. $nonCustomAttributesFilters = [];
  83. $customAttributesFilters = [];
  84. $visibilityFilter = null;
  85. foreach ($this->filtersExtractor->extractFiltersFromQuery($request->getQuery()) as $filter) {
  86. if ($this->customAttributeFilterCheck->isCustom($filter)) {
  87. if ($filter->getField() === VisibilityFilter::VISIBILITY_FILTER_FIELD) {
  88. $visibilityFilter = clone $filter;
  89. } else {
  90. $customAttributesFilters[] = clone $filter;
  91. }
  92. } else {
  93. $nonCustomAttributesFilters[] = clone $filter;
  94. }
  95. }
  96. $data = [
  97. 'select' => $this->resource->getConnection()->select(),
  98. 'nonCustomAttributesFilters' => $nonCustomAttributesFilters,
  99. 'customAttributesFilters' => $customAttributesFilters,
  100. 'dimensions' => $request->getDimensions(),
  101. 'isFullTextSearchRequired' => $this->fullTextSearchCheck->isRequiredForQuery($request->getQuery()),
  102. 'isShowOutOfStockEnabled' => $this->isSetShowOutOfStockFlag(),
  103. 'usedIndex' => $request->getIndex()
  104. ];
  105. if ($visibilityFilter !== null) {
  106. $data['visibilityFilter'] = $visibilityFilter;
  107. }
  108. return $this->selectContainerFactory->create($data);
  109. }
  110. /**
  111. * Checks if show_out_of_stock flag is enabled in current configuration
  112. *
  113. * @return bool
  114. */
  115. private function isSetShowOutOfStockFlag()
  116. {
  117. return $this->scopeConfig->isSetFlag(
  118. 'cataloginventory/options/show_out_of_stock',
  119. ScopeInterface::SCOPE_STORE
  120. );
  121. }
  122. }