Ejemplo n.º 1
0
 public function testFindEmailOwnerNotFound()
 {
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $provider1 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider1->expects($this->once())->method('findEmailOwner')->with($this->identicalTo($em), $this->equalTo('test'))->will($this->returnValue(null));
     $provider2 = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\Provider\\EmailOwnerProviderInterface');
     $provider2->expects($this->once())->method('findEmailOwner')->with($this->identicalTo($em), $this->equalTo('test'))->will($this->returnValue(null));
     $provider = new EmailOwnerProvider($this->getEmailOwnerProviderStorageMock(array($provider1, $provider2)));
     $this->assertNull($provider->findEmailOwner($em, 'test'));
 }
 /**
  * {@inheritdoc}
  */
 public function getRecipients(EmailRecipientsProviderArgs $args)
 {
     if (null === ($user = $this->securityFacade->getLoggedUser())) {
         return [];
     }
     $userEmailAddresses = array_keys($this->relatedEmailsProvider->getEmails($user, 1, true));
     $recipientsQb = $this->getEmailRecipientRepository()->getEmailsUsedInLast30DaysQb($userEmailAddresses, [], $args->getQuery())->setMaxResults($args->getLimit());
     $emails = $this->emailsFromResult($this->aclHelper->apply($recipientsQb)->getResult());
     $result = [];
     foreach ($emails as $email => $name) {
         $owner = $this->emailOwnerProvider->findEmailOwner($this->registry->getManager(), $email);
         if (!$this->emailRecipientsHelper->isObjectAllowed($args, $owner)) {
             continue;
         }
         $result[] = new Recipient($email, $name, $this->createRecipientEntity($owner));
     }
     return $result;
 }
Ejemplo n.º 3
0
 /**
  * @param string $name
  * @param Organization|null $organization
  *
  * @return Recipient
  */
 public function createRecipientFromEmail($name, Organization $organization = null)
 {
     $em = $this->registry->getManager();
     $email = $this->addressHelper->extractPureEmailAddress($name);
     $owner = $this->emailOwnerProvider->findEmailOwner($em, $email);
     if (!$owner || !$this->isObjectAllowedForOrganization($owner, $organization)) {
         return null;
     }
     $metadata = $em->getClassMetadata(ClassUtils::getClass($owner));
     return new Recipient($email, $name, $this->createRecipientEntity($owner, $metadata));
 }
Ejemplo n.º 4
0
 /**
  * Find existing email origin entity by email string or create and persist new one.
  *
  * @param string                $email
  * @param OrganizationInterface $organization
  * @param string                $originName
  * @param boolean               $enableUseUserEmailOrigin
  *
  * @return EmailOrigin
  */
 public function getEmailOrigin($email, OrganizationInterface $organization = null, $originName = InternalEmailOrigin::BAP, $enableUseUserEmailOrigin = true)
 {
     $originKey = $originName . $email;
     if (!$organization && $this->securityFacade !== null && $this->securityFacade->getOrganization()) {
         $organization = $this->securityFacade->getOrganization();
     }
     if (!array_key_exists($originKey, $this->origins)) {
         $emailOwner = $this->emailOwnerProvider->findEmailOwner($this->getEntityManager(), $this->emailAddressHelper->extractPureEmailAddress($email));
         $origin = $this->emailOriginHelper->findEmailOrigin($emailOwner, $organization, $originName, $enableUseUserEmailOrigin);
         $this->origins[$originKey] = $origin;
     }
     return $this->origins[$originKey];
 }
 /**
  * Tell the given EntityManager to manage EmailAddress objects in this batch
  *
  * @param EntityManager $em
  */
 protected function persistAddresses(EntityManager $em)
 {
     $repository = $this->emailAddressManager->getEmailAddressRepository($em);
     foreach ($this->addresses as $key => $obj) {
         /** @var EmailAddress $dbObj */
         $dbObj = $repository->findOneBy(['email' => $obj->getEmail()]);
         if ($dbObj === null) {
             $obj->setOwner($this->emailOwnerProvider->findEmailOwner($em, $obj->getEmail()));
             $em->persist($obj);
         } else {
             $this->updateAddressReferences($obj, $dbObj);
             $this->addresses[$key] = $dbObj;
         }
     }
 }
