コード例 #1
0
 public function testFolderGetterAndSetter()
 {
     $folder = new EmailFolder();
     $imapFolder = new ImapEmailFolder();
     $this->assertNull($imapFolder->getFolder());
     $imapFolder->setFolder($folder);
     $this->assertSame($folder, $imapFolder->getFolder());
 }
コード例 #2
0
 /**
  * @param ArrayCollection|EmailFolder[] $folders
  * @param ImapEmailFolderManager $manager
  */
 protected function createImapEmailFolders($folders, ImapEmailFolderManager $manager)
 {
     foreach ($folders as $folder) {
         if ($folder->getId() === null) {
             $uidValidity = $manager->getUidValidity($folder);
             if ($uidValidity !== null) {
                 $imapEmailFolder = new ImapEmailFolder();
                 $imapEmailFolder->setUidValidity($uidValidity);
                 $imapEmailFolder->setFolder($folder);
                 $this->doctrine->getManager()->persist($imapEmailFolder);
             }
             if ($folder->hasSubFolders()) {
                 $this->createImapEmailFolders($folder->getSubFolders(), $manager);
             }
         }
     }
 }
コード例 #3
0
 /**
  * Performs synchronization of folders
  *
  * @param EmailOrigin $origin
  *
  * @return ImapEmailFolder[] The list of folders for which emails need to be synchronized
  */
 protected function syncFolders(EmailOrigin $origin)
 {
     $folders = [];
     $existingImapFolders = $this->getExistingImapFolders($origin);
     $srcFolders = $this->getFolders();
     foreach ($srcFolders as $srcFolder) {
         $folderFullName = $srcFolder->getGlobalName();
         $uidValidity = $this->getUidValidity($srcFolder);
         // check if the current folder already exist and has no changes,
         // if so, remove it from the list of existing folders
         $imapFolder = null;
         foreach ($existingImapFolders as $key => $existingImapFolder) {
             if ($existingImapFolder->getUidValidity() === $uidValidity && $existingImapFolder->getFolder()->getFullName() === $folderFullName) {
                 $imapFolder = $existingImapFolder;
                 unset($existingImapFolders[$key]);
                 break;
             }
         }
         // check if new folder need to be created
         if (!$imapFolder) {
             $this->logger->notice(sprintf('Persisting "%s" folder ...', $folderFullName));
             $folder = new EmailFolder();
             $folder->setFullName($folderFullName)->setName($srcFolder->getLocalName())->setType($srcFolder->guessFolderType());
             $origin->addFolder($folder);
             $this->em->persist($folder);
             $imapFolder = new ImapEmailFolder();
             $imapFolder->setFolder($folder);
             $imapFolder->setUidValidity($uidValidity);
             $this->em->persist($imapFolder);
             $this->logger->notice(sprintf('The "%s" folder was persisted.', $folderFullName));
         }
         // save folder to the list of folders to be synchronized
         $folders[] = $imapFolder;
     }
     // mark the rest of existing folders as outdated
     foreach ($existingImapFolders as $imapFolder) {
         $this->logger->notice(sprintf('Mark "%s" folder as outdated.', $imapFolder->getFolder()->getFullName()));
         $imapFolder->getFolder()->setOutdatedAt(new \DateTime('now', new \DateTimeZone('UTC')));
         $this->em->persist($imapFolder->getFolder());
     }
     $this->em->persist($origin);
     $this->em->flush();
     return $folders;
 }
コード例 #4
0
 /**
  * @param EmailFolderModel $emailFolderModel
  *
  * @return ImapEmailFolder
  */
 protected function createImapEmailFolder(EmailFolderModel $emailFolderModel)
 {
     $imapEmailFolder = new ImapEmailFolder();
     $emailFolder = $emailFolderModel->getEmailFolder();
     $imapEmailFolder->setFolder($emailFolder);
     if ($emailFolderModel->hasParentFolderModel()) {
         $emailFolder->setParentFolder($emailFolderModel->getParentFolderModel()->getEmailFolder());
     }
     $imapEmailFolder->setUidValidity($emailFolderModel->getUidValidity());
     return $imapEmailFolder;
 }
コード例 #5
0
 /**
  * @param string   $folderName
  * @param string   $folderFullName
  * @param int      $uidValidity
  * @param int|null $id
  *
  * @return ImapEmailFolder
  */
 protected function createImapFolder($folderName, $folderFullName, $uidValidity, $id = null)
 {
     $folder = new EmailFolder();
     $folder->setName($folderName)->setFullName($folderFullName);
     $imapFolder = new ImapEmailFolder();
     $imapFolder->setFolder($folder)->setUidValidity($uidValidity);
     if ($id !== null) {
         ReflectionUtil::setId($imapFolder, $id);
     }
     return $imapFolder;
 }
 /**
  * Gets ImapEmailFolder entity connected to the given EmailFolder entity
  *
  * @param EmailFolder $folder
  * @return ImapEmailFolder
  */
 protected function getImapFolder(EmailFolder $folder)
 {
     $this->log->notice(sprintf('Load IMAP folder for "%s".', $folder->getFullName()));
     $repo = $this->em->getRepository('OroImapBundle:ImapEmailFolder');
     $query = $repo->createQueryBuilder('f')->where('f.folder = ?1')->setParameter(1, $folder)->getQuery();
     try {
         $imapFolder = $query->getSingleResult();
     } catch (NoResultException $ex) {
         $this->log->notice('IMAP folder does not exist. Create a new one.');
         $imapFolder = new ImapEmailFolder();
         $imapFolder->setFolder($folder);
     }
     return $imapFolder;
 }