Exemple #1
0
 /**
  * Collect activities changes
  *
  * @param OnFlushEventArgs $args
  */
 public function onFlush(OnFlushEventArgs $args)
 {
     $entitiesToDelete = $args->getEntityManager()->getUnitOfWork()->getScheduledEntityDeletions();
     $entitiesToUpdate = $args->getEntityManager()->getUnitOfWork()->getScheduledEntityUpdates();
     if (!empty($entitiesToDelete) || !empty($entitiesToUpdate)) {
         foreach ($entitiesToDelete as $entity) {
             $class = $this->doctrineHelper->getEntityClass($entity);
             $id = $this->doctrineHelper->getSingleEntityIdentifier($entity);
             $key = $class . '_' . $id;
             if ($this->activityContactProvider->isSupportedEntity($class) && !isset($this->deletedEntities[$key])) {
                 $targets = $entity->getActivityTargetEntities();
                 $targetsInfo = [];
                 foreach ($targets as $target) {
                     $targetsInfo[] = ['class' => $this->doctrineHelper->getEntityClass($target), 'id' => $this->doctrineHelper->getSingleEntityIdentifier($target), 'direction' => $this->activityContactProvider->getActivityDirection($entity, $target)];
                 }
                 $this->deletedEntities[$key] = ['class' => $class, 'id' => $id, 'contactDate' => $this->activityContactProvider->getActivityDate($entity), 'targets' => $targetsInfo];
             }
         }
         foreach ($entitiesToUpdate as $entity) {
             $class = $this->doctrineHelper->getEntityClass($entity);
             $id = $this->doctrineHelper->getSingleEntityIdentifier($entity);
             $key = $class . '_' . $id;
             if ($this->activityContactProvider->isSupportedEntity($class) && !isset($this->updatedEntities[$key])) {
                 $changes = $args->getEntityManager()->getUnitOfWork()->getEntityChangeSet($entity);
                 $isDirectionChanged = $this->activityContactProvider->getActivityDirectionProvider($entity)->isDirectionChanged($changes);
                 $targets = $entity->getActivityTargetEntities();
                 $targetsInfo = [];
                 foreach ($targets as $target) {
                     $targetsInfo[] = ['class' => $this->doctrineHelper->getEntityClass($target), 'id' => $this->doctrineHelper->getSingleEntityIdentifier($target), 'direction' => $this->activityContactProvider->getActivityDirection($entity, $target), 'is_direction_changed' => $isDirectionChanged];
                 }
                 $this->updatedEntities[$key] = ['class' => $class, 'id' => $id, 'contactDate' => $this->activityContactProvider->getActivityDate($entity), 'targets' => $targetsInfo];
             }
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function validate($entity, Constraint $constraint)
 {
     $className = $this->doctrineHelper->getEntityClass($entity);
     $organizationField = $this->metadataProvider->getMetadata($className)->getGlobalOwnerFieldName();
     if ($organizationField) {
         $constraint->fields = array_merge((array) $constraint->fields, [$organizationField]);
     }
     parent::validate($entity, $constraint);
 }
 /**
  * Checks if the entity can have activities
  *
  * @param object|null $entity
  * @return bool
  */
 public function isApplicable($entity = null)
 {
     if (null === $entity || !is_object($entity)) {
         return false;
     }
     $entityClass = $this->doctrineHelper->getEntityClass($entity);
     $id = $this->doctrineHelper->getSingleEntityIdentifier($entity);
     $activityListRepo = $this->doctrine->getRepository('OroActivityListBundle:ActivityList');
     return in_array($entityClass, $this->activityListProvider->getTargetEntityClasses()) || (bool) $activityListRepo->getRecordsCountForTargetClassAndId($entityClass, $id);
 }
 /**
  * We should collect here id's because after flush, object has no id
  *
  * @param $entities
  */
 protected function collectDeletedEntities($entities)
 {
     if (!empty($entities)) {
         foreach ($entities as $hash => $entity) {
             if ($this->activityListManager->isSupportedEntity($entity) && empty($this->deletedEntities[$hash])) {
                 $this->deletedEntities[$hash] = ['class' => $this->doctrineHelper->getEntityClass($entity), 'id' => $this->doctrineHelper->getSingleEntityIdentifier($entity)];
             }
         }
     }
 }
 /**
  * Checks if the entity can have activities
  *
  * @param object|null $entity
  * @param int|null    $pageType
  * @return bool
  */
 public function isApplicable($entity = null, $pageType = null)
 {
     if ($pageType === null || !is_object($entity) || !$this->doctrineHelper->isManageableEntity($entity) || $this->doctrineHelper->isNewEntity($entity)) {
         return false;
     }
     $pageType = (int) $pageType;
     $id = $this->doctrineHelper->getSingleEntityIdentifier($entity);
     $entityClass = $this->doctrineHelper->getEntityClass($entity);
     $activityListRepo = $this->doctrine->getRepository('OroActivityListBundle:ActivityList');
     return $this->isAllowedOnPage($entity, $pageType) && (in_array($entityClass, $this->activityListProvider->getTargetEntityClasses()) || (bool) $activityListRepo->getRecordsCountForTargetClassAndId($entityClass, $id));
 }
Exemple #6
0
 /**
  * Check ACL for resource.
  *
  * @param mixed $context
  * @return boolean
  */
 protected function isConditionAllowed($context)
 {
     $attributes = $this->contextAccessor->getValue($context, $this->attributes);
     $objectOrClass = $this->contextAccessor->getValue($context, $this->objectOrClass);
     if (is_object($objectOrClass)) {
         $unitOfWork = $this->doctrineHelper->getEntityManager($objectOrClass)->getUnitOfWork();
         if (!$unitOfWork->isInIdentityMap($objectOrClass) || $unitOfWork->isScheduledForInsert($objectOrClass)) {
             $objectOrClass = 'Entity:' . $this->doctrineHelper->getEntityClass($objectOrClass);
         }
     }
     return $this->securityFacade->isGranted($attributes, $objectOrClass);
 }
 /**
  * @param object $entity
  * @param bool   $allowCreate
  *
  * @return FieldsChanges
  */
 protected function getOrCreateFieldsChanges($entity, $allowCreate = true)
 {
     $className = $this->doctrineHelper->getEntityClass($entity);
     $identifier = $this->doctrineHelper->getSingleEntityIdentifier($entity);
     $em = $this->doctrineHelper->getEntityManager($this->className);
     $fieldChanges = $em->getRepository($this->className)->findOneBy(['entityClass' => $className, 'entityId' => $identifier]);
     if ($fieldChanges || !$fieldChanges && !$allowCreate) {
         return $fieldChanges;
     }
     $fieldChanges = $this->doctrineHelper->createEntityInstance($this->className)->setEntityClass($className)->setEntityId($identifier);
     $em->persist($fieldChanges);
     return $fieldChanges;
 }
Exemple #8
0
 /**
  * Compare two values for equality
  *
  * @param mixed $left
  * @param mixed $right
  * @return boolean
  */
 protected function doCompare($left, $right)
 {
     if (is_object($left) && is_object($right)) {
         $leftClass = $this->doctrineHelper->getEntityClass($left);
         $rightClass = $this->doctrineHelper->getEntityClass($right);
         if ($leftClass == $rightClass && $this->doctrineHelper->isManageableEntity($left) && $this->doctrineHelper->isManageableEntity($right)) {
             $leftIdentifier = $this->doctrineHelper->getEntityIdentifier($left);
             $rightIdentifier = $this->doctrineHelper->getEntityIdentifier($right);
             return $leftIdentifier == $rightIdentifier;
         }
     }
     return $left == $right;
 }
 /**
  * {@inheritdoc}
  */
 public function isApplicable($entity)
 {
     if (is_object($entity)) {
         $entity = $this->doctrineHelper->getEntityClass($entity);
     }
     return $entity == self::ACTIVITY_CLASS;
 }
 /**
  * @param object                        $entity
  * @param ActivityListProviderInterface $provider
  * @param string                        $verb
  * @param ActivityList|null             $list
  *
  * @return ActivityList
  */
 protected function getActivityListEntityForEntity($entity, ActivityListProviderInterface $provider, $verb = ActivityList::VERB_CREATE, $list = null)
 {
     if ($provider->isApplicable($entity)) {
         if (!$list) {
             $list = new ActivityList();
         }
         $list->setSubject($provider->getSubject($entity));
         $list->setDescription($this->htmlTagHelper->stripTags($this->htmlTagHelper->purify($provider->getDescription($entity))));
         $this->setDate($entity, $provider, $list);
         if ($this->hasGrouping($provider)) {
             $list->setHead($provider->isHead($entity));
         }
         $list->setVerb($verb);
         if ($verb === ActivityList::VERB_UPDATE) {
             $activityListTargets = $list->getActivityListTargetEntities();
             foreach ($activityListTargets as $target) {
                 $list->removeActivityListTarget($target);
             }
         } else {
             $className = $this->doctrineHelper->getEntityClass($entity);
             $list->setRelatedActivityClass($className);
             $list->setRelatedActivityId($this->doctrineHelper->getSingleEntityIdentifier($entity));
             $list->setOrganization($provider->getOrganization($entity));
         }
         $targets = $provider->getTargetEntities($entity);
         foreach ($targets as $target) {
             if ($list->supportActivityListTarget($this->doctrineHelper->getEntityClass($target))) {
                 $list->addActivityListTarget($target);
             }
         }
         return $list;
     }
     return null;
 }
Exemple #11
0
 /**
  * @param object $entity
  * @return WorkflowItem|null
  */
 public function getWorkflowItemByEntity($entity)
 {
     $entityClass = $this->doctrineHelper->getEntityClass($entity);
     $entityIdentifier = $this->doctrineHelper->getSingleEntityIdentifier($entity);
     if (false === filter_var($entityIdentifier, FILTER_VALIDATE_INT)) {
         return null;
     }
     return $this->getWorkflowItemRepository()->findByEntityMetadata($entityClass, $entityIdentifier);
 }
 /**
  * @param object $object
  * @return string
  */
 protected function getEntityClass($object)
 {
     if ($object instanceof ObjectIdentityInterface) {
         $class = $object->getType();
     } else {
         $class = $this->doctrineHelper->getEntityClass($object);
     }
     return ClassUtils::getRealClass($class);
 }
Exemple #13
0
 /**
  * @param BeforeGroupingChainWidgetEvent $event
  */
 public function isAllowedButton(BeforeGroupingChainWidgetEvent $event)
 {
     $entity = $event->getEntity();
     $pageType = $event->getPageType();
     if ($pageType === null || !is_object($entity) || !$this->configManager->hasConfig($this->doctrineHelper->getEntityClass($entity)) || !$this->isAllowedOnPage($this->doctrineHelper->getEntityClass($entity), $pageType)) {
         // Clear allowed widgets
         $event->setWidgets([]);
     }
 }
 public function testGetEntityRepositoryByEntity()
 {
     $entity = new ItemStubProxy();
     $entityClass = $this->doctrineHelper->getEntityClass($entity);
     $repo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository');
     $this->registry->expects($this->once())->method('getManagerForClass')->with($entityClass)->will($this->returnValue($this->em));
     $this->em->expects($this->once())->method('getRepository')->with($entityClass)->will($this->returnValue($repo));
     $this->assertSame($repo, $this->doctrineHelper->getEntityRepository($entity));
 }
 /**
  * @param object $object
  * @return string
  */
 protected function getEntityClass($object)
 {
     if ($object instanceof ObjectIdentityInterface) {
         $class = $object->getType();
         $delim = strpos($class, '@');
         if ($delim) {
             $class = ltrim(substr($class, $delim + 1), ' ');
         }
     } else {
         $class = $this->doctrineHelper->getEntityClass($object);
     }
     return ClassUtils::getRealClass($class);
 }
Exemple #16
0
 /**
  * Add index task to queue
  *
  * @param object|array $entity
  * @return Job[]
  */
 protected function createQueueJobs($entity)
 {
     $entities = $this->getEntitiesArray($entity);
     $entityIdentifiers = [];
     foreach ($entities as $entity) {
         $class = $this->doctrineHelper->getEntityClass($entity);
         $identifier = $this->doctrineHelper->getSingleEntityIdentifier($entity);
         $entityIdentifiers[$class][] = $identifier;
     }
     $jobs = [];
     foreach ($entityIdentifiers as $class => $identifiers) {
         $jobs[] = new Job(IndexCommand::NAME, array_merge([$class], $identifiers));
     }
     return $jobs;
 }
 /**
  * @param OnFlushEventArgs $args
  */
 public function onFlush(OnFlushEventArgs $args)
 {
     if (!$this->enabled) {
         return;
     }
     $entityManager = $args->getEntityManager();
     $unitOfWork = $entityManager->getUnitOfWork();
     // schedule saved entities
     // inserted and updated entities should be processed as is
     $savedEntities = array_merge($unitOfWork->getScheduledEntityInsertions(), $unitOfWork->getScheduledEntityUpdates());
     foreach ($savedEntities as $hash => $entity) {
         if ($this->isSupported($entity) && empty($this->savedEntities[$hash])) {
             $this->savedEntities[$hash] = $entity;
         }
     }
     // schedule deleted entities
     // deleted entities should be processed as references because on postFlush they are already deleted
     $deletedEntities = $unitOfWork->getScheduledEntityDeletions();
     foreach ($deletedEntities as $hash => $entity) {
         if ($this->isSupported($entity) && empty($this->deletedEntities[$hash])) {
             $this->deletedEntities[$hash] = $entityManager->getReference($this->doctrineHelper->getEntityClass($entity), $this->doctrineHelper->getSingleEntityIdentifier($entity));
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function isApplicable($entity)
 {
     return $this->doctrineHelper->getEntityClass($entity) == self::ACTIVITY_CLASS;
 }
 /**
  * Check is "Start a Hangout" is applicable
  *
  * @param object|null $entity
  * @return bool
  */
 public function isApplicable($entity = null)
 {
     return $this->placeholderFilter->isPhoneApplicable() && is_object($entity) && $this->doctrineHelper->getEntityClass($entity) == self::CALL_CLASS;
 }
 /**
  * Check is "Start a Hangout" is applicable to Calendar Event
  *
  * @param object|null $entity
  * @return bool
  */
 public function isApplicable($entity = null)
 {
     return $this->placeholderFilter->isEmailApplicable() && is_object($entity) && $this->doctrineHelper->getEntityClass($entity) == self::CALENDAR_EVENT_CLASS && $entity->getCalendar() && $entity->getCalendar()->getOwner() === $this->securityFacade->getLoggedUser() && !$entity->getChildEvents()->isEmpty() && $entity->getUseHangout() !== false;
 }
 /**
  * {@inheritdoc}
  */
 public function isApplicable($entity)
 {
     return $this->doctrineHelper->getEntityClass($entity) == self::ACTIVITY_CLASS && $entity->getFromEmailAddress()->hasOwner();
 }
 public function testGetEntityManagerByEntity()
 {
     $entity = new ItemStubProxy();
     $this->registry->expects($this->once())->method('getManagerForClass')->with($this->doctrineHelper->getEntityClass($entity))->will($this->returnValue($this->em));
     $this->assertSame($this->em, $this->doctrineHelper->getEntityManager($entity));
 }
Exemple #23
0
 /**
  * Loads reminders into entity
  *
  * @param RemindableInterface $entity
  */
 public function loadReminders(RemindableInterface $entity)
 {
     $reminders = new RemindersPersistentCollection($this->getRemindersRepository(), $this->doctrineHelper->getEntityClass($entity), $this->doctrineHelper->getSingleEntityIdentifier($entity));
     $entity->setReminders($reminders);
 }
 /**
  * @param object $entity
  * @return Integration
  */
 protected function reloadEntity($entity)
 {
     return $this->doctrineHelper->getEntity($this->doctrineHelper->getEntityClass($entity), $this->doctrineHelper->getEntityIdentifier($entity));
 }