/**
  * Returns the context for the given activity class and id
  *
  * @param string $class The FQCN of the activity entity
  * @param        $id
  *
  * @return array
  */
 public function getActivityContext($class, $id)
 {
     $criteria = Criteria::create();
     $criteria->andWhere(Criteria::expr()->eq('id', $id));
     $currentUser = $this->securityTokenStorage->getToken()->getUser();
     $userClass = ClassUtils::getClass($currentUser);
     $queryBuilder = $this->activityManager->getActivityTargetsQueryBuilder($class, $criteria, null, null, null, null, function (QueryBuilder $qb, $targetEntityClass) use($currentUser, $userClass) {
         if ($targetEntityClass === $userClass) {
             // Exclude current user from result
             $qb->andWhere($qb->expr()->neq(QueryUtils::getSelectExprByAlias($qb, 'entityId'), $currentUser->getId()));
         }
     });
     if (null === $queryBuilder) {
         return [];
     }
     $result = $queryBuilder->getQuery()->getResult();
     if (empty($result)) {
         return $result;
     }
     $entityProvider = $this->configManager->getProvider('entity');
     foreach ($result as &$item) {
         $config = $entityProvider->getConfig($item['entity']);
         $metadata = $this->configManager->getEntityMetadata($item['entity']);
         $safeClassName = $this->entityClassNameHelper->getUrlSafeClassName($item['entity']);
         $link = null;
         if ($metadata) {
             $link = $this->router->generate($metadata->getRoute(), ['id' => $item['id']]);
         } elseif ($link === null && ExtendHelper::isCustomEntity($item['entity'])) {
             // Generate view link for the custom entity
             $link = $this->router->generate('oro_entity_view', ['id' => $item['id'], 'entityName' => $safeClassName]);
         }
         $item['activityClassAlias'] = $this->entityAliasResolver->getPluralAlias($class);
         $item['entityId'] = $id;
         $item['targetId'] = $item['id'];
         $item['targetClassName'] = $safeClassName;
         $item['icon'] = $config->get('icon');
         $item['link'] = $link;
         unset($item['id'], $item['entity']);
     }
     return $result;
 }
Ejemplo n.º 2
0
 /**
  * Add "WHERE" parameter
  *
  * @deprecated Since 1.8 use criteria to add conditions
  *
  * @param string $keyWord
  * @param string $fieldName
  * @param string $condition
  * @param string $fieldValue
  * @param string $fieldType
  *
  * @return Query
  */
 public function where($keyWord, $fieldName, $condition, $fieldValue, $fieldType = self::TYPE_TEXT)
 {
     $expr = Criteria::expr();
     $fieldName = Criteria::implodeFieldTypeName($fieldType, $fieldName);
     switch ($condition) {
         case self::OPERATOR_CONTAINS:
             $expr = $expr->contains($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_CONTAINS:
             $expr = $expr->notContains($fieldName, $fieldValue);
             break;
         case self::OPERATOR_EQUALS:
             $expr = $expr->eq($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_EQUALS:
             $expr = $expr->neq($fieldName, $fieldValue);
             break;
         case self::OPERATOR_GREATER_THAN:
             $expr = $expr->gt($fieldName, $fieldValue);
             break;
         case self::OPERATOR_GREATER_THAN_EQUALS:
             $expr = $expr->gte($fieldName, $fieldValue);
             break;
         case self::OPERATOR_LESS_THAN:
             $expr = $expr->lt($fieldName, $fieldValue);
             break;
         case self::OPERATOR_LESS_THAN_EQUALS:
             $expr = $expr->lte($fieldName, $fieldValue);
             break;
         case self::OPERATOR_IN:
             $expr = $expr->in($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_IN:
             $expr = $expr->notIn($fieldName, $fieldValue);
             break;
         default:
             throw new ExpressionSyntaxError(sprintf('Unsupported operator "%s"', $condition));
     }
     if ($keyWord === self::KEYWORD_AND) {
         $this->criteria->andWhere($expr);
     } else {
         $this->criteria->orWhere($expr);
     }
     return $this;
 }
Ejemplo n.º 3
0
 /**
  * @return \Doctrine\Common\Collections\ExpressionBuilder|mixed
  */
 protected function parseCompositeCondition()
 {
     $expressions = [];
     $this->stream->next();
     while (!$this->stream->current->test(Token::PUNCTUATION_TYPE, ')')) {
         $type = null;
         if ($this->stream->current->test(Token::OPERATOR_TYPE)) {
             $type = $this->stream->current->value;
         }
         list($typeX, $expression) = $this->parseSimpleCondition($type);
         $expressions[] = ['type' => $typeX, 'expr' => $expression];
     }
     $expr = Criteria::expr();
     if ($expressions) {
         $expressions = array_reverse($expressions);
         $typeX = $expressions[0]['type'];
         $expressions = array_map(function ($item) use($typeX, $expressions) {
             if ($item['type'] !== $typeX && $item != end($expressions)) {
                 throw new ExpressionSyntaxError(sprintf('Syntax error. Composite operators of different types are not allowed on single level.'), $this->stream->current->cursor);
             }
             return $item['expr'];
         }, $expressions);
         $expr = call_user_func_array([$expr, str_replace('Where', 'X', $typeX)], $expressions);
     } else {
         throw new ExpressionSyntaxError(sprintf('Syntax error in composite expression.'), $this->stream->current->cursor);
     }
     $this->stream->next();
     return $expr;
 }