public function testHandleOnFlushWithoutNewEmails()
 {
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $uow = $this->getMockBuilder('\\Doctrine\\ORM\\UnitOfWork')->disableOriginalConstructor()->getMock();
     $em->expects($this->once())->method('getUnitOfWork')->will($this->returnValue($uow));
     $uow->expects($this->once())->method('getScheduledEntityInsertions')->will($this->returnValue([new \stdClass()]));
     $uow->expects($this->never())->method('computeChangeSet');
     $this->manager->handleOnFlush(new OnFlushEventArgs($em));
 }
示例#2
0
 /**
  * @param PostFlushEventArgs $event
  */
 public function postFlush(PostFlushEventArgs $event)
 {
     $this->emailThreadManager->handlePostFlush($event);
     $this->emailActivityManager->handlePostFlush($event);
     if ($this->emailsToRemove) {
         $em = $event->getEntityManager();
         foreach ($this->emailsToRemove as $email) {
             $em->remove($email);
         }
         $this->emailsToRemove = [];
         $em->flush();
     }
 }
示例#3
0
 /**
  * Process email model sending.
  *
  * @param EmailModel $model
  * @return Email
  * @throws \Swift_SwiftException
  */
 public function process(EmailModel $model)
 {
     $this->assertModel($model);
     $messageDate = new \DateTime('now', new \DateTimeZone('UTC'));
     /** @var \Swift_Message $message */
     $message = $this->mailer->createMessage();
     $message->setDate($messageDate->getTimestamp());
     $message->setFrom($this->getAddresses($model->getFrom()));
     $message->setTo($this->getAddresses($model->getTo()));
     $message->setSubject($model->getSubject());
     $message->setBody($model->getBody(), $model->getType() === 'html' ? 'text/html' : 'text/plain');
     $messageId = $message->generateId();
     if (!$this->mailer->send($message)) {
         throw new \Swift_SwiftException('An email was not delivered.');
     }
     $origin = $this->getEmailOrigin($model->getFrom());
     $this->emailEntityBuilder->setOrigin($origin);
     $email = $this->emailEntityBuilder->email($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate);
     $email->addFolder($origin->getFolder(FolderType::SENT));
     $email->setEmailBody($this->emailEntityBuilder->body($model->getBody(), $model->getType() === 'html', true));
     $email->setMessageId($messageId);
     // persist the email and all related entities such as folders, email addresses etc.
     $this->emailEntityBuilder->getBatch()->persist($this->getEntityManager());
     // associate the email with the target entity if exist
     if ($model->hasEntity()) {
         $targetEntity = $this->doctrineHelper->getEntity($model->getEntityClass(), $model->getEntityId());
         if ($targetEntity) {
             $this->emailActivityManager->addAssociation($email, $targetEntity);
         }
     }
     // flush all changes to the database
     $this->getEntityManager()->flush();
     return $email;
 }
 public function testExecuteActionWithoutAttribute()
 {
     $options = ['email' => '$.email', 'target_entity' => '$.target_entity'];
     $fakeContext = ['fake', 'things', 'are', 'here'];
     $this->contextAccessor->expects($this->at(0))->method('getValue')->with($this->equalTo($fakeContext), $this->equalTo('$.email'))->will($this->returnValue($email = new Email()));
     $this->contextAccessor->expects($this->at(1))->method('getValue')->with($this->equalTo($fakeContext), $this->equalTo('$.target_entity'))->will($this->returnValue($target = new User()));
     $this->contextAccessor->expects($this->never())->method('setValue');
     $this->activityListChainProvider->expects($this->any())->method('getActivityListEntitiesByActivityEntity')->with($this->equalTo($email))->will($this->returnValue($list = new ActivityList()));
     $this->entityManager->expects($this->once())->method('persist')->with($this->equalTo($list));
     $this->emailActivityManager->expects($this->once())->method('addAssociation')->with($this->equalTo($email), $this->equalTo($target))->will($this->returnValue(true));
     $this->action->initialize($options);
     $this->action->execute($fakeContext);
 }
示例#5
0
 /**
  * @param PostFlushEventArgs $event
  */
 protected function addAssociationWithEmailActivity(PostFlushEventArgs $event)
 {
     if ($this->entitiesOwnedByEmail) {
         $em = $event->getEntityManager();
         foreach ($this->entitiesOwnedByEmail as $entity) {
             $emails = $this->emailOwnersProvider->getEmailsByOwnerEntity($entity);
             foreach ($emails as $email) {
                 $this->emailActivityManager->addAssociation($email, $entity);
             }
         }
         $this->entitiesOwnedByEmail = [];
         $em->flush();
     }
 }
示例#6
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;
 }
 public function testGetContextsDiff()
 {
     $user = new TestUser();
     $user->setId(1);
     $anotherUser = new TestUser();
     $anotherUser->setId(2);
     $thirdUser = new TestUser();
     $thirdUser->setId(3);
     $contexts = [$user, $anotherUser, $thirdUser];
     $otherContexts = [$user, $thirdUser];
     $result = $this->manager->getContextsDiff($contexts, $otherContexts);
     $this->assertEquals($result, [$anotherUser]);
     $contexts = ["one", "two", "three"];
     $otherContexts = ["two", "three"];
     $result = $this->manager->getContextsDiff($contexts, $otherContexts);
     $this->assertEquals($result, ["one"]);
 }
示例#8
0
 /**
  * @param OnFlushEventArgs $event
  */
 public function onFlush(OnFlushEventArgs $event)
 {
     $this->emailOwnerManager->handleOnFlush($event);
     $this->emailActivityManager->handleOnFlush($event);
 }
示例#9
0
 /**
  * @param PostFlushEventArgs $event
  */
 public function postFlush(PostFlushEventArgs $event)
 {
     $this->emailThreadManager->handlePostFlush($event);
     $this->emailActivityManager->handlePostFlush($event);
 }