コード例 #1
0
ファイル: ImapClearManager.php プロジェクト: hugeval/platform
 /**
  * @param ImapEmailFolder $imapFolder
  */
 protected function clearFolder($imapFolder)
 {
     $folder = $imapFolder->getFolder();
     $query = $this->em->getRepository('OroEmailBundle:EmailUser')->getEmailUserByFolder($folder)->getQuery();
     $iterableResult = $query->iterate();
     $i = 0;
     while (($row = $iterableResult->next()) !== false) {
         /** @var EmailUser $emailUser */
         $emailUser = $row[0];
         $email = $emailUser->getEmail();
         $this->em->remove($emailUser);
         $imapEmails = $this->em->getRepository('OroImapBundle:ImapEmail')->findBy(['email' => $email, 'imapFolder' => $imapFolder]);
         foreach ($imapEmails as $imapEmail) {
             $this->em->remove($imapEmail);
         }
         if ($i % self::BATCH_SIZE === 0) {
             $this->em->flush();
             $this->em->clear('OroEmailBundle:EmailUser');
             $this->em->clear('OroImapBundle:ImapEmail');
         }
         ++$i;
     }
     if ($i > 0) {
         $this->logger->notice(sprintf('ImapFolder with ID %s cleared. Removed %d emails.', $imapFolder->getId(), $i));
     }
     $this->em->flush();
 }
コード例 #2
0
 /**
  * @param ImapEmailFolder $imapFolder
  */
 protected function clearFolder($imapFolder)
 {
     $folder = $imapFolder->getFolder();
     $limit = self::BATCH_SIZE;
     $offset = 0;
     $i = 0;
     while ($result = $this->em->getRepository('OroEmailBundle:EmailUser')->getEmailUserByFolder($folder, $limit, $offset)->getQuery()->getResult()) {
         foreach ($result as $emailUser) {
             /** @var EmailUser $emailUser */
             $emailUser->removeFolder($folder);
             $email = $emailUser->getEmail();
             if ($emailUser->getFolders()->isEmpty()) {
                 $this->em->remove($emailUser);
             }
             $imapEmails = $this->em->getRepository('OroImapBundle:ImapEmail')->findBy(['email' => $email, 'imapFolder' => $imapFolder]);
             foreach ($imapEmails as $imapEmail) {
                 $this->em->remove($imapEmail);
             }
             ++$i;
         }
         $this->em->flush();
         $this->cleanUp();
     }
     if ($i > 0) {
         $this->logger->notice(sprintf('ImapFolder with ID %s cleared. Removed %d emails.', $imapFolder->getId(), $i));
     }
     $this->em->flush();
     $this->cleanUp();
 }