Пример #1
0
 /**
  *
  * @return Conjoon_Modules_Groupware_Email_Folder_Facade
  */
 public static function getInstance()
 {
     if (!self::$_instance) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
 /**
  *
  *
  */
 protected function moveImapToOutbox($account, $draft, $userId, $postedAttachments, $removeAttachmentIds)
 {
     // check ifmapping is okay
     $accountId = $account->getId();
     $em = Zend_Registry::get(Conjoon_Keys::DOCTRINE_ENTITY_MANAGER);
     $rep = $em->getRepository('\\Conjoon\\Data\\Entity\\Mail\\DefaultMailAccountEntity');
     $accountEntity = $rep->findById($accountId);
     $mappings = $accountEntity->getFolderMappings();
     $globalName = "";
     for ($i = 0, $len = count($mappings); $i < $len; $i++) {
         if ($mappings[$i]->getType() == 'OUTBOX') {
             $globalName = $mappings[$i]->getGlobalName();
             break;
         }
     }
     if ($globalName == "") {
         $this->view->error = $this->getErrorDto('Missing folder mapping', 'The message cannot be moved into the outbox folder, since no valid outbox folder was found. Did you configure the folder mappings of the account?', Conjoon_Error::LEVEL_ERROR);
         $this->view->success = false;
         $this->view->item = null;
         return;
     }
     // assemble mail
     /**
      * @see Conjoon_Modules_Groupware_Email_Sender
      */
     require_once 'Conjoon/Modules/Groupware/Email/Sender.php';
     $assembleInformation = Conjoon_Modules_Groupware_Email_Sender::getAssembledMail($draft, $account, $postedAttachments, $removeAttachmentIds, $userId, $this->getTransportForAccount($account));
     $mail = $assembleInformation['message'];
     /**
      * @see Conjoon_Mail_Storage_Imap
      */
     require_once 'Conjoon/Mail/Storage/Imap.php';
     /**
      * @see Conjoon_Modules_Groupware_Email_ImapHelper
      */
     require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
     /*REMOVE DRAFT!*/
     if ($draft->getId() > 0) {
         $uId = $draft->getId();
         $path = $draft->getPath();
         // check if folder is remote folder
         /**
          * @see Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser
          */
         require_once 'Conjoon/Text/Parser/Mail/MailboxFolderPathJsonParser.php';
         $parser = new Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser();
         $pathInfo = $parser->parse(json_encode($path));
         /**
          * @see Conjoon_Modules_Groupware_Email_Folder_Facade
          */
         require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
         $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
         // get the account for the root folder first
         $imapAccount = $facade->getImapAccountForFolderIdAndUserId($pathInfo['rootId'], $userId);
         if ($imapAccount && !empty($pathInfo) && $facade->isRemoteFolder($pathInfo['rootId'])) {
             // if remote, where is the referenced mail stored?
             $prevGlobalName = $facade->getAssembledGlobalNameForAccountAndPath($imapAccount, $pathInfo['path']);
             /**
              * @see Conjoon_Modules_Groupware_Email_ImapHelper
              */
             require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
             /**
              * @see Conjoon_Mail_Storage_Imap
              */
             require_once 'Conjoon/Mail/Storage/Imap.php';
             $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($imapAccount);
             $storage = new Conjoon_Mail_Storage_Imap($protocol);
             // get the number of the message by it's unique id
             $storage->selectFolder($prevGlobalName);
             $messageNumber = $storage->getNumberByUniqueId($uId);
             $storage->removeMessage($messageNumber);
             $storage->close();
         }
     }
     /* ^^EO REMOVE DRAFT */
     $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($account->getDto());
     $storage = new Conjoon_Mail_Storage_Imap($protocol);
     $storage->selectFolder($globalName);
     $response = $storage->appendMessage($mail->getExpectedHeaderText() . "\n\n" . $mail->getExpectedBodyText(), $globalName);
     $lastMessage = -1;
     $ret = null;
     if (is_array($response) && isset($response[0])) {
         $ret = explode(' ', $response[0]);
     }
     if (is_array($ret) && count($ret) == 2 && is_numeric($ret[0]) && trim(strtolower($ret[1])) == 'exists') {
         $lastMessage = $ret[0];
     }
     if ($lastMessage == -1) {
         $lastMessage = $storage->countMessages();
     }
     if ($lastMessage == -1) {
         throw new RuntimeException("Could not find message id.");
     }
     $protocol->store(array('\\Seen'), $lastMessage, null, '+');
     $item = $this->getSingleImapListItem($account->getDto(), $userId, $lastMessage, $globalName);
     $this->view->error = null;
     $this->view->success = true;
     $this->view->item = $item;
     /*$this->view->newVersion    = $newVersion;
       if ($newVersion) {
           $this->view->previousId = $draft->getId();
       }*/
 }
 /**
  *
  * @return Conjoon_Modules_Groupware_Email_Folder_Facade
  */
 private function _getFolderFacade()
 {
     if (!$this->_folderFacade) {
         /**
          * @see Conjoon_Modules_Groupware_Email_Folder_Facade
          */
         require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
         $this->_folderFacade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
     }
     return $this->_folderFacade;
 }
Пример #4
0
 /**
  * Returns either a cached list of email accounts for a user, or
  * the accounts out of the database.
  *
  * @param array $options An associative array with the following
  * key value/pairs:
  *   - userId: the id of the user to fetch all email accounts for
  * @param Conjoon_BeanContext_Decoratable $model
  *
  * @return Array an array with instances of
  * Conjoon_Modules_Groupware_Feeds_Account_Model_Account
  */
 protected function _build(array $options, Conjoon_BeanContext_Decoratable $model)
 {
     $userId = $options['userId'];
     /**
      * @see Conjoon_BeanContext_Decorator
      */
     require_once 'Conjoon/BeanContext/Decorator.php';
     $decoratedModel = new Conjoon_BeanContext_Decorator($model);
     $accounts = $decoratedModel->getAccountsForUserAsDto($userId);
     /**
      * @see Conjoon_Modules_Groupware_Email_ImapHelper
      */
     require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
     /**
      * @see Conjoon_Modules_Groupware_Email_Folder_Facade
      */
     require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
     $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
     for ($i = 0, $len = count($accounts); $i < $len; $i++) {
         $dto =& $accounts[$i];
         if ($dto->protocol == 'IMAP') {
             $folderMappings =& $dto->folderMappings;
             $folder = null;
             try {
                 $folder = $facade->getRootFolderForAccountId($dto, $userId);
                 $folder = $folder[0];
             } catch (Exception $e) {
                 // connection exception ignore
             }
             for ($a = 0, $lena = count($folderMappings); $a < $lena; $a++) {
                 if (!$folder) {
                     // connection exception, ignore
                     $folderMappings[$a]['globalName'] = "";
                     $folderMappings[$a]['delimiter'] = "";
                     $folderMappings[$a]['path'] = array();
                     continue;
                 }
                 try {
                     $folderMappings[$a]['delimiter'] = Conjoon_Modules_Groupware_Email_ImapHelper::getFolderDelimiterForImapAccount($dto);
                     $folderMappings[$a]['path'] = array_merge(array('root', $folder['id']), Conjoon_Modules_Groupware_Email_ImapHelper::splitFolderForImapAccount($folderMappings[$a]['globalName'], $dto));
                 } catch (Exception $e) {
                     // connection exception, ignore
                     $folderMappings[$a]['globalName'] = "";
                     $folderMappings[$a]['delimiter'] = "";
                     $folderMappings[$a]['path'] = array();
                 }
             }
         }
         if (!$dto->isOutboxAuth) {
             $dto->usernameOutbox = "";
             $dto->passwordOutbox = "";
         }
         $dto->passwordOutbox = str_pad("", strlen($dto->passwordOutbox), '*');
         $dto->passwordInbox = str_pad("", strlen($dto->passwordInbox), '*');
     }
     return $accounts;
 }
 /**
  *
  */
 protected function imapItemsMoved(array $toMove, $fromPath, $toPath)
 {
     require_once 'Conjoon/Keys.php';
     $auth = Zend_Registry::get(Conjoon_Keys::REGISTRY_AUTH_OBJECT);
     $userId = $auth->getIdentity()->getId();
     // check if folder is remote folder
     /**
      * @see Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser
      */
     require_once 'Conjoon/Text/Parser/Mail/MailboxFolderPathJsonParser.php';
     $parser = new Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser();
     $pathInfo = $parser->parse($fromPath);
     $pathInfoTo = $parser->parse($toPath);
     /**
      * @see Conjoon_Modules_Groupware_Email_Folder_Facade
      */
     require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
     $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
     // get the account for the root folder first
     $imapAccount = $facade->getImapAccountForFolderIdAndUserId($pathInfo['rootId'], $userId);
     if (!$imapAccount || empty($pathInfo) || !$facade->isRemoteFolder($pathInfo['rootId'])) {
         return false;
     }
     $globalNameFrom = $facade->getAssembledGlobalNameForAccountAndPath($imapAccount, $pathInfo['path']);
     $globalNameTo = $facade->getAssembledGlobalNameForAccountAndPath($imapAccount, $pathInfoTo['path']);
     /**
      * @see Conjoon_Modules_Groupware_Email_ImapHelper
      */
     require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
     /**
      * @see Conjoon_Mail_Storage_Imap
      */
     require_once 'Conjoon/Mail/Storage/Imap.php';
     $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($imapAccount);
     $storage = new Conjoon_Mail_Storage_Imap($protocol);
     foreach ($toMove as $values) {
         $uId = $values['id'];
         $storage->selectFolder($globalNameFrom);
         $messageNumber = $storage->getNumberByUniqueId($uId);
         $storage->copyMessage($messageNumber, $globalNameTo);
         // go to target folder and flag message as seen
         $storage->selectFolder($globalNameTo);
         $num = $storage->countMessages();
         $protocol->store(array('\\Seen'), $num, null, '+');
     }
     $storage->selectFolder($globalNameFrom);
     foreach ($toMove as $values) {
         $uId = $values['id'];
         $messageNumber = $storage->getNumberByUniqueId($uId);
         $protocol->store(array('\\Deleted'), $messageNumber, null, '+');
     }
     $protocol->expunge();
     $storage->close();
     return true;
 }
 protected function isRemotePath($path, $userId)
 {
     // check if folder is remote folder
     /**
      * @see Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser
      */
     require_once 'Conjoon/Text/Parser/Mail/MailboxFolderPathJsonParser.php';
     $parser = new Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser();
     $pathInfo = $parser->parse(json_encode($path));
     /**
      * @see Conjoon_Modules_Groupware_Email_Folder_Facade
      */
     require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
     $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
     // get the account for the root folder first
     $imapAccount = $facade->getImapAccountForFolderIdAndUserId($pathInfo['rootId'], $userId);
     if ($imapAccount && !empty($pathInfo) && $facade->isRemoteFolder($pathInfo['rootId'])) {
         return $imapAccount;
     }
     return null;
 }
 /**
  *
  */
 protected function imapFolderDeleted($path)
 {
     require_once 'Conjoon/Keys.php';
     $auth = Zend_Registry::get(Conjoon_Keys::REGISTRY_AUTH_OBJECT);
     $userId = $auth->getIdentity()->getId();
     // check if folder is remote folder
     /**
      * @see Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser
      */
     require_once 'Conjoon/Text/Parser/Mail/MailboxFolderPathJsonParser.php';
     $parser = new Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser();
     $pathInfo = $parser->parse($path);
     /**
      * @see Conjoon_Modules_Groupware_Email_Folder_Facade
      */
     require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php';
     $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance();
     // get the account for the root folder first
     $imapAccount = $facade->getImapAccountForFolderIdAndUserId($pathInfo['rootId'], $userId);
     if (!$imapAccount || empty($pathInfo) || !$facade->isRemoteFolder($pathInfo['rootId'])) {
         return false;
     }
     $globalName = $facade->getAssembledGlobalNameForAccountAndPath($imapAccount, $pathInfo['path']);
     /**
      * @see Conjoon_Modules_Groupware_Email_ImapHelper
      */
     require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
     /**
      * @see Conjoon_Mail_Storage_Imap
      */
     require_once 'Conjoon/Mail/Storage/Imap.php';
     $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($imapAccount);
     $storage = new Conjoon_Mail_Storage_Imap($protocol);
     $storage->removeFolder($globalName);
     $storage->close();
     return true;
 }