/** * Applies filter to query by attribute * * @param FilterDatasourceAdapterInterface $ds * @param string $field * @param mixed $value * @param string $operator */ public function applyFilterByAttribute(FilterDatasourceAdapterInterface $ds, $field, $value, $operator) { $attribute = $this->getAttribute($field); $productQueryBuilder = $this->getProductRepository()->getProductQueryBuilder($ds->getQueryBuilder()); if ($attribute) { $productQueryBuilder->addAttributeFilter($attribute, $operator, $value); } else { $productQueryBuilder->addFieldFilter($field, $operator, $value); } }
/** * {@inheritdoc} */ public function apply(FilterDatasourceAdapterInterface $ds, $data) { $data = $this->parseData($data); if (!$data) { return false; } $ids = $data['value']; $qb = $ds->getQueryBuilder(); $repository = $this->util->getProductRepository(); $pqb = $repository->getProductQueryBuilder($qb); $pqb->addFieldFilter('family', 'IN', $ids); return true; }
/** * {@inheritdoc} */ public function apply(FilterDatasourceAdapterInterface $ds, $data) { $data = $this->parseData($data); if (!$data) { return false; } $qb = $ds->getQueryBuilder(); $value = current($data['value']); $repository = $this->util->getProductRepository(); $pqb = $repository->getProductQueryBuilder($qb); $pqb->addFieldFilter('enabled', '=', $value); return true; }
/** * {@inheritdoc} */ public function apply(FilterDatasourceAdapterInterface $ds, $data) { $data = $this->parseData($data); if (!$data) { return false; } $associationType = $this->getAssociationType(); $product = $this->getCurrentProduct(); $productIds = $this->getAssociatedProductIds($product, $associationType); $operator = $data['value'] === BooleanFilterType::TYPE_YES ? 'IN' : 'NOT IN'; $qb = $ds->getQueryBuilder(); $repository = $this->util->getProductRepository(); $pqb = $repository->getProductQueryBuilder($qb); $pqb->addFieldFilter('id', $operator, $productIds); return true; }
/** * {@inheritdoc} */ public function apply(FilterDatasourceAdapterInterface $ds, $data) { $data = $this->parseData($data); if (!$data) { return false; } $groupId = $this->extractor->getDatagridParameter('currentGroup'); if (!$groupId) { throw new \LogicException('The current product group must be configured'); } $value = [$groupId]; $operator = $data['value'] === BooleanFilterType::TYPE_YES ? 'IN' : 'NOT IN'; $qb = $ds->getQueryBuilder(); $repository = $this->util->getProductRepository(); $pqb = $repository->getProductQueryBuilder($qb); $pqb->addFieldFilter('groups', $operator, $value); return true; }
/** * {@inheritdoc} */ public function apply(FilterDatasourceAdapterInterface $ds, $data) { $data = $this->parseData($data); if (!$data) { return false; } $qb = $ds->getQueryBuilder(); switch ($data['value']) { case BooleanFilterType::TYPE_YES: $operator = '='; break; case BooleanFilterType::TYPE_NO: default: $operator = '<'; break; } $repository = $this->util->getProductRepository(); $pqb = $repository->getProductQueryBuilder($qb); $pqb->addFieldFilter('completeness', $operator, '100'); return true; }
/** * Add filter to display categorized products * * @param FilterDatasourceAdapterInterface $ds * @param array $data * * @return boolean has been applied */ protected function applyFilterByCategory(FilterDatasourceAdapterInterface $ds, $data) { $categoryRepository = $this->manager->getCategoryRepository(); $productRepository = $this->manager->getProductCategoryRepository(); $qb = $ds->getQueryBuilder(); $category = $categoryRepository->find($data['categoryId']); if (!$category) { $category = $categoryRepository->find($data['treeId']); } if ($category) { $productIds = $this->getProductIdsInCategory($category, $data); $productRepository->applyFilterByIds($qb, $productIds, true); return true; } return false; }