Ejemplo n.º 6
0
 /**
  * Find existing email origin entity by email string or create and persist new one.
  *
  * @param string $email
  * @param string $originName
  * @param boolean $enableUseUserEmailOrigin
  *
  * @return EmailOrigin
  */
 public function getEmailOrigin($email, $originName = InternalEmailOrigin::BAP, $enableUseUserEmailOrigin = true)
 {
     $originKey = $originName . $email;
     $organization = $this->securityFacade !== null && $this->securityFacade->getOrganization() ? $this->securityFacade->getOrganization() : null;
     if (!array_key_exists($originKey, $this->origins)) {
         $emailOwner = $this->emailOwnerProvider->findEmailOwner($this->getEntityManager(), $this->emailAddressHelper->extractPureEmailAddress($email));
         if ($emailOwner instanceof User) {
             $origin = $this->getPreferedOrigin($enableUseUserEmailOrigin, $emailOwner, $organization);
         } else {
             $origin = $this->getEntityManager()->getRepository('OroEmailBundle:InternalEmailOrigin')->findOneBy(['internalName' => $originName]);
         }
         $this->origins[$originKey] = $origin;
     }
     return $this->origins[$originKey];
 }
Ejemplo n.º 7
0
 /**
  * Find existing email origin entity by email string or create and persist new one.
  *
  * @param string $email
  * @param string $originName
  * @return EmailOrigin
  */
 public function getEmailOrigin($email, $originName = InternalEmailOrigin::BAP)
 {
     $originKey = $originName . $email;
     if (!array_key_exists($originKey, $this->origins)) {
         $emailOwner = $this->emailOwnerProvider->findEmailOwner($this->getEntityManager(), $this->emailAddressHelper->extractPureEmailAddress($email));
         if ($emailOwner instanceof User) {
             $origins = $emailOwner->getEmailOrigins()->filter(function ($item) {
                 return $item instanceof InternalEmailOrigin;
             });
             $origin = $origins->isEmpty() ? null : $origins->first();
             if ($origin == null) {
                 $origin = $this->createUserInternalOrigin($emailOwner);
             }
         } else {
             $origin = $this->getEntityManager()->getRepository('OroEmailBundle:InternalEmailOrigin')->findOneBy(array('internalName' => $originName));
         }
         $this->origins[$originKey] = $origin;
     }
     return $this->origins[$originKey];
 }
 /**
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testPersist()
 {
     $origin = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\EmailOrigin')->getMock();
     $origin->expects($this->any())->method('getId')->will($this->returnValue(1));
     $folder = new EmailFolder();
     $folder->setName('Exist');
     $folder->setFullName('Exist');
     $folder->setOrigin($origin);
     $this->batch->addFolder($folder);
     $newFolder = new EmailFolder();
     $newFolder->setName('New');
     $newFolder->setFullName('New');
     $newFolder->setOrigin($origin);
     $this->batch->addFolder($newFolder);
     $dbFolder = new EmailFolder();
     $dbFolder->setName('DbExist');
     $dbFolder->setFullName('DbExist');
     $dbFolder->setOrigin($origin);
     $addr = $this->addrManager->newEmailAddress()->setEmail('Exist');
     $this->batch->addAddress($addr);
     $newAddr = $this->addrManager->newEmailAddress()->setEmail('New');
     $this->batch->addAddress($newAddr);
     $dbAddr = $this->addrManager->newEmailAddress()->setEmail('DbExist');
     $email1 = new Email();
     $email1->setXMessageId('email1');
     $email1->setMessageId('email1');
     $email1->setFromEmailAddress($addr);
     $emailUser1 = new EmailUser();
     $emailUser1->addFolder($folder);
     $emailUser1->setOrigin($origin);
     $email1->addEmailUser($emailUser1);
     $this->addEmailRecipient($email1, $addr);
     $this->addEmailRecipient($email1, $newAddr);
     $this->batch->addEmailUser($emailUser1);
     $email2 = new Email();
     $email2->setXMessageId('email2');
     $email2->setMessageId('email2');
     $email2->setFromEmailAddress($newAddr);
     $emailUser2 = new EmailUser();
     $emailUser2->addFolder($newFolder);
     $emailUser2->setOrigin($origin);
     $email2->addEmailUser($emailUser2);
     $this->addEmailRecipient($email2, $addr);
     $this->addEmailRecipient($email2, $newAddr);
     $this->batch->addEmailUser($emailUser2);
     $email3 = new Email();
     $email3->setXMessageId('email3');
     $email3->setMessageId('some_email');
     $email3->setFromEmailAddress($newAddr);
     $emailUser3 = new EmailUser();
     $emailUser3->addFolder($folder);
     $email3->addEmailUser($emailUser3);
     $this->addEmailRecipient($email3, $addr);
     $this->addEmailRecipient($email3, $newAddr);
     $this->batch->addEmailUser($emailUser3);
     $email4 = new Email();
     $email4->setXMessageId('email4');
     $email4->setMessageId('some_email');
     $email4->setFromEmailAddress($newAddr);
     $emailUser4 = new EmailUser();
     $emailUser4->addFolder($folder);
     $email4->addEmailUser($emailUser4);
     $this->addEmailRecipient($email4, $addr);
     $this->addEmailRecipient($email4, $newAddr);
     $this->batch->addEmailUser($emailUser4);
     $existingEmail = new Email();
     $existingEmail->setXMessageId('existing_email');
     $existingEmail->setMessageId('some_email');
     $existingEmail->setFromEmailAddress($newAddr);
     $emailUser5 = new EmailUser();
     $emailUser5->addFolder($dbFolder);
     $existingEmail->addEmailUser($emailUser5);
     $this->addEmailRecipient($existingEmail, $addr);
     $this->addEmailRecipient($existingEmail, $newAddr);
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $folderRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $addrRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $emailRepo = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $em->expects($this->exactly(3))->method('getRepository')->will($this->returnValueMap(array(array('OroEmailBundle:EmailFolder', $folderRepo), array('Oro\\Bundle\\EmailBundle\\Tests\\Unit\\Entity\\TestFixtures\\TestEmailAddressProxy', $addrRepo), array('OroEmailBundle:Email', $emailRepo))));
     $folderRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbFolder) {
         return $c['fullName'] === 'Exist' ? $dbFolder : null;
     }));
     $addrRepo->expects($this->exactly(2))->method('findOneBy')->will($this->returnCallback(function ($c) use(&$dbAddr) {
         return $c['email'] === 'Exist' ? $dbAddr : null;
     }));
     $emailRepo->expects($this->once())->method('findBy')->with(array('messageId' => array('email1', 'email2', 'some_email')))->will($this->returnValue([$existingEmail]));
     $owner = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailOwnerInterface');
     $this->ownerProvider->expects($this->any())->method('findEmailOwner')->will($this->returnValue($owner));
     $this->batch->persist($em);
     $this->assertCount(1, $email1->getEmailUsers());
     $this->assertCount(1, $email2->getEmailUsers());
     $this->assertTrue($origin === $emailUser1->getOrigin());
     $this->assertTrue($origin === $emailUser2->getOrigin());
     $this->assertSame($newFolder, $emailUser2->getFolders()->first());
     $this->assertSame($dbFolder, $emailUser1->getFolders()->first());
     $this->assertTrue($dbAddr === $email1->getFromEmailAddress());
     $this->assertNull($email1->getFromEmailAddress()->getOwner());
     $this->assertTrue($newAddr === $email2->getFromEmailAddress());
     $this->assertTrue($owner === $email2->getFromEmailAddress()->getOwner());
     $email1Recipients = $email1->getRecipients();
     $this->assertTrue($dbAddr === $email1Recipients[0]->getEmailAddress());
     $this->assertNull($email1Recipients[0]->getEmailAddress()->getOwner());
     $this->assertTrue($newAddr === $email1Recipients[1]->getEmailAddress());
     $this->assertTrue($owner === $email1Recipients[1]->getEmailAddress()->getOwner());
     $email2Recipients = $email2->getRecipients();
     $this->assertTrue($dbAddr === $email2Recipients[0]->getEmailAddress());
     $this->assertNull($email2Recipients[0]->getEmailAddress()->getOwner());
     $this->assertTrue($newAddr === $email2Recipients[1]->getEmailAddress());
     $this->assertTrue($owner === $email2Recipients[1]->getEmailAddress()->getOwner());
     $changes = $this->batch->getChanges();
     $this->assertCount(3, $changes);
     $this->assertSame($folder, $changes[0]['old']);
     $this->assertSame($dbFolder, $changes[0]['new']);
     $this->assertSame($email3, $changes[1]['old']);
     $this->assertSame($existingEmail, $changes[1]['new']);
     $this->assertSame($email4, $changes[2]['old']);
     $this->assertSame($existingEmail, $changes[2]['new']);
 }