/** * {@inheritdoc} */ public function select(EmailFolder $folder, OroEntityManager $em) { /** @var UserEmailOrigin $origin */ $origin = $folder->getOrigin(); $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); return new ImapEmailFlagManager($this->connectorFactory->createImapConnector($config), $em); }
/** * {@inheritdoc} */ public function select(EmailFolder $folder, OroEntityManager $em) { /** @var ImapEmailOrigin $origin */ $origin = $folder->getOrigin(); $config = new ImapConfig($origin->getHost(), $origin->getPort(), $origin->getSsl(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword())); return new ImapEmailFlagManager($this->connectorFactory->createImapConnector($config), $em); }
public function testOriginGetterAndSetter() { $origin = $this->getMock('Oro\\Bundle\\EmailBundle\\Entity\\EmailOrigin'); $entity = new EmailFolder(); $entity->setOrigin($origin); $this->assertTrue($origin === $entity->getOrigin()); }
/** * {@inheritdoc} */ public function loadEmailBody(EmailFolder $folder, Email $email, EntityManager $em) { /** @var UserEmailOrigin $origin */ $origin = $folder->getOrigin(); $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); $manager = new ImapEmailManager($this->connectorFactory->createImapConnector($config)); $manager->selectFolder($folder->getFullName()); $repo = $em->getRepository('OroImapBundle:ImapEmail'); $query = $repo->createQueryBuilder('e')->select('e.uid')->innerJoin('e.imapFolder', 'if')->where('e.email = ?1 AND if.folder = ?2')->setParameter(1, $email)->setParameter(2, $folder)->getQuery(); $loadedEmail = $manager->findEmail($query->getSingleScalarResult()); if (null === $loadedEmail) { throw new EmailBodyNotFoundException($email); } $builder = new EmailBodyBuilder(); $builder->setEmailBody($loadedEmail->getBody()->getContent(), $loadedEmail->getBody()->getBodyIsText()); foreach ($loadedEmail->getAttachments() as $attachment) { $builder->addEmailAttachment($attachment->getFileName(), $attachment->getContent(), $attachment->getContentType(), $attachment->getContentTransferEncoding(), $attachment->getContentId()); } return $builder->getEmailBody(); }
/** * @param EmailFolder $folder * @param array $messages * @return EmailUser[] */ public function getEmailUsersByFolderAndMessageIds(EmailFolder $folder, array $messages) { return $this->createQueryBuilder('eu')->leftJoin('eu.email', 'email')->andWhere('email.messageId IN (:messageIds)')->andWhere('eu.origin IN (:origin)')->setParameter('messageIds', $messages)->setParameter('origin', $folder->getOrigin())->getQuery()->getResult(); }
/** * Cleans doctrine's UOF to prevent: * - "eating" too much memory * - storing too many object which cause slowness of sync process * Tracks time when last batch was saved. * Calculates time between batch saves. * * @param bool $isFolderSyncComplete * @param null|EmailFolder $folder */ protected function cleanUp($isFolderSyncComplete = false, $folder = null) { $this->emailEntityBuilder->getBatch()->clear(); /** * Clear entity manager. */ $map = $this->entitiesToClear(); foreach ($map as $entityClass) { $this->em->clear($entityClass); } /** * In case folder sync completed and batch save time exceeded limit - throws exception. */ if ($isFolderSyncComplete && $folder != null && $this->dbBatchSaveTime > 0 && $this->dbBatchSaveTime > self::DB_BATCH_TIME) { throw new SyncFolderTimeoutException($folder->getOrigin()->getId(), $folder->getFullName()); } elseif ($isFolderSyncComplete) { /** * In case folder sync completed without batch save time exceed - reset dbBatchSaveTime. */ $this->dbBatchSaveTime = -1; } else { /** * After batch save - calculate time difference between batches */ if ($this->dbBatchSaveTimestamp !== 0) { $this->dbBatchSaveTime = time() - $this->dbBatchSaveTimestamp; $this->logger->info(sprintf('Batch save time: "%d" seconds.', $this->dbBatchSaveTime)); } } $this->dbBatchSaveTimestamp = time(); }