/** * @param EntityManager $em * @param array $data * @param string $entityIdField * * @return QueryBuilder */ protected function createActivityQueryBuilder(EntityManager $em, array $data, $entityIdField) { $joinField = sprintf('%s.%s', $this->activityListAlias, ExtendHelper::buildAssociationName($data['entityClassName'], ActivityListEntityConfigDumperExtension::ASSOCIATION_KIND)); $activityListRepository = $em->getRepository('OroActivityListBundle:ActivityList'); $activityQb = $activityListRepository->createQueryBuilder($this->activityListAlias)->select('1')->setMaxResults(1); $availableActivityAssociations = $this->activityManager->getActivityAssociations($data['entityClassName']); if (!$availableActivityAssociations && !$activityListRepository->getRecordsCountForTargetClass($data['entityClassName'])) { $activityQb->andWhere('1 = 0'); return $activityQb; } $activityQb->join($joinField, $this->activityAlias)->andWhere(sprintf('%s.id = %s.%s', $this->activityAlias, $this->getEntityAlias(), $entityIdField)); $entityField = $this->getField(); $dateRangeField = strpos($entityField, '$') === 0 ? substr($entityField, 1) : null; if ($dateRangeField) { $data['dateRange'] = $data['filter']['data']; unset($data['filter']); } $this->activityListFilterHelper->addFiltersToQuery($activityQb, $data, $dateRangeField, $this->activityListAlias); if (isset($data['filter'])) { $activityDs = new OrmFilterDatasourceAdapter($activityQb); $expr = $activityDs->expr()->exists($this->createRelatedActivityDql($activityDs, $data)); $this->applyFilterToClause($activityDs, $expr); } return $activityQb; }
/** * @param EntityManager $em * @param array $data * @param string $entityIdField * * @return QueryBuilder */ protected function createActivityQueryBuilder(EntityManager $em, array $data, $entityIdField) { $joinField = sprintf('%s.%s', $this->activityListAlias, ExtendHelper::buildAssociationName($data['entityClassName'], ActivityListEntityConfigDumperExtension::ASSOCIATION_KIND)); $activityQb = $em->getRepository('OroActivityListBundle:ActivityList')->createQueryBuilder($this->activityListAlias)->select('1')->setMaxResults(1); $availableActivityAssociations = $this->activityManager->getActivityAssociations($data['entityClassName']); $availableClasses = array_map(function ($assoc) { return $assoc['className']; }, $availableActivityAssociations); $chosenActivities = $data['activityType']['value']; if (count($chosenActivities) === 1 && empty($chosenActivities[0])) { $chosenActivities = $this->activityListChainProvider->getSupportedActivities(); } $chosenClasses = array_map(function ($className) { return $this->entityRoutingHelper->decodeClassName($className); }, $chosenActivities); $unavailableChoices = array_diff($chosenClasses, $availableClasses); if ($unavailableChoices) { $activityQb->andWhere('1 = 0'); return $activityQb; } $activityQb->join($joinField, $this->activityAlias)->andWhere(sprintf('%s.id = %s.%s', $this->activityAlias, $this->getEntityAlias(), $entityIdField)); $entityField = $this->getField(); $dateRangeField = strpos($entityField, '$') === 0 ? substr($entityField, 1) : null; if ($dateRangeField) { $data['dateRange'] = $data['filter']['data']; unset($data['filter']); } $this->activityListFilterHelper->addFiltersToQuery($activityQb, $data, $dateRangeField, $this->activityListAlias); if (isset($data['filter'])) { $activityDs = new OrmFilterDatasourceAdapter($activityQb); $expr = $activityDs->expr()->exists($this->createRelatedActivityDql($activityDs, $data)); $this->applyFilterToClause($activityDs, $expr); } return $activityQb; }
/** * {@inheritdoc} */ public function getWidgets($object) { $result = []; $entityClass = ClassUtils::getClass($object); $entityId = $this->entityIdAccessor->getIdentifier($object); $items = $this->activityManager->getActivityAssociations($entityClass); foreach ($items as $item) { if (empty($item['acl']) || $this->securityFacade->isGranted($item['acl'])) { $url = $this->entityRoutingHelper->generateUrl($item['route'], $entityClass, $entityId); $alias = sprintf('%s_%s_%s', strtolower(ExtendHelper::getShortClassName($item['className'])), dechex(crc32($item['className'])), $item['associationName']); $widget = ['widgetType' => 'block', 'alias' => $alias, 'label' => $this->translator->trans($item['label']), 'url' => $url]; if (isset($item['priority'])) { $widget['priority'] = $item['priority']; } $result[] = $widget; } } return $result; }
/** * Test that activity is not returned id activity is enabled on UI but schema update is not performed yet */ public function testGetActivityAssociationsNoSchemaUpdate() { $targetEntityClass = 'Test\\Entity'; $activityClass = 'Test\\Activity'; $targetEntityActivityConfig = new Config(new EntityConfigId('activity', $targetEntityClass)); $targetEntityActivityConfig->set('activities', [$activityClass]); $activityExtendConfig = new Config(new EntityConfigId('extend', $activityClass)); $activityExtendConfig->set('relation', []); $this->activityConfigProvider->expects($this->once())->method('getConfig')->with($targetEntityClass, null)->will($this->returnValue($targetEntityActivityConfig)); $this->extendConfigProvider->expects($this->once())->method('getConfig')->with($activityClass, null)->will($this->returnValue($activityExtendConfig)); $this->entityConfigProvider->expects($this->never())->method('getConfig'); $this->assertEquals([], $this->manager->getActivityAssociations($targetEntityClass)); }
/** * Test that activity is not returned if an activity is enabled on UI but schema update is not performed yet */ public function testGetActivityAssociationsNoSchemaUpdate() { $targetEntityClass = 'Test\\Entity'; $activityClass = 'Test\\Activity'; $targetEntityActivityConfig = new Config(new EntityConfigId('activity', $targetEntityClass)); $targetEntityActivityConfig->set('activities', [$activityClass]); $activityAssociationName = ExtendHelper::buildAssociationName($targetEntityClass, ActivityScope::ASSOCIATION_KIND); $activityAssociationConfig = new Config(new FieldConfigId('extend', $activityClass, $activityAssociationName)); $activityAssociationConfig->set('is_extend', true); $activityAssociationConfig->set('state', ExtendScope::STATE_NEW); $this->activityConfigProvider->expects($this->once())->method('getConfig')->with($targetEntityClass, null)->will($this->returnValue($targetEntityActivityConfig)); $this->extendConfigProvider->expects($this->once())->method('hasConfig')->with($activityClass, $activityAssociationName)->will($this->returnValue(true)); $this->extendConfigProvider->expects($this->once())->method('getConfig')->with($activityClass, $activityAssociationName)->will($this->returnValue($activityAssociationConfig)); $this->entityConfigProvider->expects($this->never())->method('getConfig'); $this->assertEquals([], $this->manager->getActivityAssociations($targetEntityClass)); }