Ejemplo n.º 1
0
 /**
  * @dataProvider findEmailOriginDataProvider
  *
  * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $mailModelExpects
  * @param string                                             $emailOwner
  * @param bool                                               $enableUseUserEmailOrigin
  * @param bool                                               $isOriginsNotEmpty
  * @param \PHPUnit_Framework_MockObject_MockObject           $origin
  * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $emailOriginsTimes
  */
 public function testFindEmailOrigin($mailModelExpects, $emailOwner, $enableUseUserEmailOrigin, $isOriginsNotEmpty, \PHPUnit_Framework_MockObject_MockObject $origin, $emailOriginsTimes)
 {
     $organization = $this->getMock('Oro\\Bundle\\OrganizationBundle\\Entity\\OrganizationInterface');
     $collection = new ArrayCollection([$origin]);
     $originName = 'origin name';
     $campaignOwner = null;
     $origin->expects(self::once())->method('getOrganization')->willReturn($organization);
     if (true === $enableUseUserEmailOrigin && true === $isOriginsNotEmpty) {
         $origin->expects(self::once())->method('isActive')->willReturn($isOriginsNotEmpty);
         $origin->expects(self::once())->method('isSmtpConfigured')->willReturn($isOriginsNotEmpty);
     }
     if ('user' === $emailOwner) {
         $emailOwner = $this->getMockBuilder('Oro\\Bundle\\UserBundle\\Entity\\User')->setMethods(['getEmailOrigins', 'addEmailOrigin'])->disableOriginalConstructor()->getMock();
         $emailOwner->expects($emailOriginsTimes)->method('getEmailOrigins')->willReturn($collection);
         if (false === $enableUseUserEmailOrigin) {
             $emailOwner->expects(self::once())->method('addEmailOrigin');
         }
     } elseif ('emailBox' === $emailOwner) {
         $emailOwner = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Mailbox')->setMethods(['getOrigin'])->disableOriginalConstructor()->getMock();
         if (true === $isOriginsNotEmpty) {
             $emailOwner->expects($emailOriginsTimes)->method('getOrigin')->willReturn($collection);
         } else {
             $emailOwner->expects($emailOriginsTimes)->method('getOrigin')->willReturn(null);
             $campaignOwner = $this->getMockBuilder('Oro\\Bundle\\UserBundle\\Entity\\User')->setMethods(['getEmailOrigins', 'addEmailOrigin'])->disableOriginalConstructor()->getMock();
             $campaignOwner->expects(self::any())->method('getEmailOrigins')->willReturn($collection);
         }
     }
     $this->emailModel->expects($mailModelExpects)->method('getCampaignOwner')->willReturn($campaignOwner);
     $this->emailOriginHelper->setEmailModel($this->emailModel);
     $origin = $this->emailOriginHelper->findEmailOrigin($emailOwner, $organization, $originName, $enableUseUserEmailOrigin);
     self::assertNotNull($origin);
 }
Ejemplo n.º 2
0
 /**
  * Process email model sending.
  *
  * @param EmailModel $model
  * @param EmailOrigin $origin Origin to send email with
  *
  * @return EmailUser
  * @throws \Swift_SwiftException
  */
 public function process(EmailModel $model, $origin = null)
 {
     $this->assertModel($model);
     $messageDate = new \DateTime('now', new \DateTimeZone('UTC'));
     $parentMessageId = $this->getParentMessageId($model);
     /** @var \Swift_Message $message */
     $message = $this->mailer->createMessage();
     if ($parentMessageId) {
         $message->getHeaders()->addTextHeader('References', $parentMessageId);
         $message->getHeaders()->addTextHeader('In-Reply-To', $parentMessageId);
     }
     $message->setDate($messageDate->getTimestamp());
     $message->setFrom($this->getAddresses($model->getFrom()));
     $message->setTo($this->getAddresses($model->getTo()));
     $message->setCc($this->getAddresses($model->getCc()));
     $message->setBcc($this->getAddresses($model->getBcc()));
     $message->setSubject($model->getSubject());
     $message->setBody($model->getBody(), $model->getType() === 'html' ? 'text/html' : 'text/plain');
     $this->addAttachments($message, $model);
     $this->processEmbeddedImages($message, $model);
     $messageId = '<' . $message->generateId() . '>';
     if ($origin === null) {
         $this->emailOriginHelper->setEmailModel($model);
         $origin = $this->getEmailOrigin($model->getFrom(), $model->getOrganization());
     }
     $this->processSend($message, $origin);
     $emailUser = $this->createEmailUser($model, $messageDate, $origin);
     $emailUser->addFolder($this->getFolder($model->getFrom(), $origin));
     $emailUser->getEmail()->setEmailBody($this->emailEntityBuilder->body($message->getBody(), $model->getType() === 'html', true));
     $emailUser->getEmail()->setMessageId($messageId);
     $emailUser->setSeen(true);
     if ($parentMessageId) {
         $emailUser->getEmail()->setRefs($parentMessageId);
     }
     // persist the email and all related entities such as folders, email addresses etc.
     $this->emailEntityBuilder->getBatch()->persist($this->getEntityManager());
     $this->persistAttachments($model, $emailUser->getEmail());
     // associate the email with the target entity if exist
     $contexts = $model->getContexts();
     foreach ($contexts as $context) {
         $this->emailActivityManager->addAssociation($emailUser->getEmail(), $context);
     }
     // flush all changes to the database
     $this->getEntityManager()->flush();
     $event = new EmailBodyAdded($emailUser->getEmail());
     $this->eventDispatcher->dispatch(EmailBodyAdded::NAME, $event);
     return $emailUser;
 }