/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /**@var ReleaseDateCondition $criteriaPart */ $date = new \DateTime(); $intervalSpec = 'P' . $criteriaPart->getDays() . 'D'; $interval = new \DateInterval($intervalSpec); $dateNow = new \DateTime(); switch ($criteriaPart->getDirection()) { case ReleaseDateCondition::DIRECTION_FUTURE: $date->add($interval); $range = ['lte' => $date->format('Y-m-d'), 'gt' => $dateNow->format('Y-m-d')]; break; case ReleaseDateCondition::DIRECTION_PAST: $date->sub($interval); $range = ['gte' => $date->format('Y-m-d'), 'lte' => $dateNow->format('Y-m-d')]; break; default: return; } $filter = new RangeFilter('formattedReleaseDate', $range); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var ManufacturerCondition $criteriaPart */ $filter = new TermsFilter('manufacturer.id', $criteriaPart->getManufacturerIds()); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { $filter = new TermFilter('hasAvailableVariant', 1); /** @var ImmediateDeliveryCondition $criteriaPart */ if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var PropertyCondition $criteriaPart */ $filter = new TermsFilter('properties.id', $criteriaPart->getValueIds()); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var SalesCondition $criteriaPart */ $filter = new RangeFilter('sales', ['gt' => $criteriaPart->getMinSales()]); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { $filter = new TermFilter('shippingFree', 1); /** @var ShippingFreeCondition $criteriaPart */ if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var CategoryCondition $criteriaPart */ $filter = new TermsFilter('categoryIds', $criteriaPart->getCategoryIds()); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var VoteAverageCondition $criteriaPart */ $range = new RangeFilter('voteAverage.average', ['gte' => $criteriaPart->getAverage()]); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($range); } else { $search->addPostFilter($range); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var CustomerGroupCondition $criteriaPart */ $filter = new NotFilter(new TermsFilter('blockedCustomerGroupIds', $criteriaPart->getCustomerGroupIds())); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var HasPseudoPriceCondition $criteriaPart */ $field = $this->getPseudoPriceField($context); $filter = new RangeFilter($field, ['gt' => 0]); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /**@var CreateDateCondition $criteriaPart */ $date = new \DateTime(); $intervalSpec = 'P' . $criteriaPart->getDays() . 'D'; $interval = new \DateInterval($intervalSpec); $date->sub($interval); $filter = new RangeFilter('formattedCreatedAt', ['gte' => $date->format('Y-m-d')]); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { $range = []; /** @var SalesCondition $criteriaPart */ if ($criteriaPart->getMin() > 0) { $range['gte'] = (int) $criteriaPart->getMin(); } if ($criteriaPart->getMax() > 0) { $range['lte'] = (int) $criteriaPart->getMax(); } $filter = new RangeFilter('sales', $range); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { $field = $this->fieldMapping->getPriceField($context); $range = []; /** @var PriceCondition $criteriaPart */ if ($criteriaPart->getMinPrice()) { $range['gte'] = $criteriaPart->getMinPrice(); } if ($criteriaPart->getMaxPrice()) { $range['lte'] = $criteriaPart->getMaxPrice(); } $filter = new RangeFilter($field, $range); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function modifySearch(Search $search, FilterState $state = null, SearchRequest $request = null) { if ($state && $state->isActive()) { $search->addPostFilter(new TermsQuery($this->getField(), $state->getValue(), ['execution' => 'and']), 'must_not'); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var ProductAttributeCondition $criteriaPart */ $field = 'attributes.core.' . $criteriaPart->getField(); switch ($criteriaPart->getOperator()) { case ProductAttributeCondition::OPERATOR_EQ: $filter = new TermFilter($field, $criteriaPart->getValue()); break; case ProductAttributeCondition::OPERATOR_NEQ: $filter = new NotFilter(new TermFilter($field, $criteriaPart->getValue())); break; case ProductAttributeCondition::OPERATOR_LT: $filter = new RangeFilter($field, ['lt' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_LTE: $filter = new RangeFilter($field, ['lte' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_BETWEEN: $value = $criteriaPart->getValue(); $filter = new RangeFilter($field, ['gte' => $value['min'], 'lte' => $value['max']]); break; case ProductAttributeCondition::OPERATOR_GT: $filter = new RangeFilter($field, ['gt' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_GTE: $filter = new RangeFilter($field, ['gte' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_IN: $filter = new TermsFilter($field, $criteriaPart->getValue()); break; case ProductAttributeCondition::OPERATOR_STARTS_WITH: case ProductAttributeCondition::OPERATOR_ENDS_WITH: case ProductAttributeCondition::OPERATOR_CONTAINS: $filter = new QueryFilter(new TermFilter($field, $criteriaPart->getValue())); break; default: return; } if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }