6 declare(strict_types=1);
25 private $filterBuilder;
28 private $filterGroupBuilder;
38 $this->filterBuilder = $filterBuilder;
39 $this->filterGroupBuilder = $filterGroupBuilder;
53 $searchCriteriaFilterGroups = [];
55 foreach (
$filters->getConditions() as $filter) {
60 if ($filter instanceof Clause) {
61 $searchCriteriaFilterGroups[] = $this->processClause($filter);
62 }
elseif ($filter instanceof Connective) {
63 $searchCriteriaFilterGroups[] = $this->processConnective($filter);
65 throw new GraphQlInputException(
new Phrase(
'Nesting "OR" node type not supported'));
69 return $searchCriteriaFilterGroups;
79 private function processConnective(Connective $connective) : FilterGroup
81 foreach ($connective->getConditions() as $subNode) {
82 if ($subNode instanceof Clause) {
83 $subFilter = $this->filterBuilder
84 ->setField($subNode->getFieldName())
85 ->setValue($subNode->getClauseValue())
86 ->setConditionType($subNode->getClauseType())
89 $this->filterGroupBuilder->addFilter($subFilter);
90 }
elseif ($subNode instanceof Connective) {
95 if (((
string)$subNode->getOperator()) ==
'OR') {
96 return $this->processConnective($subNode);
98 throw new GraphQlInputException(
99 new Phrase(
'Sub nesting of %1 is not supported', [$subNode->getOperator()])
104 return $this->filterGroupBuilder->create();
113 private function processClause(Clause $clause)
115 $searchCriteriaFilter = $this->filterBuilder
116 ->setField($clause->getFieldName())
117 ->setValue($clause->getClauseValue())
118 ->setConditionType($clause->getClauseType())
121 $this->filterGroupBuilder->addFilter($searchCriteriaFilter);
122 return $this->filterGroupBuilder->create();
elseif(isset( $params[ 'redirect_parent']))
__construct(\Magento\Framework\Api\FilterBuilder $filterBuilder, \Magento\Framework\Api\Search\FilterGroupBuilder $filterGroupBuilder)