/**
  * {@inheritdoc}
  */
 public function getRecipients(EmailRecipientsProviderArgs $args)
 {
     if (!$args->getRelatedEntity()) {
         return [];
     }
     return EmailRecipientsHelper::filterRecipients($args, $this->relatedEmailsProvider->getRecipients($args->getRelatedEntity(), 2, false, $args->getOrganization()));
 }
 /**
  * @dataProvider dataProvider
  */
 public function testGetRecipients(EmailRecipientsProviderArgs $args, array $expectedEmails)
 {
     $customer = new Customer();
     $customers = [$customer];
     $customerRepository = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $customerRepository->expects($this->once())->method('findBy')->with(['account' => $args->getRelatedEntity()])->will($this->returnValue($customers));
     $this->registry->expects($this->once())->method('getRepository')->with('OroCRMMagentoBundle:Customer')->will($this->returnValue($customerRepository));
     $this->relatedEmailsProvider->expects($this->once())->method('getRecipients')->with($customer, 2)->will($this->returnValue($expectedEmails));
     $this->assertEquals($expectedEmails, $this->emailRecipientsProvider->getRecipients($args));
 }
 /**
  * {@inheritdoc}
  */
 public function getRecipients(EmailRecipientsProviderArgs $args)
 {
     if (!$args->getRelatedEntity() instanceof Account) {
         return [];
     }
     $customers = $this->getCustomerRepository()->findBy(['account' => $args->getRelatedEntity()]);
     $recipients = [];
     foreach ($customers as $customer) {
         $recipients = array_merge($recipients, EmailRecipientsHelper::filterRecipients($args, $this->relatedEmailsProvider->getRecipients($customer, 2, false, $args->getOrganization())));
     }
     return $recipients;
 }
 /**
  * @dataProvider emailProvider
  */
 public function testGetRecipientsShouldReturnRecipients(EmailRecipientsProviderArgs $args, array $senderEmails, array $resultEmails, array $expectedResult)
 {
     $user = new User();
     $this->securityFacade->expects($this->once())->method('getLoggedUser')->will($this->returnValue($user));
     $this->relatedEmailsProvider->expects($this->once())->method('getEmails')->with($user)->will($this->returnValue($senderEmails));
     $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock();
     $qb->expects($this->once())->method('setMaxResults')->with($args->getLimit())->will($this->returnSelf());
     $emailRecipientRepository = $this->getMockBuilder('Oro\\Bundle\\EmailBundle\\Entity\\Repository\\EmailRecipientRepository')->disableOriginalConstructor()->getMock();
     $emailRecipientRepository->expects($this->once())->method('getEmailsUsedInLast30DaysQb')->with(array_keys($senderEmails), [], $args->getQuery())->will($this->returnValue($qb));
     $query = $this->getMockBuilder('Doctrine\\ORM\\AbstractQuery')->disableOriginalConstructor()->setMethods(['getResult'])->getMockForAbstractClass();
     $query->expects($this->once())->method('getResult')->will($this->returnValue($resultEmails));
     $this->aclHelper->expects($this->once())->method('apply')->with($qb)->will($this->returnValue($query));
     $this->registry->expects($this->once())->method('getRepository')->with('OroEmailBundle:EmailRecipient')->will($this->returnValue($emailRecipientRepository));
     $this->emailRecipientsHelper->expects($this->any())->method('isObjectAllowed')->will($this->returnValue(true));
     $this->assertEquals($expectedResult, $this->emailRecipientsProvider->getRecipients($args));
 }
 /**
  * {@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;
 }
 /**
  * {@inheritdoc}
  */
 public function getRecipients(EmailRecipientsProviderArgs $args)
 {
     if (!$args->getRelatedEntity()) {
         return [];
     }
     $relatedEntity = $args->getRelatedEntity();
     $relatedEntityClass = ClassUtils::getClass($relatedEntity);
     $em = $this->registry->getManagerForClass($relatedEntityClass);
     $metadata = $em->getClassMetadata($relatedEntityClass);
     $idNames = $metadata->getIdentifierFieldNames();
     if (count($idNames) !== 1) {
         return [];
     }
     $propertyAccessor = PropertyAccess::createPropertyAccessor();
     $relatedEntityId = $propertyAccessor->getValue($relatedEntity, $idNames[0]);
     $recipients = [];
     $activities = $this->activityManager->getActivities($relatedEntityClass);
     $activityListQb = $this->createActivityListQb($relatedEntityClass, $relatedEntityId);
     $activityListDql = $activityListQb->getQuery()->getDQL();
     $limit = $args->getLimit();
     $activityKeys = array_keys($activities);
     foreach ($activityKeys as $class) {
         $qb = $this->getRepository($class)->createQueryBuilder('e');
         $qb->andWhere($qb->expr()->exists($activityListDql))->setParameter('related_activity_class', $class);
         foreach ($activityListQb->getParameters() as $param) {
             $qb->setParameter($param->getName(), $param->getValue(), $param->getType());
         }
         $iterator = new BufferedQueryResultIterator($qb);
         $iterator->setBufferSize($limit);
         foreach ($iterator as $entity) {
             $recipients = array_merge($recipients, EmailRecipientsHelper::filterRecipients($args, $this->relatedEmailsProvider->getRecipients($entity, 2, false, $args->getOrganization())));
             $limit -= count($recipients);
             if ($limit <= 0) {
                 break 2;
             }
         }
     }
     return $recipients;
 }
 /**
  * @param QueryBuilder $qb
  * @param EmailRecipientsProviderArgs $args
  *
  * @return array
  */
 protected function getRestrictedResult(QueryBuilder $qb, EmailRecipientsProviderArgs $args)
 {
     if ($args->getOrganization()) {
         $qb->andWhere('o.id = :organization')->setParameter('organization', $args->getOrganization());
     }
     return $this->aclHelper->apply($qb)->getResult();
 }