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)); }
/** * @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(); } }
/** * 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); }
/** * @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(); } }
/** * 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"]); }
/** * @param OnFlushEventArgs $event */ public function onFlush(OnFlushEventArgs $event) { $this->emailOwnerManager->handleOnFlush($event); $this->emailActivityManager->handleOnFlush($event); }
/** * @param PostFlushEventArgs $event */ public function postFlush(PostFlushEventArgs $event) { $this->emailThreadManager->handlePostFlush($event); $this->emailActivityManager->handlePostFlush($event); }