/** * Performs a synchronization of emails for the given email origin. * * @param EmailOrigin $origin * @throws \Exception */ protected function doSyncOrigin(EmailOrigin $origin) { $this->impersonateOrganization($origin->getOrganization()); $processor = $this->createSynchronizationProcessor($origin); if ($processor instanceof LoggerAwareInterface) { $processor->setLogger($this->logger); } try { if ($this->changeOriginSyncState($origin, self::SYNC_CODE_IN_PROCESS)) { $syncStartTime = $this->getCurrentUtcDateTime(); $processor->process($origin, $syncStartTime); $this->changeOriginSyncState($origin, self::SYNC_CODE_SUCCESS, $syncStartTime); } else { $this->logger->notice('Skip because it is already in process.'); } } catch (SyncFolderTimeoutException $ex) { $this->logger->notice($ex->getMessage()); $this->changeOriginSyncState($origin, self::SYNC_CODE_SUCCESS); throw $ex; } catch (\Exception $ex) { try { $this->changeOriginSyncState($origin, self::SYNC_CODE_FAILURE); } catch (\Exception $innerEx) { // ignore any exception here $this->logger->error(sprintf('Cannot set the fail state. Error: %s.', $innerEx->getMessage()), ['exception' => $innerEx]); } $this->logger->error(sprintf('The synchronization failed. Error: %s.', $ex->getMessage()), ['exception' => $ex]); throw $ex; } }
/** * @param EmailOrigin $emailOrigin */ protected function initEnv(EmailOrigin $emailOrigin) { $this->currentUser = $this->em->getReference('Oro\\Bundle\\UserBundle\\Entity\\User', $emailOrigin->getOwner()->getId()); $this->currentOrganization = $this->em->getReference('Oro\\Bundle\\OrganizationBundle\\Entity\\Organization', $emailOrigin->getOrganization()->getId()); }
/** * @param EmailModel $model * @param \DateTime $messageDate * @param EmailOrigin $origin * * @return EmailUser */ protected function createEmailUser(EmailModel $model, $messageDate, EmailOrigin $origin) { $emailUser = $this->emailEntityBuilder->emailUser($model->getSubject(), $model->getFrom(), $model->getTo(), $messageDate, $messageDate, $messageDate, Email::NORMAL_IMPORTANCE, $model->getCc(), $model->getBcc(), $origin->getOwner(), $origin->getOrganization()); if ($origin instanceof UserEmailOrigin && $origin->getMailbox() !== null) { $emailUser->setOwner(null); $emailUser->setMailboxOwner($origin->getMailbox()); } return $emailUser; }