60 parent::__construct($entityFactory);
112 if (is_array($field) && is_array($condition) &&
count($field) !=
count($condition)) {
115 'The field array failed to pass. The array must have a matching condition array.' 118 }
elseif (is_array($field) && !
count($field) > 0) {
121 'The array of fields failed to pass. The array must include at one field.' 125 $this->processFilters($field, $condition);
135 private function processFilters($field, $condition)
138 $requiresMultipleFilterGroups =
false;
139 if (is_array($field) && is_array($condition)) {
140 foreach ($condition as $cond) {
141 if (is_array($cond) &&
count($cond) > 1) {
142 $requiresMultipleFilterGroups =
true;
146 }
elseif (is_array($condition)) {
147 $requiresMultipleFilterGroups =
true;
150 if ($requiresMultipleFilterGroups) {
151 $this->addFilterGroupsForMultipleConditions($field, $condition);
153 $this->addFilterGroupsForSingleConditions($field, $condition);
164 private function addFilterGroupsForSingleConditions($field, $condition)
166 $this->fieldFilters[] = [
'field' => $field,
'condition' => $condition];
176 private function addFilterGroupsForMultipleConditions($field, $condition)
178 if (!is_array($field) && is_array($condition)) {
179 foreach ($condition as $key =>
$value) {
180 $this->fieldFilters[] = [
'field' => $field,
'condition' => [$key =>
$value]];
184 foreach ($condition as $cond) {
185 if (is_array($cond)) {
187 foreach ($cond as $condKey => $condValue) {
188 $this->fieldFilters[] = [
189 'field' => array_slice($field, $cnt, 1,
true),
190 'condition' => [$condKey => $condValue]
194 $this->fieldFilters[] = [
'field' => array_slice($field, $cnt, 1,
true),
'condition' => $cond];
207 protected function getSearchCriteria()
209 foreach ($this->fieldFilters as $filter) {
213 if (!is_array($filter[
'field'])) {
215 $filterGroup = [$this->
createFilterData($filter[
'field'], $filter[
'condition'])];
217 foreach ($filter[
'field'] as
$index => $field) {
221 $this->searchCriteriaBuilder->addFilters($filterGroup);
223 foreach ($this->_orders as $field => $direction) {
227 $sortOrder = $this->sortOrderBuilder->setField($field)->setDirection($direction)->create();
228 $this->searchCriteriaBuilder->addSortOrder($sortOrder);
230 $this->searchCriteriaBuilder->setCurrentPage($this->_curPage);
231 $this->searchCriteriaBuilder->setPageSize($this->_pageSize);
232 return $this->searchCriteriaBuilder->create();
244 $this->filterBuilder->setField($field);
246 if (is_array($condition)) {
247 $this->filterBuilder->setValue(reset($condition));
248 $this->filterBuilder->setConditionType(key($condition));
251 $this->filterBuilder->setConditionType(
'eq');
252 $this->filterBuilder->setValue($condition);
254 return $this->filterBuilder->create();
addFieldToFilter($field, $condition)
elseif(isset( $params[ 'redirect_parent']))
createFilterData($field, $condition)
__construct(EntityFactoryInterface $entityFactory, FilterBuilder $filterBuilder, SearchCriteriaBuilder $searchCriteriaBuilder, SortOrderBuilder $sortOrderBuilder)