/** * @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(); }
/** * @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)); }
/** * @param Email[] $updatedEmails */ public function updateHeads(array $updatedEmails) { foreach ($updatedEmails as $entity) { if (!$entity->getThread() || !$entity->getId()) { continue; } $threadEmails = $this->emailThreadProvider->getThreadEmails($this->em, $entity); if (count($threadEmails) === 0) { continue; } /** @var Email $email */ foreach ($threadEmails as $email) { $email->setHead(false); $this->em->persist($email); } $email = $threadEmails[0]; $email->setHead(true); $this->em->persist($email); } }
/** * Set heads of queued emails * * @param EntityManager $entityManager */ protected function processEmailsHeadSet(EntityManager $entityManager) { foreach ($this->getQueueHeadUpdate() as $entity) { if ($entity->getThread() && $entity->getId()) { $threadEmails = $this->emailThreadProvider->getThreadEmails($entityManager, $entity); if (count($threadEmails) > 0) { /** @var Email $email */ foreach ($threadEmails as $email) { $email->setHead(false); $entityManager->persist($email); } $email = $threadEmails[0]; $email->setHead(true); $entityManager->persist($email); } } } }