/**
  * @param $threadEmails
  * @param $transformationCalls
  *
  * @dataProvider threadEmailsProvider
  */
 public function testGetThreadAttachments($threadEmails, $transformationCalls)
 {
     $emailEntity = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Email');
     $this->emailThreadProvider->expects($this->once())->method('getThreadEmails')->with($this->em, $emailEntity)->willReturn($threadEmails);
     $this->emailAttachmentTransformer->expects($this->exactly($transformationCalls))->method('entityToModel');
     $result = $this->emailAttachmentProvider->getThreadAttachments($emailEntity);
     $this->assertTrue(is_array($result));
     $this->assertEquals($transformationCalls, sizeof($result));
 }
 /**
  * @dataProvider updateHeadsDataProvider
  */
 public function testUpdateHeads(array $updatedEmails, array $returnThreadEmails, array $expectedEmails)
 {
     $consecutiveThreadEmails = array_map(function (TestEmailEntity $entity, $returnEmails) {
         return $returnEmails ? $this->getThreadEmails($entity) : [];
     }, $updatedEmails, $returnThreadEmails);
     $this->emailThreadProvider->expects($this->any())->method('getThreadEmails')->will(call_user_func_array([$this, 'onConsecutiveCalls'], $consecutiveThreadEmails));
     $this->emailThreadManager->updateHeads($updatedEmails);
     $this->assertEquals($expectedEmails, $updatedEmails);
 }
