Exemplo n.º 1
0
 /**
  * Get email entities from owner entity
  *
  * @param object $entity
  * @return array
  */
 public function getEmailsByOwnerEntity($entity)
 {
     $ownerColumnName = null;
     foreach ($this->emailOwnerStorage->getProviders() as $provider) {
         if ($this->activityListChainProvider->isSupportedTargetEntity($entity) && $provider->getEmailOwnerClass() === ClassUtils::getClass($entity)) {
             $ownerColumnName = $this->emailOwnerStorage->getEmailOwnerFieldName($provider);
             break;
         }
     }
     if ($ownerColumnName === null) {
         return [];
     }
     return $this->registry->getRepository('OroEmailBundle:Email')->getEmailsByOwnerEntity($entity, $ownerColumnName);
 }
 /**
  * @param string[] $emailsToLoad
  *
  * @return array
  *  key   = email address
  *  value = array
  *      known => true/false
  *          false if the address belongs to user only
  *          true if the address belongs to not excluded owners
  *      user  => user id
  */
 protected function getKnownEmailAddresses(array $emailsToLoad)
 {
     $repo = $this->emailAddressManager->getEmailAddressRepository($this->em);
     $qb = $repo->createQueryBuilder('a')->where('a.hasOwner = :hasOwner AND a.email IN (:emails)')->setParameter('hasOwner', true)->setParameter('emails', $emailsToLoad);
     $select = 'a.email';
     $userIdField = null;
     $mailboxIdField = null;
     $ownerIdFields = [];
     foreach ($this->emailOwnerProviderStorage->getProviders() as $provider) {
         $ownerClass = $provider->getEmailOwnerClass();
         $isUser = $ownerClass === 'Oro\\Bundle\\UserBundle\\Entity\\User';
         $isMailbox = $ownerClass === 'Oro\\Bundle\\EmailBundle\\Entity\\Mailbox';
         $field = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         if ($isUser) {
             $userIdField = $field;
         }
         if ($isMailbox) {
             $mailboxIdField = $field;
         }
         if (isset($this->exclusions[$ownerClass])) {
             if ($isUser) {
                 $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             } else {
                 $qb->andWhere(sprintf('a.%s IS NULL', $field));
             }
         } else {
             $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             $ownerIdFields[] = $field;
         }
     }
     $qb->select($select);
     $data = $qb->getQuery()->getArrayResult();
     $result = $this->prepareKnownEmailAddressesData($data, $ownerIdFields, $userIdField, $mailboxIdField);
     return $result;
 }
Exemplo n.º 3
0
 /**
  * Constructor.
  *
  * @param EmailOwnerProviderStorage $emailOwnerProviderStorage
  * @param EmailAddressManager       $emailAddressManager
  */
 public function __construct(EmailOwnerProviderStorage $emailOwnerProviderStorage, EmailAddressManager $emailAddressManager)
 {
     foreach ($emailOwnerProviderStorage->getProviders() as $provider) {
         $fieldName = $emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         $this->emailOwnerClasses[$fieldName] = $provider->getEmailOwnerClass();
     }
     $this->emailAddressManager = $emailAddressManager;
 }
