/** * Apply modifiers for filters * * @param DataProviderInterface $dataProvider * @param string $filterName * @return void * @throws \Magento\Framework\Exception\LocalizedException */ public function applyFilterModifier(DataProviderInterface $dataProvider, $filterName) { $filterModifier = $this->request->getParam(self::FILTER_MODIFIER); if (isset($filterModifier[$filterName]['condition_type'])) { $conditionType = $filterModifier[$filterName]['condition_type']; if (!in_array($conditionType, $this->allowedConditionTypes)) { throw new \Magento\Framework\Exception\LocalizedException(__('Condition type "%1" is not allowed', $conditionType)); } $value = isset($filterModifier[$filterName]['value']) ? $filterModifier[$filterName]['value'] : null; $filter = $this->filterBuilder->setConditionType($conditionType)->setField($filterName)->setValue($value)->create(); $dataProvider->addFilter($filter); } }
/** * Creates a filter DTO for given field/condition * * @param string $field Field for new filter * @param string|array $condition Condition for new filter. * @return Filter */ protected function createFilterData($field, $condition) { $this->filterBuilder->setField($field); if (is_array($condition)) { $this->filterBuilder->setValue(reset($condition)); $this->filterBuilder->setConditionType(key($condition)); } else { // not an array, just use eq as condition type and given value $this->filterBuilder->setConditionType('eq'); $this->filterBuilder->setValue($condition); } return $this->filterBuilder->create(); }
/** * Apply selection by Excluded Included to Search Result * * @throws LocalizedException * @return void */ public function applySelectionOnTargetProvider() { $selected = $this->request->getParam(static::SELECTED_PARAM); $excluded = $this->request->getParam(static::EXCLUDED_PARAM); if ('false' === $excluded) { return; } $component = $this->getComponent(); $this->prepareComponent($component); $dataProvider = $component->getContext()->getDataProvider(); try { if (is_array($excluded) && !empty($excluded)) { $this->filterBuilder->setConditionType('nin')->setField($dataProvider->getPrimaryFieldName())->setValue($excluded); $dataProvider->addFilter($this->filterBuilder->create()); } elseif (is_array($selected) && !empty($selected)) { $this->filterBuilder->setConditionType('in')->setField($dataProvider->getPrimaryFieldName())->setValue($selected); $dataProvider->addFilter($this->filterBuilder->create()); } } catch (\Exception $e) { throw new LocalizedException(__($e->getMessage())); } }