/** * {@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 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 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) { $filter = new TermFilter('hasAvailableVariant', 1); /** @var ImmediateDeliveryCondition $criteriaPart */ if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * Traces the search result into the s_statistic_search * * @param Criteria $criteria * @param ProductNumberSearchResult $result * @param Shop $shop */ public function logResult(Criteria $criteria, ProductNumberSearchResult $result, Shop $shop) { if (!$criteria->hasCondition('search')) { return; } /* @var $condition SearchTermCondition */ $condition = $criteria->getCondition('search'); $now = new \DateTime(); $this->connection->insert('s_statistics_search', ['datum' => $now->format('Y-m-d H:i:s'), 'searchterm' => $condition->getTerm(), 'results' => $result->getTotalCount(), 'shop_id' => $shop->getId()]); }
/** * {@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) { /** @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('shippingFree', 1); /** @var ShippingFreeCondition $criteriaPart */ if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * @inheritdoc */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { if ($request->has('esd')) { $criteria->addCondition(new EsdCondition()); } if ($request->get('sSort') == 'random') { $criteria->addSorting(new RandomSorting()); } $criteria->addFacet(new EsdFacet()); }
/** * {@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 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 HasPseudoPriceCondition $criteriaPart */ $field = $this->getPseudoPriceField($context); $filter = new RangeFilter($field, ['gt' => 0]); if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
public function testConditionOverwrite() { $criteria = new Criteria(); $criteria->addCondition(new CategoryCondition(array(1))); $condition = new CategoryCondition(array(3)); $criteria->addCondition($condition); $this->assertCount(1, $criteria->getConditions()); $condition = $criteria->getCondition($condition->getName()); $this->assertInstanceOf('Shopware\\Bundle\\SearchBundle\\Condition\\CategoryCondition', $condition); $this->assertEquals(array(3), $condition->getCategoryIds()); }
public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { $minSales = $request->getParam('minSales', null); $maxSales = $request->getParam('maxSales', null); if ($minSales || $maxSales) { $criteria->addCondition(new SalesCondition($minSales, $maxSales)); } $criteria->addFacet(new SalesFacet()); if ($request->getParams('sSort') == 'sales') { $criteria->resetSorting(); $criteria->addSorting(new SalesSorting()); } }
private function searchBlog(Criteria $criteria, Struct\ProductContextInterface $context) { /**@var $condition SearchTermCondition*/ $condition = $criteria->getCondition('search'); $query = $this->createMultiMatchQuery($condition); $search = new Search(); $search->addQuery($query); $search->setFrom(0)->setSize(5); $index = $this->indexFactory->createShopIndex($context->getShop()); $params = ['index' => $index->getName(), 'type' => 'blog', 'body' => $search->toArray()]; $raw = $this->client->search($params); return $this->createBlogStructs($raw); }
/** * {@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 loadPreviewAction() { $conditions = $this->Request()->getParam('conditions'); $conditions = json_decode($conditions, true); $sorting = $this->Request()->getParam('sort'); $criteria = new Criteria(); /** @var RepositoryInterface $streamRepo */ $streamRepo = $this->get('shopware_product_stream.repository'); $sorting = $streamRepo->unserialize($sorting); foreach ($sorting as $sort) { $criteria->addSorting($sort); } $conditions = $streamRepo->unserialize($conditions); foreach ($conditions as $condition) { $criteria->addCondition($condition); } $criteria->offset($this->Request()->getParam('start', 0)); $criteria->limit($this->Request()->getParam('limit', 20)); $context = $this->createContext($this->Request()->getParam('shopId'), $this->Request()->getParam('currencyId'), $this->Request()->getParam('customerGroupKey')); $criteria->addBaseCondition(new CustomerGroupCondition([$context->getCurrentCustomerGroup()->getId()])); $category = $context->getShop()->getCategory()->getId(); $criteria->addBaseCondition(new CategoryCondition([$category])); $result = Shopware()->Container()->get('shopware_search.product_search')->search($criteria, $context); $products = array_values($result->getProducts()); $this->View()->assign(['success' => true, 'data' => $products, 'total' => $result->getTotalCount()]); }
/** * @param Request $request * @param Criteria $criteria * @param ShopContextInterface $context */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { $criteria->addFacet(new ProductVariantFacet()); if (!$this->requestAdapater->hasVariantIds()) { return; } if (!$this->requestAdapater->isMultiDimensional()) { return; } $selectedOptions = $this->requestAdapater->getRequestedVariantIds(); if (!$selectedOptions) { return; } $criteria->addCondition(new ProductVariantCondition($selectedOptions)); }
/** * @inheritdoc */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { /* * Checks if the filter is active */ if ($request->has('productAttributesForm')) { $params = $request->getParams(); $searchParams = explode('|', $params['productAttributesForm']); $criteria->addCondition(new ProductAttributeCondition('attr1', ProductAttributeCondition::OPERATOR_IN, $searchParams)); } /** * adds the attributes facet */ $criteria->addFacet(new ProductAttributeFacet('attr1', ProductAttributeFacet::MODE_VALUE_LIST_RESULT, 'productAttributesForm', 'attributes')); }
/** * @param Criteria $criteria * @param $data * @return array */ private function getActiveValues(Criteria $criteria, $data) { $actives = ['min' => $data['min'], 'max' => $data['max']]; /** @var SalesCondition $condition */ if (!($condition = $criteria->getCondition('swag_es_product_sales'))) { return $actives; } if ($condition->getMin()) { $actives['min'] = $condition->getMin(); } if ($condition->getMax()) { $actives['max'] = $condition->getMax(); } return $actives; }
/** * Generates the facet data for the passed query, criteria and context object. * * @param FacetInterface|VoteAverageFacet $facet * @param Criteria $criteria * @param Struct\ShopContextInterface $context * @return \Shopware\Bundle\SearchBundle\FacetResult\RadioFacetResult|null */ public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context) { $queryCriteria = clone $criteria; $queryCriteria->resetConditions(); $queryCriteria->resetSorting(); $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context); $query->resetQueryPart('orderBy'); $query->resetQueryPart('groupBy'); if (!$query->hasState(VoteAverageCondition::STATE_INCLUDES_VOTE_TABLE)) { $query->innerJoin('product', 's_articles_vote', 'vote', 'vote.articleID = product.id'); } $query->select('COUNT(vote.id) as hasVotes'); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $data = $statement->fetch(\PDO::FETCH_COLUMN); if (!$data) { return null; } $activeAverage = null; if ($criteria->hasCondition($facet->getName())) { /**@var $condition VoteAverageCondition*/ $condition = $criteria->getCondition($facet->getName()); $activeAverage = $condition->getAverage(); } $values = [new ValueListItem(1, '', $activeAverage == 1), new ValueListItem(2, '', $activeAverage == 2), new ValueListItem(3, '', $activeAverage == 3), new ValueListItem(4, '', $activeAverage == 4), new ValueListItem(5, '', $activeAverage == 5)]; return new RadioFacetResult($facet->getName(), $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Ranking'), $values, $this->fieldName, [], 'frontend/listing/filter/facet-rating.tpl'); }
/** * @param Request $request * @param Criteria $criteria */ private function addPropertyCondition(Request $request, Criteria $criteria) { $filters = $request->getParam('sFilterProperties', []); if (empty($filters)) { return; } $filters = explode('|', $filters); $filters = $this->getGroupedFilters($filters); if (empty($filters)) { return; } foreach ($filters as $filter) { $condition = new PropertyCondition($filter); $criteria->addCondition($condition); } }
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); } }
/** * Extends the query criteria query to generate enough data for the servicees * * @param FacetInterface $facet * @param Criteria $criteria * @param Struct\ShopContextInterface $context * @return null|FacetResultInterface|FacetResultInterface[] */ public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context) { $activeOptions = array(); $productVariantCondition = $criteria->getCondition('swag-variant-filter-product-variant'); if ($productVariantCondition && $productVariantCondition instanceof ProductVariantCondition) { $activeOptions = $productVariantCondition->getProductVariantIds(ProductVariantCondition::FORMAT_FLAT); } $queryCriteria = clone $criteria; $queryCriteria->resetConditions(); $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context); $query->select('configuratorOptionRelations.option_id')->innerJoin('product', 's_articles_details', 'variantFilterDetails', 'variantFilterDetails.articleID = product.id')->innerJoin('variantFilterDetails', 's_article_configurator_option_relations', 'configuratorOptionRelations', 'configuratorOptionRelations.article_id = variantFilterDetails.id')->groupBy('configuratorOptionRelations.option_id'); $ids = (array) $query->execute()->fetchAll(\PDO::FETCH_COLUMN); $filterConditions = $this->productVariantService->getFilterConditions($ids, $activeOptions); if (!$filterConditions) { return null; } return new ProductVariantFacetResult($filterConditions, $this->snippetNamespace->get('FilterHeadlineVariants', 'Variantfilter')); }
/** * @inheritdoc */ public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context) { //resets all conditions of the criteria to execute a facet query without user filters. $queryCriteria = clone $criteria; $queryCriteria->resetConditions(); $queryCriteria->resetSorting(); $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context); $query->innerJoin('product', 's_articles_esd', 'esd', 'esd.articleID = product.id'); $query->select('product.id')->setMaxResults(1); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $total = $statement->fetch(\PDO::FETCH_COLUMN); //found some esd products? if ($total <= 0) { return null; } $snippetNamespace = $this->snippetManager->getNamespace('frontend/listing/facet_labels'); return new BooleanFacetResult($facet->getName(), 'esd', $criteria->hasCondition($facet->getName()), $snippetNamespace->get('swag_search_bundle_esd_only', 'Only downloads')); }
/** * @param Request $request * @param Criteria $criteria * @param ShopContextInterface $context */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { $requestedCategoryId = $request->getParam('sCategory', $request->getParam('categoryId', false)); if (!$requestedCategoryId) { return; } $closestIdWithRules = $this->databaseAdapter->fetchClosestCategoryIdWithRule($requestedCategoryId); if (!$closestIdWithRules) { return; } $this->enabled = true; if ($request->sSort && $request->sSort != self::REQUEST_VALUE) { return; } $request->setParam('sSort', self::REQUEST_VALUE); $rules = $this->ruleHydrator->createRuleVos($this->databaseAdapter->fetchRawData($closestIdWithRules)); $criteria->resetSorting(); $criteria->addSorting(new DefaultSorting($rules)); }
/** * Generates the facet data for the passed query, criteria and context object. * * @param FacetInterface|Facet\ShippingFreeFacet $facet * @param Criteria $criteria * @param ShopContextInterface $context * @return BooleanFacetResult */ public function generateFacet(FacetInterface $facet, Criteria $criteria, ShopContextInterface $context) { $queryCriteria = clone $criteria; $queryCriteria->resetConditions(); $queryCriteria->resetSorting(); $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context); $query->resetQueryPart('orderBy'); $query->resetQueryPart('groupBy'); $query->select('product.id')->andWhere('variant.shippingfree = 1')->setMaxResults(1); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $total = $statement->fetch(\PDO::FETCH_COLUMN); if ($total <= 0) { return null; } return new BooleanFacetResult($facet->getName(), $this->fieldName, $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Shipping free')); }
/** * {@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); } }
/** * Generates the facet data for the passed query, criteria and context object. * * @param FacetInterface|Facet\ShippingFreeFacet $facet * @param Criteria $criteria * @param ShopContextInterface $context * @return BooleanFacetResult */ public function generateFacet(FacetInterface $facet, Criteria $criteria, ShopContextInterface $context) { $queryCriteria = clone $criteria; $queryCriteria->resetConditions(); $queryCriteria->resetSorting(); $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context); $query->resetQueryPart('orderBy'); $query->resetQueryPart('groupBy'); if (!$query->hasState(ImmediateDeliveryConditionHandler::STATE_INCLUDES_ALL_VARIANTS)) { $query->innerJoin('product', 's_articles_details', 'allVariants', 'allVariants.articleID = product.id AND allVariants.active = 1 AND allVariants.instock >= allVariants.minpurchase'); $query->addState(ImmediateDeliveryConditionHandler::STATE_INCLUDES_ALL_VARIANTS); } $query->select('product.id')->setMaxResults(1); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $total = $statement->fetch(\PDO::FETCH_COLUMN); if ($total <= 0) { return null; } return new BooleanFacetResult($facet->getName(), $this->fieldName, $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Immediate delivery')); }