Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AdvancedFilterProcessor.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
20 
39 {
43  private $customConditionProvider;
44 
48  private $defaultConditionProcessor;
49 
53  private $conditionManager;
54 
60  public function __construct(
61  CustomConditionInterface $defaultConditionProcessor,
62  ConditionManager $conditionManager,
63  CustomConditionProviderInterface $customConditionProvider
64  ) {
65  $this->defaultConditionProcessor = $defaultConditionProcessor;
66  $this->conditionManager = $conditionManager;
67  $this->customConditionProvider = $customConditionProvider;
68  }
69 
78  {
79  foreach ($searchCriteria->getFilterGroups() as $group) {
80  $conditions = $this->getConditionsFromFilterGroup($group);
81  $collection->getSelect()->where($conditions);
82  }
83  }
84 
92  private function getConditionsFromFilterGroup(CombinedFilterGroup $filterGroup): string
93  {
94  $conditions = [];
95 
96  foreach ($filterGroup->getFilters() as $filter) {
97  if ($filter instanceof CombinedFilterGroup) {
98  $conditions[] = $this->getConditionsFromFilterGroup($filter);
99  continue;
100  }
101 
102  if ($filter instanceof Filter) {
103  $conditions[] = $this->getConditionsFromFilter($filter);
104  continue;
105  }
106 
107  throw new InputException(
108  new Phrase('Undefined filter group "%1" passed in.', [get_class($filter)])
109  );
110  }
111 
112  return $this->conditionManager->wrapBrackets(
113  $this->conditionManager->combineQueries($conditions, $filterGroup->getCombinationMode())
114  );
115  }
116 
122  private function getConditionsFromFilter(Filter $filter): string
123  {
124  if ($this->customConditionProvider->hasProcessorForField($filter->getField())) {
125  $customProcessor = $this->customConditionProvider->getProcessorByField($filter->getField());
126  return $customProcessor->build($filter);
127  }
128 
129  return $this->defaultConditionProcessor->build($filter);
130  }
131 }
process(SearchCriteriaInterface $searchCriteria, AbstractDb $collection)
$group
Definition: sections.phtml:16
__construct(CustomConditionInterface $defaultConditionProcessor, ConditionManager $conditionManager, CustomConditionProviderInterface $customConditionProvider)
$searchCriteria