/**
  * (@inherit)
  */
 public function setFlags(EmailFolder $folder, Email $email, $flags)
 {
     $repoImapEmail = $this->em->getRepository('OroImapBundle:ImapEmail');
     $uid = $repoImapEmail->getUid($folder->getId(), $email->getId());
     $this->connector->selectFolder($folder->getFullName());
     $this->connector->setFlags($uid, $flags);
 }
 /**
  * @param EmailFolder $folder
  *
  * @return QueryBuilder
  */
 public function getEmailUserByFolder($folder, $limit = null, $offset = null)
 {
     $queryBuilder = $this->createQueryBuilder('eu');
     $queryBuilder->leftJoin('eu.folders', 'folders')->andWhere($queryBuilder->expr()->in('folders', ':folder'))->setParameter('folder', $folder->getId())->groupBy('eu');
     if ($offset) {
         $queryBuilder->setFirstResult($offset);
     }
     if ($limit) {
         $queryBuilder->setMaxResults($limit);
     }
     return $queryBuilder;
 }
 /**
  * Saves emails into the database
  *
  * @param Email[] $emails
  * @param EmailFolder $folder
  */
 protected function saveEmails(array $emails, EmailFolder $folder)
 {
     $this->emailEntityBuilder->removeEmails();
     $uids = array_map(function ($el) {
         /** @var Email $el */
         return $el->getId()->getUid();
     }, $emails);
     $repo = $this->em->getRepository('OroImapBundle:ImapEmail');
     $query = $repo->createQueryBuilder('e')->select('e.uid')->innerJoin('e.email', 'se')->innerJoin('se.folder', 'sf')->where('sf.id = :folderId AND e.uid IN (:uids)')->setParameter('folderId', $folder->getId())->setParameter('uids', $uids)->getQuery();
     $existingUids = array_map(function ($el) {
         return $el['uid'];
     }, $query->getResult());
     foreach ($emails as $src) {
         if (!in_array($src->getId()->getUid(), $existingUids)) {
             $this->log->notice(sprintf('Persisting "%s" email (UID: %d) ...', $src->getSubject(), $src->getId()->getUid()));
             $email = $this->emailEntityBuilder->email($src->getSubject(), $src->getFrom(), $src->getToRecipients(), $src->getSentAt(), $src->getReceivedAt(), $src->getInternalDate(), $src->getImportance(), $src->getCcRecipients(), $src->getBccRecipients());
             $email->setFolder($folder);
             $imapEmail = new ImapEmail();
             $imapEmail->setUid($src->getId()->getUid())->setEmail($email);
             $this->em->persist($imapEmail);
             $this->log->notice(sprintf('The "%s" email was persisted.', $src->getSubject()));
         } else {
             $this->log->notice(sprintf('Skip "%s" (UID: %d) email, because it is already synchronised.', $src->getSubject(), $src->getId()->getUid()));
         }
     }
     $this->emailEntityBuilder->getBatch()->persist($this->em);
     $this->em->flush();
 }