public function testAddAssociation() { $email = $this->getEmailEntity(); $target = new TestUser(); $this->activityManager->expects($this->once())->method('addActivityTarget')->with($this->identicalTo($email), $this->identicalTo($target))->will($this->returnValue(true)); $this->assertTrue($this->manager->addAssociation($email, $target)); }
/** * 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; }
/** * @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; }