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; }
/** * @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)); }
/** * 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; } } }
/** * 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]; }
/** * 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']); }