/** * @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); }
/** * @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); } } } }