Exemplo n.º 4
0
 /**
  * @param string $emailFromTableAlias EmailAddress table alias of joined Email#fromEmailAddress association
  *
  * @return string
  */
 protected function getFromEmailExpression($emailFromTableAlias)
 {
     $providers = $this->emailOwnerProviderStorage->getProviders();
     if (empty($providers)) {
         return sprintf('%s.email', $emailFromTableAlias);
     }
     $expressionsByOwner = [];
     foreach ($providers as $provider) {
         $relationAlias = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         $expressionsByOwner[$relationAlias] = $this->entityNameResolver->getNameDQL($provider->getEmailOwnerClass(), $relationAlias);
     }
     $expression = '';
     foreach ($expressionsByOwner as $alias => $expressionPart) {
         $expression .= sprintf('WHEN %s.%s IS NOT NULL THEN %s ', $emailFromTableAlias, $alias, $expressionPart);
     }
     $expression = sprintf('CASE %sELSE \'\' END', $expression);
     // if has owner then use expression to expose formatted name, use email otherwise
     return sprintf('CONCAT(\'\', CASE WHEN %1$s.hasOwner = true THEN (%2$s) ELSE %1$s.email END) as fromEmailExpression', $emailFromTableAlias, $expression);
 }
 /**
  * @param string[] $emailsToLoad
  *
  * @return array
  *  key   = email address
  *  value = array
  *      known => true/false
  *          false if the address belongs to user only
  *          true if the address belongs to not excluded owners
  *      user  => user id
  */
 protected function getKnownEmailAddresses(array $emailsToLoad)
 {
     $repo = $this->emailAddressManager->getEmailAddressRepository($this->em);
     $qb = $repo->createQueryBuilder('a')->where('a.hasOwner = :hasOwner AND a.email IN (:emails)')->setParameter('hasOwner', true)->setParameter('emails', $emailsToLoad);
     $select = 'a.email';
     $userIdField = null;
     $mailboxIdField = null;
     $ownerIdFields = [];
     foreach ($this->emailOwnerProviderStorage->getProviders() as $provider) {
         $ownerClass = $provider->getEmailOwnerClass();
         $isUser = $ownerClass === 'Oro\\Bundle\\UserBundle\\Entity\\User';
         $isMailbox = $ownerClass === 'Oro\\Bundle\\EmailBundle\\Entity\\Mailbox';
         $field = $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider);
         if ($isUser) {
             $userIdField = $field;
         }
         if ($isMailbox) {
             $mailboxIdField = $field;
         }
         if (isset($this->exclusions[$ownerClass])) {
             if ($isUser) {
                 $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             } else {
                 $qb->andWhere(sprintf('a.%s IS NULL', $field));
             }
         } else {
             $select .= sprintf(',IDENTITY(a.%1$s) AS %1$s', $field);
             $ownerIdFields[] = $field;
         }
     }
     $qb->select($select);
     $result = [];
     $data = $qb->getQuery()->getArrayResult();
     foreach ($data as $item) {
         $known = false;
         foreach ($ownerIdFields as $field) {
             if ($item[$field] !== null) {
                 $known = true;
                 break;
             }
         }
         $email = strtolower($item['email']);
         $userId = $item[$userIdField];
         $mailboxId = $item[$mailboxIdField];
         $result[$email] = $userId === null ? ['known' => $known] : ['known' => $known, 'user' => (int) $userId];
         if ($mailboxId !== null) {
             $result[$email]['mailbox'] = $mailboxId;
         }
     }
     return $result;
 }
Exemplo n.º 6
0
 /**
  * Create a proxy class for EmailAddress entity and save it in cache
  *
  * @param Filesystem        $fs
  * @param \Twig_Environment $twig
  */
 protected function processEmailAddressTemplate(Filesystem $fs, \Twig_Environment $twig)
 {
     // Ensure the cache directory exists
     if (!$fs->exists($this->entityCacheDir)) {
         $fs->mkdir($this->entityCacheDir, 0777);
     }
     $args = array();
     $providers = $this->emailOwnerProviderStorage->getProviders();
     foreach ($providers as $provider) {
         $args[] = array('targetEntity' => $provider->getEmailOwnerClass(), 'columnName' => $this->emailOwnerProviderStorage->getEmailOwnerColumnName($provider), 'fieldName' => $this->emailOwnerProviderStorage->getEmailOwnerFieldName($provider));
     }
     $className = sprintf($this->entityProxyNameTemplate, 'EmailAddress');
     $twigParams = array('namespace' => $this->entityCacheNamespace, 'className' => $className, 'owners' => $args);
     // generate a proxy class
     $content = $twig->render('EmailAddress.php.twig', $twigParams);
     $this->writeCacheFile(sprintf('%s%s%s.php', $this->entityCacheDir, DIRECTORY_SEPARATOR, $className), $content);
     // generate ORM mappings for a proxy class
     $content = $twig->render('EmailAddress.orm.yml.twig', $twigParams);
     $this->writeCacheFile(sprintf('%s%s%s.orm.yml', $this->entityCacheDir, DIRECTORY_SEPARATOR, $className), $content);
 }
Exemplo n.º 7
0
 /**
  * @return string
  */
 protected function getUserOwnerFieldName()
 {
     return $this->emailOwnerProviderStorage->getEmailOwnerFieldName(ArrayUtil::find(function (EmailOwnerProviderInterface $provider) {
         return $provider->getEmailOwnerClass() === 'Oro\\Bundle\\UserBundle\\Entity\\User';
     }, $this->emailOwnerProviderStorage->getProviders()));
 }