Example #3
0
 /**
  * @param Email $entity
  * @param $target
  */
 public function deleteContextFromEmailThread(Email $entity, $target)
 {
     $relatedEmails = $this->emailThreadProvider->getThreadEmails($this->em, $entity);
     foreach ($relatedEmails as $relatedEmail) {
         $relatedEmail->removeActivityTarget($target);
     }
     $this->em->persist($entity);
     $this->em->flush();
 }
 /**
  * Updates email references' threadId
  *
  * @param EntityManager $entityManager
  * @param Email $entity
  */
 protected function updateRefs(EntityManager $entityManager, Email $entity)
 {
     if ($entity->getThread()) {
         /** @var Email $email */
         foreach ($this->emailThreadProvider->getEmailReferences($this->em, $entity) as $email) {
             if (!$email->getThread()) {
                 $email->setThread($entity->getThread());
                 $entityManager->persist($email);
             }
         }
     }
 }
 /**
  * @param Email $emailEntity
  *
  * @return array
  */
 public function getThreadAttachments(Email $emailEntity)
 {
     $attachments = [];
     $threadEmails = $this->emailThreadProvider->getThreadEmails($this->em, $emailEntity);
     /** @var Email $threadEmail */
     foreach ($threadEmails as $threadEmail) {
         if ($threadEmail->getEmailBody()->getHasAttachments()) {
             $emailAttachments = $threadEmail->getEmailBody()->getAttachments();
             foreach ($emailAttachments as $emailAttachment) {
                 $attachments[] = $this->emailAttachmentTransformer->entityToModel($emailAttachment);
             }
         }
     }
     return $attachments;
 }
 public function testGetThreadEmailWithThread()
 {
     $thread = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailThread');
     $email = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Email');
     $email->expects($this->exactly(1))->method('getThread')->will($this->returnValue($thread));
     $entityManager = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $repository = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $queryBuilder = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock();
     $query = $this->getMockBuilder('Doctrine\\ORM\\AbstractQuery')->disableOriginalConstructor()->setMethods(['getResult'])->getMockForAbstractClass();
     $query->expects($this->exactly(1))->method('getResult')->will($this->returnValue([new \stdClass(), new \stdClass()]));
     $queryBuilder->expects($this->exactly(1))->method('getQuery')->will($this->returnValue($query));
     $repository->expects($this->exactly(1))->method('createQueryBuilder')->with('e')->willReturn($queryBuilder);
     $entityManager->expects($this->exactly(1))->method('getRepository')->with('OroEmailBundle:Email')->will($this->returnValue($repository));
     $this->assertCount(2, $this->provider->getThreadEmails($entityManager, $email));
 }
 /**
  * {@inheritdoc}
  */
 public function getData(ActivityList $activityListEntity)
 {
     /** @var Email $email */
     $email = $headEmail = $this->doctrineRegistryLink->getService()->getRepository($activityListEntity->getRelatedActivityClass())->find($activityListEntity->getRelatedActivityId());
     if ($email->isHead() && $email->getThread()) {
         $headEmail = $this->emailThreadProvider->getHeadEmail($this->doctrineHelper->getEntityManager($activityListEntity->getRelatedActivityClass()), $email);
     }
     $data = ['ownerName' => $email->getFromName(), 'ownerLink' => null, 'entityId' => $email->getId(), 'headOwnerName' => $headEmail->getFromName(), 'headSubject' => $headEmail->getSubject(), 'headSentAt' => $headEmail->getSentAt()->format('c'), 'isHead' => $email->isHead() && $email->getThread(), 'treadId' => $email->getThread() ? $email->getThread()->getId() : null];
     if ($email->getThread()) {
         $emails = $email->getThread()->getEmails();
         // if there are just two email - add replayedEmailId to use on client side
         if (count($emails) === 2) {
             $data['replayedEmailId'] = $emails[0]->getId();
         }
     }
     if ($email->getFromEmailAddress()->getHasOwner()) {
         $owner = $email->getFromEmailAddress()->getOwner();
         $data['headOwnerName'] = $data['ownerName'] = $this->entityNameResolver->getName($owner);
         $route = $this->configManager->getEntityMetadata(ClassUtils::getClass($owner))->getRoute('view');
         $securityFacade = $this->securityFacadeLink->getService();
         if (null !== $route && $securityFacade->isGranted('VIEW', $owner)) {
             $id = $this->doctrineHelper->getSingleEntityIdentifier($owner);
             try {
                 $data['ownerLink'] = $this->router->generate($route, ['id' => $id]);
             } catch (RouteNotFoundException $e) {
                 // Do not set owner link if route is not found.
             }
         }
     }
     return $data;
 }
 /**
  * {@inheritdoc}
  */
 public function getData(ActivityList $activityListEntity)
 {
     /** @var Email $email */
     $email = $headEmail = $this->doctrineRegistryLink->getService()->getRepository($activityListEntity->getRelatedActivityClass())->find($activityListEntity->getRelatedActivityId());
     if ($email->isHead() && $email->getThread()) {
         $headEmail = $this->emailThreadProvider->getHeadEmail($this->doctrineHelper->getEntityManager($activityListEntity->getRelatedActivityClass()), $email);
     }
     $data = ['ownerName' => $email->getFromName(), 'ownerLink' => null, 'entityId' => $email->getId(), 'headOwnerName' => $headEmail->getFromName(), 'headSubject' => $headEmail->getSubject(), 'headSentAt' => $headEmail->getSentAt()->format('c'), 'isHead' => $email->isHead() && $email->getThread(), 'treadId' => $email->getThread() ? $email->getThread()->getId() : null];
     $data = $this->setReplaedEmailId($email, $data);
     if ($email->getFromEmailAddress()->getHasOwner()) {
         $owner = $email->getFromEmailAddress()->getOwner();
         $data['headOwnerName'] = $data['ownerName'] = $this->entityNameResolver->getName($owner);
         $data = $this->setOwnerLink($owner, $data);
     }
     return $data;
 }
 /**
  * @param EntityManager $em
  * @param Email         $email
  */
 protected function copyContexts(EntityManager $em, Email $email)
 {
     $thread = $email->getThread();
     if ($thread) {
         $relatedEmails = $em->getRepository(Email::ENTITY_CLASS)->findByThread($thread);
         $contexts = $this->emailActivityListProvider->getTargetEntities($email);
         // from email to thread emails
         if (count($contexts) > 0) {
             foreach ($relatedEmails as $relatedEmail) {
                 if ($email->getId() !== $relatedEmail->getId()) {
                     $this->changeContexts($em, $relatedEmail, $contexts);
                 }
             }
         } else {
             // from thread to email
             $relatedEmails = $this->emailThreadProvider->getEmailReferences($em, $email);
             if (count($relatedEmails) > 0) {
                 $parentEmail = $relatedEmails[0];
                 $contexts = $this->emailActivityListProvider->getTargetEntities($parentEmail);
                 $this->changeContexts($em, $email, $contexts);
             }
         }
     }
 }