/** * {@inheritdoc} */ public function getRecipients(EmailRecipientsProviderArgs $args) { if (!$args->getRelatedEntity()) { return []; } return EmailRecipientsHelper::filterRecipients($args, $this->relatedEmailsProvider->getRecipients($args->getRelatedEntity(), 2, false, $args->getOrganization())); }
/** * {@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; }
/** * {@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; }