public function testUidValidityGetterAndSetter() { $imapFolder = new ImapEmailFolder(); $this->assertNull($imapFolder->getUidValidity()); $imapFolder->setUidValidity(123); $this->assertEquals(123, $imapFolder->getUidValidity()); }
/** * @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); } } } }
/** * 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; }
/** * @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; }