Пример #1
0
 /**
  * {@inheritDoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $this->auditAlias = $ds->generateParameterName('a');
     $this->auditFieldAlias = $ds->generateParameterName('f');
     $this->fieldParam = $ds->generateParameterName('field');
     $this->objectClassParam = $ds->generateParameterName('objectClass');
     if (!$ds instanceof OrmFilterDatasourceAdapter) {
         throw new LogicException(sprintf('"Oro\\Bundle\\FilterBundle\\Datasource\\Orm\\OrmFilterDatasourceAdapter" expected but "%s" given.', get_class($ds)));
     }
     $qb = $ds->getQueryBuilder();
     $fieldName = $this->getField($data['auditFilter']['columnName']);
     list($objectAlias) = $qb->getRootAliases();
     $objectClass = $this->getClass($data['auditFilter']['columnName'], $qb->getRootEntities());
     $metadata = $qb->getEntityManager()->getClassMetadata($objectClass);
     if ($metadata->isIdentifierComposite) {
         throw new \LogicException('Composite identifiers are not supported.');
     }
     $identifier = $metadata->getIdentifier()[0];
     $auditQb = $qb->getEntityManager()->getRepository('OroDataAuditBundle:Audit')->createQueryBuilder($this->auditAlias);
     $auditQb->select('1')->andWhere(sprintf('%s.objectClass = :%s', $this->auditAlias, $this->objectClassParam))->andWhere(sprintf('%s.objectId = %s.%s', $this->auditAlias, $objectAlias, $identifier))->setParameter($this->objectClassParam, $objectClass)->setMaxResults(1);
     $auditQb->join(sprintf('%s.fields', $this->auditAlias), $this->auditFieldAlias, Expr\Join::WITH, sprintf('%s.field = :%s', $this->auditFieldAlias, $this->fieldParam))->setParameter($this->fieldParam, $fieldName);
     $auditDs = new OrmFilterDatasourceAdapter($auditQb);
     $this->applyFilter($auditDs, 'datetime', sprintf('%s.loggedAt', $this->auditAlias), $data['auditFilter']['data']);
     $this->applyNewAuditValueFilter($auditDs, $objectClass, $fieldName, $data);
     $this->applyFilterToClause($ds, $ds->expr()->exists($auditQb->getQuery()->getDQL()));
     foreach ($auditQb->getParameters() as $parameter) {
         $qb->setParameter($parameter->getName(), $parameter->getValue(), $parameter->getType());
     }
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->dateFilterUtility->parseData($this->get(FilterUtility::DATA_NAME_KEY), $data);
     if (!$data) {
         return false;
     }
     $dateStartValue = $data['date_start'];
     $dateEndValue = $data['date_end'];
     $startDateParameterName = $ds->generateParameterName($this->getName());
     $endDateParameterName = $ds->generateParameterName($this->getName());
     $this->applyDependingOnType($data['type'], $ds, $dateStartValue, $dateEndValue, $startDateParameterName, $endDateParameterName, $data['field']);
     if (null !== $dateStartValue) {
         $ds->setParameter($startDateParameterName, $dateStartValue);
     }
     if (null !== $dateEndValue) {
         $ds->setParameter($endDateParameterName, $dateEndValue);
     }
     return true;
 }
Пример #3
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $this->activityAlias = $ds->generateParameterName('r');
     $this->activityListAlias = $ds->generateParameterName('a');
     if (!$ds instanceof OrmFilterDatasourceAdapter) {
         throw new LogicException(sprintf('"Oro\\Bundle\\FilterBundle\\Datasource\\Orm\\OrmFilterDatasourceAdapter" expected but "%s" given.', get_class($ds)));
     }
     $type = $data['filterType'];
     unset($data['filterType']);
     $qb = $ds->getQueryBuilder();
     $em = $qb->getEntityManager();
     $metadata = $em->getClassMetadata($data['entityClassName']);
     $activityQb = $this->createActivityQueryBuilder($em, $data, $this->getIdentifier($metadata));
     $activityPart = $ds->expr()->exists($activityQb->getQuery()->getDQL());
     if ($type === static::TYPE_HAS_NOT_ACTIVITY) {
         $activityPart = $ds->expr()->not($activityPart);
     }
     $this->applyFilterToClause($ds, $activityPart);
     $this->copyParameters($activityQb, $qb);
 }
Пример #4
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $operator = $this->getOperator($data['type']);
     $parameterName = $ds->generateParameterName($this->getName());
     $this->applyFilterToClause($ds, $ds->expr()->comparison($this->get(FilterUtility::DATA_NAME_KEY), $operator, $parameterName, true));
     $ds->setParameter($parameterName, $data['value']);
     return true;
 }
Пример #5
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $type = $data['type'];
     $parameterName = $ds->generateParameterName($this->getName());
     $this->applyFilterToClause($ds, $this->buildComparisonExpr($ds, $type, $this->get(FilterUtility::DATA_NAME_KEY), $parameterName));
     if (!in_array($type, [FilterUtility::TYPE_EMPTY, FilterUtility::TYPE_NOT_EMPTY])) {
         $ds->setParameter($parameterName, $data['value']);
     }
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $operator = $this->getOperator($data['type']);
     $ds->generateParameterName($this->getName());
     $data['data'] = $data['value'];
     unset($data['value']);
     unset($data['type']);
     $this->util->applyFilter($ds, $this->get(ProductFilterUtility::DATA_NAME_KEY), $operator, $data);
     return true;
 }
Пример #7
0
 /**
  * {@inheritDoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $type = $data['type'];
     if (count($data['value']) > 1 || isset($data['value'][0]) && $data['value'][0] != "") {
         $parameterName = $ds->generateParameterName($this->getName());
         $this->applyFilterToClause($ds, $this->get(FilterUtility::DATA_NAME_KEY) . ' in (:' . $parameterName . ')');
         if (!in_array($type, [FilterUtility::TYPE_EMPTY, FilterUtility::TYPE_NOT_EMPTY], true)) {
             $ds->setParameter($parameterName, $data['value']);
         }
     }
     return true;
 }
Пример #8
0
 /**
  * {@inheritDoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $type = $data['type'];
     if (count($data['value']) > 1 || isset($data['value'][0]) && $data['value'][0] != "") {
         $parameterName = $ds->generateParameterName($this->getName());
         $qb2 = $this->registry->getManager()->getRepository('Oro\\Bundle\\UserBundle\\Entity\\User')->createQueryBuilder('u')->select('u.id')->leftJoin('u.businessUnits', 'bu')->where('bu.id in (:' . $parameterName . ')')->getQuery()->getDQL();
         $this->applyFilterToClause($ds, $this->get(FilterUtility::DATA_NAME_KEY) . ' in (' . $qb2 . ')');
         if (!in_array($type, [FilterUtility::TYPE_EMPTY, FilterUtility::TYPE_NOT_EMPTY], true)) {
             $ds->setParameter($parameterName, $data['value']);
         }
     }
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $operator = $this->getOperator($data['type']);
     $parameter = $ds->generateParameterName($this->getName());
     if ('IN' == $operator) {
         $expression = $ds->expr()->in($this->get(FilterUtility::DATA_NAME_KEY), $parameter, true);
     } else {
         $expression = $ds->expr()->notIn($this->get(FilterUtility::DATA_NAME_KEY), $parameter, true);
     }
     $this->applyFilterToClause($ds, $expression);
     $ds->setParameter($parameter, $data['value']);
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $operator = $this->getOperator($data['type']);
     $ds->generateParameterName($this->getName());
     // Convert value to base unit
     if ('EMPTY' !== $operator) {
         $this->converter->setFamily($this->family);
         $baseValue = $this->converter->convertBaseToStandard($data['unit'], $data['value']);
     } else {
         $baseValue = null;
     }
     $this->util->applyFilterByAttribute($ds, $this->get(ProductFilterUtility::DATA_NAME_KEY), $baseValue, $operator);
     return true;
 }
Пример #11
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $this->ds = $ds;
     $data = $this->parseData($data);
     $this->ds = null;
     if (!$data) {
         return false;
     }
     $type = $data['type'];
     $values = is_array($data['value']) ? $data['value'] : [$data['value']];
     foreach ($values as $value) {
         $parameterName = $ds->generateParameterName($this->getName());
         $this->applyFilterToClause($ds, $this->buildComparisonExpr($ds, $type, $this->getFieldExpr($type), $parameterName));
         if (!in_array($type, [FilterUtility::TYPE_EMPTY, FilterUtility::TYPE_NOT_EMPTY])) {
             $ds->setParameter($parameterName, $value);
         }
     }
     return true;
 }
Пример #12
0
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     if ($data['in'] !== null) {
         if (!empty($data['in'])) {
             $parameterName = $ds->generateParameterName($this->getName());
             $this->applyFilterToClause($ds, $ds->expr()->in($this->get(FilterUtility::DATA_NAME_KEY), $parameterName, true));
             $ds->setParameter($parameterName, $data['in']);
         } else {
             // requested to return all selected rows, but no one row are selected
             $this->applyFilterToClause($ds, $ds->expr()->eq(0, 1));
         }
     } elseif ($data['out'] !== null && !empty($data['out'])) {
         $parameterName = $ds->generateParameterName($this->getName());
         $this->applyFilterToClause($ds, $ds->expr()->notIn($this->get(FilterUtility::DATA_NAME_KEY), $parameterName, true));
         $ds->setParameter($parameterName, $data['out']);
     }
     return true;
 }
Пример #13
0
 /**
  * @param FilterDatasourceAdapterInterface $ds
  * @param string $fieldName
  * @param mixed $valueStart
  * @param mixed $valueEnd
  * @return string
  */
 protected function buildNotBetweenExpr(FilterDatasourceAdapterInterface $ds, $fieldName, $valueStart, $valueEnd)
 {
     $parameterStart = $ds->generateParameterName($this->getName());
     $parameterEnd = $ds->generateParameterName($this->getName());
     if ($valueStart && $valueEnd) {
         $ds->setParameter($parameterStart, $valueStart);
         $ds->setParameter($parameterEnd, $valueEnd);
         return $ds->expr()->orX($ds->expr()->lt($fieldName, $parameterStart, true), $ds->expr()->gt($fieldName, $parameterEnd, true));
     } elseif ($valueStart) {
         $ds->setParameter($parameterStart, $valueStart);
         return $ds->expr()->lt($fieldName, $parameterStart, true);
     } else {
         $ds->setParameter($parameterEnd, $valueEnd);
         return $ds->expr()->gt($fieldName, $parameterEnd, true);
     }
 }