29 private $selectContainerFactory;
34 private $fullTextSearchCheck;
39 private $customAttributeFilterCheck;
44 private $filtersExtractor;
65 SelectContainerFactory $selectContainerFactory,
72 $this->selectContainerFactory = $selectContainerFactory;
73 $this->fullTextSearchCheck = $fullTextSearchCheck;
74 $this->customAttributeFilterCheck = $customAttributeFilterCheck;
75 $this->filtersExtractor = $filtersExtractor;
76 $this->scopeConfig = $scopeConfig;
91 $nonCustomAttributesFilters = [];
92 $customAttributesFilters = [];
93 $visibilityFilter =
null;
95 foreach ($this->filtersExtractor->extractFiltersFromQuery(
$request->getQuery()) as $filter) {
96 if ($this->customAttributeFilterCheck->isCustom($filter)) {
98 $visibilityFilter = clone $filter;
100 $customAttributesFilters[] = clone $filter;
103 $nonCustomAttributesFilters[] = clone $filter;
108 'select' => $this->resource->getConnection()->select(),
109 'nonCustomAttributesFilters' => $nonCustomAttributesFilters,
110 'customAttributesFilters' => $customAttributesFilters,
111 'dimensions' =>
$request->getDimensions(),
112 'isFullTextSearchRequired' => $this->fullTextSearchCheck->isRequiredForQuery(
$request->getQuery()),
113 'isShowOutOfStockEnabled' => $this->isSetShowOutOfStockFlag(),
117 if ($visibilityFilter !==
null) {
118 $data[
'visibilityFilter'] = $visibilityFilter;
121 return $this->selectContainerFactory->create(
$data);
129 private function isSetShowOutOfStockFlag()
131 return $this->scopeConfig->isSetFlag(
132 'cataloginventory/options/show_out_of_stock',
buildByRequest(RequestInterface $request)
const VISIBILITY_FILTER_FIELD
__construct(SelectContainerFactory $selectContainerFactory, FullTextSearchCheck $fullTextSearchCheck, CustomAttributeFilterCheck $customAttributeFilterCheck, FiltersExtractor $filtersExtractor, ScopeConfigInterface $scopeConfig, ResourceConnection $resource)