예제 #1
0
 /**
  * @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;
 }
예제 #2
0
 /**
  * @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;
 }
예제 #3
0
 /**
  * {@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;
 }
예제 #4
0
 /**
  * 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));
 }
예제 #5
0
 /**
  * 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));
 }