Пример #1
0
 /**
  * @param OrmFilterDatasourceAdapter $ds
  *
  * @return string
  */
 protected function getJoinIdentifier(OrmFilterDatasourceAdapter $ds)
 {
     list($joinAlias, $class) = explode('.', $this->getOr(FilterUtility::DATA_NAME_KEY));
     $em = $ds->getQueryBuilder()->getEntityManager();
     $metadata = $em->getClassMetadata($class);
     $fieldNames = $metadata->getIdentifierFieldNames();
     if ($count = count($fieldNames) !== 1) {
         throw new LogicException('Class needs to have exactly 1 identifier, but it has "%d"', $count);
     }
     return sprintf('%s.%s', $joinAlias, $fieldNames[0]);
 }
Пример #2
0
 /**
  * @param OrmFilterDatasourceAdapter $ds
  * @param string $unit
  */
 protected function qbPrepare(OrmFilterDatasourceAdapter $ds, $unit)
 {
     $qb = $ds->getQueryBuilder();
     $rootAliasCollection = $qb->getRootAliases();
     $rootAlias = reset($rootAliasCollection);
     $joinAlias = $this->getJoinAlias();
     $currency = $this->get('data_name');
     $qb->innerJoin('OroB2BPricingBundle:ProductPrice', $joinAlias, Join::WITH, $rootAlias . '.id = IDENTITY(' . $joinAlias . '.product)');
     $this->addEqExpr($ds, $joinAlias . '.currency', $ds->generateParameterName('currency'), $currency);
     $this->addEqExpr($ds, $joinAlias . '.quantity', $ds->generateParameterName('quantity'), 1);
     $this->addEqExpr($ds, 'IDENTITY(' . $joinAlias . '.unit)', $ds->generateParameterName('unit'), $unit);
 }
Пример #3
0
 /**
  * Builds filtering expression by tags ids and entity class name
  *
  * @param OrmFilterDatasourceAdapter $ds
  * @param array                      $data
  *
  * @param string                     $entityClassParam
  *
  * @return bool|Func
  */
 protected function buildFilterExpr(OrmFilterDatasourceAdapter $ds, array $data, $entityClassParam)
 {
     $expr = false;
     $qb = $ds->getQueryBuilder();
     $entityIdAlias = $this->get(FilterUtility::DATA_NAME_KEY);
     $taggingAlias = $ds->generateParameterName('tagging');
     $tagAlias = $ds->generateParameterName('tag');
     $subQueryDQL = $qb->getEntityManager()->getRepository('OroTagBundle:Tagging')->createQueryBuilder($taggingAlias)->select($taggingAlias . '.recordId')->join($taggingAlias . '.tag', $tagAlias)->where(sprintf('%s.entityName = :%s', $taggingAlias, $entityClassParam))->andWhere($qb->expr()->in($tagAlias . '.id', $data['value']))->getDQL();
     switch ($data['type']) {
         case DictionaryFilterType::TYPE_IN:
             $expr = $ds->expr()->in($entityIdAlias, $subQueryDQL);
             break;
         case DictionaryFilterType::TYPE_NOT_IN:
             $expr = $ds->expr()->notIn($entityIdAlias, $subQueryDQL);
             break;
         default:
             break;
     }
     return $expr;
 }
Пример #4
0
 /**
  * @param OrmFilterDatasourceAdapter $activityDs
  * @param array $data
  *
  * @return string
  */
 protected function createRelatedActivityDql(OrmFilterDatasourceAdapter $activityDs, array $data)
 {
     $grid = $this->createRelatedActivityGrid($data);
     $qb = $grid->getDatasource()->getQueryBuilder();
     $alias = $qb->getRootAliases()[0];
     if ($joinPart = $qb->getDQLPart('join')) {
         $lastGroup = end($joinPart);
         $alias = end($lastGroup)->getAlias();
     }
     $field = $this->getField();
     $ds = new OrmFilterDatasourceAdapter($grid->getDatasource()->getQueryBuilder());
     $this->applyFilter($ds, $data['filter']['filter'], sprintf('%s.%s', $alias, $field), $data['filter']['data']);
     $qb->select('1');
     $this->copyParameters($qb, $activityDs->getQueryBuilder());
     $metadata = $qb->getEntityManager()->getClassMetadata($this->getRelatedActivityClass($data));
     $dql = $qb->getDQL();
     if ($qb->getRootAliases()[0] !== $alias) {
         $dql = str_replace($alias, $ds->generateParameterName('raj'), $dql);
     }
     $dql .= sprintf(' AND %s.%s = %s.relatedActivityId', $qb->getRootAliases()[0], $this->getIdentifier($metadata), $this->activityListAlias);
     return str_replace($qb->getRootAliases()[0], $ds->generateParameterName('ra'), $dql);
 }
 /**
  * Constructor
  *
  * @param QueryBuilder $qb
  */
 public function __construct(QueryBuilder $qb)
 {
     parent::__construct($qb);
     $this->expressionBuilder = new ExpressionBuilder();
 }
Пример #6
0
 /**
  * @param OrmFilterDatasourceAdapter $ds
  * @return string
  */
 protected function parseQueryCondition(OrmFilterDatasourceAdapter $ds)
 {
     $qb = $ds->getQueryBuilder();
     $parameters = array();
     foreach ($qb->getParameters() as $param) {
         /* @var $param Query\Parameter */
         $parameters[':' . $param->getName()] = $param->getValue();
     }
     $parts = $qb->getDQLParts();
     $where = '';
     if ($parts['where']) {
         $where = str_replace(array_keys($parameters), array_values($parameters), (string) $parts['where']);
     }
     return $where;
 }
Пример #7
0
 /**
  * @param OrmFilterDatasourceAdapter $ds
  * @param string                     $rootEntity
  * @param string                     $rootAlias
  * @param string                     $rootField
  * @param string                     $relAlias
  * @param string                     $relJoinType
  *
  * @return QueryBuilder
  */
 protected function createSubQueryBuilder(OrmFilterDatasourceAdapter $ds, $rootEntity, $rootAlias, $rootField, $relAlias, $relJoinType)
 {
     $qb = $ds->createQueryBuilder()->select($rootAlias)->from($rootEntity, $rootAlias);
     if ($relJoinType === 'LEFT') {
         $qb->leftJoin(sprintf('%s.%s', $rootAlias, $rootField), $relAlias);
     } else {
         $qb->innerJoin(sprintf('%s.%s', $rootAlias, $rootField), $relAlias);
     }
     return $qb;
 }
 /**
  * Constructor
  *
  * @param QueryBuilder $qb
  */
 public function __construct(QueryBuilder $qb)
 {
     parent::__construct($qb);
     $this->resetState();
 }
Пример #9
0
 /**
  * @param OrmFilterDatasourceAdapter $ds
  * @param string $objectClass
  * @param string $fieldName
  * @param array $data
  */
 protected function applyNewAuditValueFilter(OrmFilterDatasourceAdapter $ds, $objectClass, $fieldName, array $data)
 {
     if ($data['auditFilter']['type'] !== static::TYPE_CHANGED_TO_VALUE) {
         return;
     }
     $metadata = $ds->getQueryBuilder()->getEntityManager()->getClassMetadata($objectClass);
     $type = $metadata->getTypeOfField($fieldName);
     if (!$type) {
         $type = 'text';
     }
     $newValueField = sprintf('new%s', ucfirst(AuditFieldTypeRegistry::getAuditType($type)));
     $this->applyFilter($ds, $data['filter']['filter'], sprintf('%s.%s', $this->auditFieldAlias, $newValueField), $data['filter']['data']);
 }